web自动化测试
- 了解web自动化测试
- 安装selenium
- 了解8种定位方式
什么Web项目适合做自动化测试
- 需求变动不频繁
- 项目周期长
- 项目需要回归测试
web自动化开始阶段
手工测试之后(1,时间问题2,功能不完善)
自动化测试分类
- web自动化测试
- 移动自动化测试(app自动化)
- 接口自动化(工具、代码)
- 单元测试
selenium
- 开源、免费
- 跨平台(Linux,windows,mac)
- 支持多浏览器
- 支持多语言
- 成熟稳定
- 功能强大,支持商业化大部分功能,由于开源,可进行定制化需求功能
对pip进行升级:
python -m pip install --upgrade pip
selenium安装:
pip install selenium == 版本号
pip install selenium == 错误的版本号,会显示所有可安装的版本
元素定位依赖于
- 标签名
- 属性
- 层级
- 路径
定位方式
- id
- name
- class_name(使用元素的class属性定位)
- tag_name(标签名称<标签名…>)
- link_text(定位超链接a标签)
- partial_link_text(定位超链接a标签,模糊)
- xpath(基于元素路径)
- css(元素选择器)
基于元素属性特有定位方式:
id / name / class_name
基于元素标签名称定位:tag_name
定位超链接文本:
== link_text , pattial_link_text==
基于元素路径定位: xpath
基于选择器: css
id定位
语法:
driver.find_element_by_id(id)
from selenium import webdriver
from time import sleep
diver=webdriver.Chrome()
diver.get(url="")
diver.find_element_by_id("usera").send_keys("adn")#查找并输出
diver.find_element_by_id("password").send_keys("13432")
sleep(3)
diver.quit()
name定位
语法:
driver.find_element_by_name(name)
#导包
from selenium import webdriver
from time import sleep
#获取浏览器对象
diver=webdriver.Chrome()
#打开url
diver.get(url="")
diver.find_element_by_name("usera").
send_keys("adn")#查找并输出
diver.find_element_by_name("password").send_keys("13432")
sleep(3)
diver.quit()
class_name定位
语法:
driver.find_element_by_class_name(class_name)
tag_name定位
语法:
driver.find_selement_by_tag_name(“标签名”)
注:当有多个标签名时,默认返回符合要求的第一个标签
link_text定位
语法:
driver.find_element_by_link_text(link_text)
只能准确匹配超链接标签
partial_link_text模糊定位
语法:
driver.find_element_by_ partial_link_text (partial_link_text)
可以模糊匹配超链接文本,但必须是唯一模糊关键词
若没有使用唯一代表词,则默认返回符合条件的第一个元素
from selenium import webdriver
from time import sleep
diver=webdriver.Chrome()
diver.get(url="")
#精准匹配只含“新浪”的超链接标签
diver.find_element_link_text("新浪").
click()
#模糊匹配超链接中含有“新浪”的
diver.find_element_partial_link_text("新浪").click()
sleep(3)
diver.quit()
xpath基于元素路径
语法:
driver.find_element_by_xpath(xpath).send_keys()
xpath定位策略
- 路径定位
1.绝对路径:以单斜杠开头逐级开始缩写,不能跳级
/html/body/div/p[1]/input
2.相对路径:以双斜杠开头,双斜杠后面跟元素名 称,不知元素名称可以使用*代替
//input
// *
- 路径结合属性
在Xpath中,所有属性必须使用@符合修饰
//*input[@id=id值]
- 路径结合逻辑(多个属性)
//*[@id=“id值” and @属性值=“属性值”]
- 路径结合层级
//*[@id=‘父级id属性值’] / input
注意:
1.一般见识使用指定标签名称,不使用 * 代替,效率比较慢
2.无论是绝对路径和相对路径,/后面必须为元素的名称或者 *
3.在工作中,如果能使用相对路径绝对不使用绝对路径
拓展:
- //*[text()=“文本内容”]
据文本内容查找 一般适合p、a标签- //*[contains(@type,“word”)]
属性中含有xxx的元素
contains为关键字,不可更改- //*[starts-with(@id,“pass”)]
以xxx开头的元素
stars-with为关键字,不可更改
css定位
语法:
element=driver.find_element_by_css_selector()
css定位常用策略
- id选择器
语法:
#id
例:#password
- class选择器
语法:
.class
例:.class
- 元素选择器
语法:
element
例:input
- 属性选择器
语法
[属性名=属性值]
- 层级选择器
语法:
1.p>input
2.p input
注:>与空格的区别,大于号后必须是子元素,而空格可以跨级
拓展:
- [属性^=‘开头的字母’]
获取指定属性以指定字母开头的元素- [属性$="结束的字母’]
获取指定属性以指定字母结束的元素- [属性*=‘包含的字母’]
获取指定属性中包含指定字母的元素
定位一组元素
语法:
driver.find_elements_by_xxx( )
返回结果:类型为列表,要对列表进行访问和操作必须指定下标或进行遍历[ 下标从0开始]
拓展
八种元素定位的底层实现:
语法:
driver.find_element(By.xxx,‘value’)
By.xxx: 为By类的类型 如:By.id
value: 元素的定位值 如:“password”
注:By类:需要导包:
from selenium.webdriver.common.by import By
元素操作方法:
send_keys()输入方法
click()点击方法
clear()清空