python playwright 自动等待和断言详解


Posted in Python onNovember 27, 2021

自动等待及元素执行方法

操作元素的一系列方法,只要调用了测试夹函数page,就能引出操作元素的方法:

import pytest
from playwright.sync_api import Page
def test_example(page: Page):
    page.goto("https://www.baidu.com")
    page.hover('//*[@id="u1"]/*[text()="设置"]')
    page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')
    page.set_checked('//*[text()="全部语言"]', False)
    assert page.title() == "百度一下,你就知道"
    page.close()
if __name__ == '__main__':
    pytest.main(["-v", "test_example.py"])

playwright对元素执行前,会进行一系列可操作性检查,以确保这些行动按预期运行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果所需的检查未在给定的范围内通过则抛出timeout,操作将失败并显示TimeoutError。

  • 执行方法如下:

鼠标双击

page.dblclick()

获取元素焦点

# 获取元素并聚焦它。 如果没有匹配的元素,则方法等待匹配元素出现在 DOM 中。
    page.focus('#su')

鼠标悬停

# 就是鼠标放在按钮上,此方法针对那种浮框操作
    page.hover('//*[@id="u1"]/*[text()="设置"]')

鼠标点击

page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')

设置复选框取消或选中

page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')

取消已选中复选框取

# 确保元素是复选框或单选框。如果该元素已取消选中,则此方法立即返回
    page.uncheck('//*[text()="仅简体中文"]')

输入参数

# 此方法是聚焦元素,input输入值后触发事件。您也可以传递一个空字符串来清除输入字段。
    page.fill("#kw", "秦时明月")

获取元素属性值

# 返回元素属性值
    page.get_attribute('#kw', 'name')

获取内部文本

page.inner_text('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]//*[@class="title-content-title"]')

获取内部HTML

page.inner_html('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]')

获取文本内容

page.text_content('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]')

截图

# baidu.png存放至当前文件夹下的cases文件夹种
    page.screenshot(path='./cases/baidu.png')

填写文本并触发键盘事件

# 为文本中的每个字符发送一个keydown、keypress/input和keyup事件。
    page.type("#kw", "hello")

输入键盘操作

# 获取按钮元素,输入键盘操作
    page.press('#su', 'Enter')

设置select下拉选项

# 与值匹配的单个选择
    page.select_option(\"select#colors\", \"blue\")
    # 与标签匹配的单个选择
    page.select_option(\"select#colors\", label=\"blue\")
    # 多项选择
    page.select_option(\"select#colors\", value=[\"red\", \"green\", \"blue\"])

调度事件

# type可传:"click", "dragstart"
    page.dispatch_event('#su', 'click')

检查点(断言)

文字内容断言

# 获取文本内容,进行断言
    content = page.text_content('[target="_blank"]:first-child')
    assert content == "新闻"

内部文字断言

# 获取内部文字,进行断言
    text = page.inner_text('[target="_blank"]:first-child')
    assert text == "新闻"

属性断言

# 获取属性值,进行断言
    attribute = page.get_attribute('#su', 'value')
    assert attribute == "百度一下"

复选框断言

page.hover('//*[@id="u1"]/*[text()="设置"]')
    page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')
    # 复选框状态,进行断言
    checked = page.is_checked('//*[text()="全部语言"]')
    assert checked

js表达式断言

# JS表达式,进行断言
    js_content = page.locator('[data-index="4"]>a>[class="title-content-title"]').text_content()
    assert js_content == "长津湖超战狼2成中国影史票房冠军"

内部HTML断言

# 内部 HTML ,进行断言
    html = page.inner_html('[class="hot-title"]')
    assert "百度热搜" in html

元素可见断言

# 元素可见性 ,进行断言
    visible = page.is_visible('#su')
    assert visible

启动状态断言

# 启用状态(元素存在可点击) ,进行断言
    enabled = page.is_enabled('#su')
    assert enabled

直接对比断言

assert page.title() == "百度一下,你就知道"

playwright还提供了自定义断言,这一块我还没有实操过,有兴趣可的可继续研究下:

# 断言本地存储值
user_id = page.evaluate("() => window.localStorage.getItem('user_id')")
assert user_id
# 断言输入元素的值
value = page.locator('#search').input_value()
assert value == 'query'
# 断言计算样式
font_size = page.locator('div').evaluate('el => window.getComputedStyle(el).fontSize')
assert font_size == '16px'
# 断言列表长度
length = page.locator('li.selected').count()
assert length == 3

总结

playwright增加了自动等待,这样就能把用例批量运行的稳定性提升上去了,对断言的操作相比selenium来说也比较容易上手一些。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!

Python 相关文章推荐
pymongo给mongodb创建索引的简单实现方法
May 06 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 Python
python中正则表达式的使用方法
Feb 25 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
Apr 22 Python
python dataframe 输出结果整行显示的方法
Jun 14 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
python中property和setter装饰器用法
Dec 19 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 Python
Python实现制作销售数据可视化看板详解
Python 如何利用ffmpeg 处理视频素材
实操Python爬取觅知网素材图片示例
Python函数中apply、map、applymap的区别
Nov 27 #Python
python字符串拼接.join()和拆分.split()详解
Nov 23 #Python
Python装饰器的练习题
Nov 23 #Python
python人工智能human learn绘图可创建机器学习模型
You might like
PHP网站提速三大“软”招
2006/10/09 PHP
php缓存技术详细总结
2013/08/07 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
laravel model 两表联查示例
2019/10/24 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
详解如何运行vue项目
2019/04/15 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
Django框架模板的使用方法示例
2019/05/25 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
戒赌保证书
2015/05/11 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
python文件与路径操作神器 pathlib
2022/04/01 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python