高级定位-css
适用场景
定位方式
- 绝对定位
- 相对定位:可维护性更强,更加简洁,解决各种复杂的定位场景
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自动化测试
适用场景
定位方式
- 绝对定位
- 相对定位:可维护性更强,更加简洁,相比css可以支持更多的方式
浏览器调试方法
xpath基础语法(包含关系)
表达式 |
结果 |
console中的写法 |
释义 |
/ |
从该节点的子元素选取 |
$x(“/”) |
整个页面 |
// |
从该节点的子孙元素选取 |
$x(“//”) |
页面中的所有的子元素 |
* |
通配符 |
$x(“/*”) |
整个页面中的所有元素 |
nodename |
选取此节点的所有子节点 |
$x(“//div”) |
查找页面上面所有的div标签节点 |
… |
选取当前节点的父节点 |
$x(‘//*[@id=“site-logo”]/…’) |
查找节点的父节点 |
@ |
选取属性 |
$x(‘//*[@id=“site-logo”]’) |
查找id属性为site-logo的节点 |
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")
鼠标事件
鼠标事件-双击
鼠标事件-拖动元素
-
drag_and_drop(起始元素对象, 结束元素对象)
: 拖动并放开元素
鼠标事件-悬浮
-
move_to_element(元素对象)
: 移动到某个元素
滚轮/滚动操作
- 滚动到元素:
scroll_to_element(WebElement对象)
:滚动到某个元素
- 根据坐标滚动:
scroll_by_amount(横坐标, 纵坐标)
- 注意: selenium 版本需要在 4.2 之后
网页frame与多窗口处理
多窗口处理流程
- 先获取到当前的窗口句柄(driver.current_window_handle)
- 再获取到所有的窗口句柄(driver.window_handles)
- 判断是否是想要操作的窗口,如果是,就可以对窗口进⾏操作,如果不是,跳转到另外⼀个窗口,对另⼀个窗口进⾏操作(driver.switch_to_window)
文件上传
自动化关键数据记录
code to be linked
回到笔记汇总