4.20 学习笔记

一、什么是 web 自动化测试

  • web 自动化测试:通过代码替换手工对网页进行的测试
  • UI 自动化测试:web 自动化 + app 自动化测试

二、什么是 selenium

  • selenium 是企业最主流的 web 自动化测试框架,也是中高级测试人员必备的测试框架之一
  • selenium 的三大组件:
    1. IDE 浏览器插件:功能为录屏(将浏览器操作转化为代码)
    2. webdriver:功能为提供大量方法,实现对浏览器的各种操作(点击、输入、拖动......)
    3. Grid 分布式:功能为实现在同一浏览器执行多条用例

三、web 自动化测试环境的搭建

  1. 安装 Python 环境及 pycharm 集成开发工具(前面已经都安装好了)
  2. 安装 selenium
    • dos 命令:pip install -U selenium
  3. 下载客户端浏览器
  4. 下载与之对应的浏览器驱动(客户端浏览器的版本必须与对应浏览器驱动的版本一致

四、html 及常用的标签

  1. 什么是 html:超文本语言,前端脚本语言(网页),超文本语言由很多一对对的标签组成
  2. html 的基本组成结构

<html>

<head>

<title>网页标题</title>

</head>

<body>

网页内容

</body>

</html>

3.html 的常用标签

input标签:表单标签,标签的type属性值不一样,则元素类型也不一样

  • div标签:用来页面布局,在 div 下面可以嵌套更多的元素的标签对
  • img:图片标签
  • a:超链接标签
  • form:表单标签
  • ......

应用:例题一

import time

from selenium import webdriver #

from selenium.webdriver.common.by import By #
#打开浏览器
driver = webdriver.Chrome()
#加载项目地址

driver.get("https://www.baidu.com/")

driver.get("https://www.hao123.com/")
find_element() #返回一个元素
find_elements(定位方法,定位语句) #找一组元素 ,返回一组元素,返回的是列表

class By:

"""Set of supported locator strategies."""

ID = "id"

XPATH = "xpath"

LINK_TEXT = "link text"

PARTIAL_LINK_TEXT = "partial link text"

NAME = "name"

TAG_NAME = "tag name"

CLASS_NAME = "class name"

CSS_SELECTOR = "css selector"

前六种都是通过特殊属性定位,且唯一

**#定位百度搜索输入框

#定位方法一:通过id属性定位,id属性值唯一**

baidu_sous = driver.find_element(By.ID,"chat-textarea")

# #定位方法二:通过name属性定位,name属性值唯一

baidu_sous = driver.find_element(By.NAME,"wd")

baidu_sous.send_keys("火影忍者")

# #定位方法三:通过标签定位(基本不用,一般不会只通过标片进行定位,一般进行组合定位)

baidu_sous = driver.find_element(By.TAG_NAME,"input")

#定位方法四:通过class属性定位,class属性值唯一

baidu_sous = driver.find_element(By.CLASS_NAME,"chat-input-textarea chat-input-scroll-style")

# #定位方法五:通过链接文本定位 针对a标签进行定位

news_element = driver.find_element(By.LINK_TEXT,"新闻")

# 点击

news_element.click()

# #定位方法六:通过部分链接文本定位 针对a标签进行定位

news_element = driver.find_element(By.PARTIAL_LINK_TEXT,"地")

news_element.click()

#定位方法七:通过xpath定位

# #1.通过绝对路径定位,开头是/

#/html/body/div1/div2/div3/div/div/div2/div/div/div/div/div1/div4/div1/div2/textarea

baidu_sous = driver.find_element(By.XPATH,"/html/body/div1/div2/div3/div/div/div2/div/div/div/div/div1/div4/div1/div2/textarea")

baidu_sous.send_keys("火影忍者")

# 2.通过相对路径定位

# 相对路径:是从某个路径开始的,开头是//

baidu_sous = driver.find_element((By.XPATH,"//div@id='chat-input-container'/textarea"))

baidu_sous.send_keys("火影忍者")

hao123_sous = driver.find_element(By.XPATH,"//form/div2/input1")

# #3.兄弟标签 通过标签加索引(索引从1开始)

hao123 = driver.find_element(By.XPATH,"//div@id='s-top-left'/a2")

hao123.click()

# # 4.标签@属性名='属性值'

#多属性定位 标签@属性名1='属性值1' and @属性名2='属性值2'

# hao123_sous = driver.find_element(By.XPATH,"//input@name='word'")

hao123_sous = driver.find_element(By.XPATH,"//input@name='word' and @data-hook='searchInput'")

#5. 通过部分属性值定位 标签+属性

# (1)标签substring(@属性名,3)='字符串' 返回从参数1字符串中,某个位置开始截取,截取到最后

hao123_sous = driver.find_element(By.XPATH,"//inputsubstring(@name,3)='rd'")

# (2)标签contains(@属性名/方法,'部分属性值')

hao123_sous = driver.find_element(By.XPATH,"//inputcontains(@name,'rd')")

#6. (1)通过文本定位 //标签text()="文本内容"

hao123_tianq = driver.find_element(By.XPATH,"//atext()='七日天气'")

hao123_tianq.click()

(2)通过部分文本进行定位

hao123_tianq = driver.find_element(By.XPATH,"//*contains(text(),'七日')")
hao123_tianq.click()

#定位方法八:通过css选择器定位

#发送

hao123_sous.send_keys("火影忍者")

time.sleep(5) #休眠5秒
driver.close()

例题二

from selenium import webdriver

from selenium.webdriver.common.by import By

import time

# 打开浏览器

driver = webdriver.Chrome()
# 加载项目地址,打开京东

driver.get("https://re.m.jd.com/page/homelike")
#代码运行比页面加载快,所以要等待
#强制等待3秒

time.sleep(3)
#智能等待
# (1)隐式等待

driver.implicitly_wait(10)
# (2)显式等待

jd_goods = driver.find_elements(By.XPATH,"//ul@class='service-bd'/li1/div@class='first-cate-container'/a")

jd_goods1 = jd_goods0

jd_goods1.click()

相关推荐
bigfootyazi2 分钟前
python爬虫-基本库-urllib库(常用速查)
开发语言·爬虫·python
瑶总迷弟17 分钟前
使用 mis-tei 在昇腾310P上部署 bge-m3模型
pytorch·python·华为·语言模型·自然语言处理·cnn·unix
吃好睡好便好21 分钟前
说说免疫力的维护
学习·生活
belong_my_offer34 分钟前
认识到精通函数
开发语言·python
凉、介1 小时前
深入理解 ARMv8-A|处理器模式与寄存器
笔记·学习·嵌入式·arm
z200509301 小时前
【linux学习】深入理解linux文件I/O,从C标准库到内核态
linux·学习·操作系统
whyTeaFo2 小时前
MIT 6.1810: Lec 5: calling conventions and stack frames RISC-V
笔记
卡次卡次12 小时前
vibecoding起步注意点:插件、Skills、MCP、Hooks
服务器·数据库·python·oracle
阿文的代码库2 小时前
康威尔生命游戏规则介绍与学习
学习
我的xiaodoujiao2 小时前
API 接口自动化测试详细图文教程学习系列24--如何用Pytest去设计接口测试用例并执行
python·学习·测试工具·pytest