web自动化项目流程
- 测试计划时分析哪些功能需要进行自动化测试,哪些进行手工测试
- 什么时候开始介入web自动化测试?在项目稳定的时候
web自动化代码流程
- 手工测试,分析测试步骤及准备元素定位方式,写到PO中
- 测试类中,用注释写清楚测试步骤
- 测试类中,准备前置条件、后置条件
- PO类中,封装页面行为
- 测试类中,调用具体的PO类
重点内容
元素定位
常用定位:id、name、classname
xpath
- xpath表达式
- 一定要使用相对路径//(为什么不能使用绝对路径?无法应对页面的改动)
- 逻辑符,and、or
- 索引从1开始,[1](极易出现错误)
- 关系运算,通过父亲找儿子,通过儿子找父亲
- 轴运算,找哥哥姐姐、找弟弟妹妹、找祖先
- xpath和css的比较
- css表达方式比xpath更简洁些;主流浏览器(chrome、firefox)使用css选择器查询速度较快(毫秒级差距)
- xpath功能更强大,有更丰富的函数及轴定位,可定位一些复杂关系的元素;xpath支持用text文本,css选择器不支持;对于一些复杂的元素,xpath的写法反而更简洁些
selenium运行原理
- 结合图说明:
- 客户端与webdriver如何沟通?
通过json wire protocol协议(其本质就是http协议) - selenium为什么能够跨语言?
- webdriver的接口服务。无论用什么语言,均可调用webdriver的接口
- webdriver与浏览器如何沟通?
通过Js。因为浏览器内置Js解释器,也只能听懂Js。
三大切换
- 窗口切换
- iframe切换
- alert切换
页面操作
元素操作
- 单一操作
- 鼠标操作:click()
- 键盘操作:send_keys(),输入某个按键可调用Keys类的具体按键。
- 链式操作
ActionChains(driver).click(el).move_to_element(el).perform()- 为什么要加perform()?让动作生效(极易出错)
- 为什么能进行链式调用?每个函数均return self。在PO模式中,我们也运用了链式调用的原理进行PO的链式调用。
下拉框操作
select = Select(下拉框的element)
通过select调用一下方法进行选择、反选:
文件上传
方法
- send_keys(“文件路径”)
- 系统交互,需使用第三方模块:pywinauto, pyautogui
JS操作
execute_script, arguments[0]
PO模式
- 什么是PO模式?
把页面封装成对象,对象的属性包括页面的url、网页标题、元素定位器,对象的方法包括元素定位方法、元素操作方法。 - PO模式有什么用?
- 可维护性
- 可读性
- 可扩展性
- 可复用性
- PO的封装原则
- 是不是所有的动作都需要单独封装成页面对象的方法?
- 根据需要。遵循的原则:你用到了什么行为, 你就封装什么行为。
- 封装的页面操作的返回值
- self, 或者是其他的页面的对象
- 如果你需要获取某个元素或者属性,就直接返回元素本身或者属性。
- 如果一个操作它可能会有多个结果,比如进行页面跳转或者本页面。
- 根据结果封装成多个方法。
- 是不是所有的动作都需要单独封装成页面对象的方法?
如何提高web自动化测试的稳定性?
- 加上等待。
- 隐性等待。只能等待元素,且只能等待元素被找到
- 显性等待。可进行多种情景的等待,等待的条件也很丰富
- 强制等待。用在多个系统进行交互的地方
- 元素定位。找前端工程师不会轻易修改或修改影响不大的定位方式;在用xpath或css定位时使用相对路径。
- 异常处理。如果要定位的元素不在当前页面,可抛出异常,方便定位。写在basepage的构造方法中:
- 使用pytest的重运行机制。