Python 测开27期 - julia - 学习笔记 - web自动化测试进阶

高级定位-css

适用场景

  • 支持web场景
  • 支持app端的webview

定位方式

  • 绝对定位
  • 相对定位:可维护性更强,更加简洁,解决各种复杂的定位场景

css定位浏览器端的调试方法

  • 进入浏览器console
  • 输入:$(“css表达式”)或者$$(“css表达式”)

css基础语法

类型 表达式 console中的写法
标签 标签名 $(‘input’)
.class属性值 $('.s_inp)
ID #id属性值 $('#kw)
属性 [属性名=‘属性值’] $(name='input)

css关系定位

类型 格式 console中的写法
并集 元素,元素 $(‘.bg,.s_ipt_wr’)
邻近兄弟 元素+元素 $(‘.bg+.s_ipt_wr’)
兄弟 元素1~元素2 $(‘.bg~.s_ipt_wr’)
父子 元素>元素 $(‘.bg>s_ipt_wr’)
后代 元素 元素 $(‘.bg .s_ipt_wr’)

css顺序关系

类型 格式 console中的写法
父子关系+顺序 元素 元素 $(‘#form>input:nth-child(2)’)
父子关系+标签类型+顺序 元素 元素 $(‘#form>input:nth-of-type(1)’)

高级定位-xpath

xpath基本概念

  • XPath 是一门在 XML 文档中查找信息的语言
  • XPath 使用路径表达式在 XML 文档中进行导航
  • XPath 的应用非常广泛
  • XPath 可以应用在UI自动化测试

适用场景

  • web自动化测试
  • app自动化测试

定位方式

  • 绝对定位
  • 相对定位:可维护性更强,更加简洁,相比css可以支持更多的方式

浏览器调试方法

  • 浏览器-console
    • $x("xpath表达式")
  • 浏览器-elements
    • ctrl+f 输入xpath或者css

xpath基础语法(包含关系)

表达式 结果 console中的写法 释义
/ 从该节点的子元素选取 $x(“/”) 整个页面
// 从该节点的子孙元素选取 $x(“//”) 页面中的所有的子元素
* 通配符 $x(“/*”) 整个页面中的所有元素
nodename 选取此节点的所有子节点 $x(“//div”) 查找页面上面所有的div标签节点
选取当前节点的父节点 $x(‘//*[@id=“site-logo”]/…’) 查找节点的父节点
@ 选取属性 $x(‘//*[@id=“site-logo”]’) 查找id属性为site-logo的节点

xpath顺序关系(索引)

  • xpath通过索引直接获取对应元素
  • 获取此节点下的所有的li元素
    $x(“//*[@id=‘ember21’]//li”)
  • 获取此节点下【所有的节点的】第一个li元素
    $x(“//*[@id=‘ember21’]//li[1]”)

xpath高级用法

  • [last()]: 选取最后一个
  • [@属性名='属性值' and @属性名='属性值']: 与关系
  • [@属性名='属性值' or @属性名='属性值']: 或关系
  • [text()='文本信息']: 根据文本信息定位
  • [contains(text(),'文本信息')]: 根据文本信息包含定位
  • 注意:所有的表达式需要和[]结合

显示等待

原理

  • 在代码中定义等待一定条件发生后再进一步执行代码
  • 在最长等待时间内循环执行结束条件函数
  • WebDriverWait(driver实例,最长等待时间,轮询时间).until(结束条件函数)

常见expected_conditions

类型 示例方法 说明
element element_to_be_clickable(), visibility_of_element_located() 针对于元素,比如判断元素是否可以点击,或者元素是否可见
url url_contains() 针对于 url
title title_is() 针对于标题
frame frame_to_be_available_and_switch_to_it(locator) 针对于 frame
alert alert_is_present() 针对于弹窗
  • 官方的 excepted_conditions 不可能覆盖所有场景
  • 定制封装条件会更加灵活、可控

高级控件交互方法

使用场景

使用场景 对应事件
复制粘贴 键盘事件
拖动元素到某个位置 鼠标事件
鼠标悬停 鼠标事件
滚动到某个元素 滚动事件
使用触控笔点击 触控笔事件(了解即可)

ActionChains解析

  • 实例化类ActionChains,参数为driver实例。
  • 中间可以有多个操作。
  • .perform()代表确定执行。
ActionChains(self.driver).操作.perform()

键盘事件-使用shift实现大写

  • ActionChains(self.driver): 实例化ActionChains类
  • key_down(Keys.SHIFT, ele): 按下shift键实现大写
  • send_keys("selenium"): 输入大写的selenium
  • perform(): 确认执行

键盘事件-输入后回车

  • 直接输入回车: 元素.send_keys(Keys.ENTER)
  • 使用ActionChains: key_down(Keys.ENTER)

键盘事件-复制粘贴

  • 多系统兼容
    • mac 的复制按钮为 COMMAND
    • windows 的复制按钮为 CONTROL
  • 左箭头:Keys.ARROW_LEFT
  • 按下COMMAND或者CONTROL: key_down(cmd_ctrl)
  • 按下剪切与粘贴按钮: send_keys("xvvvvv")

鼠标事件

鼠标事件-双击

  • double_click(元素对象): 双击元素

鼠标事件-拖动元素

  • drag_and_drop(起始元素对象, 结束元素对象): 拖动并放开元素

鼠标事件-悬浮

  • move_to_element(元素对象): 移动到某个元素

滚轮/滚动操作

  • 滚动到元素:scroll_to_element(WebElement对象):滚动到某个元素
  • 根据坐标滚动:scroll_by_amount(横坐标, 纵坐标)
  • 注意: selenium 版本需要在 4.2 之后

网页frame与多窗口处理

多窗口处理流程

  1. 先获取到当前的窗口句柄(driver.current_window_handle)
  2. 再获取到所有的窗口句柄(driver.window_handles)
  3. 判断是否是想要操作的窗口,如果是,就可以对窗口进⾏操作,如果不是,跳转到另外⼀个窗口,对另⼀个窗口进⾏操作(driver.switch_to_window)

文件上传

自动化关键数据记录

code to be linked

回到笔记汇总