UI自动化测试
selenium:通过脚本操作浏览器
pip install selenium
pip install
打开浏览器,下载驱动
通过webdriver_manager实现浏览器自动匹配驱动
-
步骤
打开浏览器
打开网页
操作元素
from selenium.webdriver.common.by import By from time import sleep from drivers import NewDriver driver = NewDriver().newDriver() #打开网页 driver.get("http://www.baidu.com") #找到元素 driver.find_element(By.ID, "kw").send_keys("布偶猫") driver.find_element(By.ID, "su").click sleep(30)
-
公司自动化组的操作流程
手工测试组编写用例,交给自动化测试组,自动化测试组根据优先级进行测试,先做优先级高难度低的-->优先级低难度低-->优先级高难度高
大多的操作是 输入,点击
其他:拖动,滑动,双击
-
通过Xpath定位
-
如何断言
通过页面的显示,进行断言。例:收藏一本书,则进入这本书的详情页,显示已收藏。
一个操作一行代码。
-
问题:
复杂的控件定位不到:
-
Xpath
XML Path Language XML控件定位语言
绝对路径:
Xpath 中最直观的定位策略就是绝对路径。 以百度中的输入框和按钮为例,通过拷贝出来的 full Xpath:
/html/body/div[2]/div/div/div/div/form/span/input
相对路径
除了绝对路径,Xpath 中更常用的方式是相对路径定位方法,以“//”开头(这个就相当于全局搜索)。
表达式 说明 举例
/ 从根节点开始选取 /html/div/span
// 从任意节点开始选取 //input
. 选取当前节点
.. 选取当前节点的父节点 //input/.. 会选取 input 的父节点
@ 选取属性或者根据属性选取 //input[@data] 选取具备 data 属性的 input 元素 //@data 选取所有 data 属性*通配符,表示任意节点或任意属性
-
日期控件
每个控件都要等他加载完成后,再操作
加载:请求后端数据,还没渲染页面时
怎么保证加载完成:
修改日期中的年份
-
线性转封装思路
相同步骤封装
新建类,放入方法中,不可行
selenium运行依靠driver
把登录功能隔离时新建一个driver
其他时刻又新建了driver,运行失败
-
用*实现解包操作:
分解为2个参数
Xpath可读性差,重命名
改需求时不好维护,
入参不好改变
-
具体实现
POM:对page进行操作
定义page中的方法和元素定位(属性)
将driver定义到BasePage中
然后继承basePage,获取操作的方法
将操作(打开浏览器,点击,输入)分离出去,通过参数定义路径和输入
其实我们可以通过传入driver和返回driver的方式
实际上是将driver放入父类的构造函数中,新增Driver只需子类调用构造函数
思想即:将所有基本操作和driver,登录浏览器等操作放入父类中,将具体操作步骤放入子类中。
-
使用Pytest将页面关联起来
利用@Pytest.fixture(session)定义作用域
在这个方法下,新增driver
将这个方法名称写到需要连贯运行的页面中,让他们为一个driver,则会连续运行
-
分布式测试selenium grid
分布式多台机器完成一个行为
可以多台机器一起测,或者设置一个服务器的极限,当到了极限后,则换成另外的浏览器
webUI很慢,需要用分布式
-
selenium原理
-
selenium grid 逻辑
-
步骤
启动jar包,设置主节点
另一台服务器下设置子节点
登录localhost:4444(默认端口号)可以看到子节点
command_executor指定hub主机
当当前一台主机运行不下去时,会自动采用另一台测试
grid当中driver的生成有grid生成,与原本定义方法不同