web自动化总结

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运行原理

  • 结合图说明:
    web自动化总结
  • 客户端与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调用一下方法进行选择、反选:
web自动化总结

文件上传

方法

  • send_keys(“文件路径”)
  • 系统交互,需使用第三方模块:pywinauto, pyautogui

JS操作

execute_script, arguments[0]

PO模式

  • 什么是PO模式?
    把页面封装成对象,对象的属性包括页面的url、网页标题、元素定位器,对象的方法包括元素定位方法、元素操作方法。
  • PO模式有什么用?
    • 可维护性
    • 可读性
    • 可扩展性
    • 可复用性
  • PO的封装原则
    • 是不是所有的动作都需要单独封装成页面对象的方法?
      • 根据需要。遵循的原则:你用到了什么行为, 你就封装什么行为。
    • 封装的页面操作的返回值
      • self, 或者是其他的页面的对象
      • 如果你需要获取某个元素或者属性,就直接返回元素本身或者属性。
      • 如果一个操作它可能会有多个结果,比如进行页面跳转或者本页面。
      • 根据结果封装成多个方法。

如何提高web自动化测试的稳定性?

  • 加上等待。
    • 隐性等待。只能等待元素,且只能等待元素被找到
    • 显性等待。可进行多种情景的等待,等待的条件也很丰富
    • 强制等待。用在多个系统进行交互的地方
  • 元素定位。找前端工程师不会轻易修改或修改影响不大的定位方式;在用xpath或css定位时使用相对路径。
  • 异常处理。如果要定位的元素不在当前页面,可抛出异常,方便定位。写在basepage的构造方法中:
    web自动化总结
  • 使用pytest的重运行机制。
上一篇:敏捷转型要从 PO 作起


下一篇:变量,属性及方法命名规范