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 相关文章推荐
python抓取京东价格分析京东商品价格走势
Jan 09 Python
深入解析Python中的线程同步方法
Jun 14 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
python 删除非空文件夹的实例
Apr 26 Python
Pycharm配置远程调试的方法步骤
Dec 17 Python
Python3标准库总结
Feb 19 Python
详解numpy的argmax的具体使用
May 27 Python
python分割一个文本为多个文本的方法
Jul 22 Python
python实现两个字典合并,两个list合并
Dec 02 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
python实现Nao机器人的单目测距
Sep 04 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
PHP面向对象编程快速入门
2006/10/09 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
js数组的操作详解
2013/03/27 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
Python struct模块解析
2014/06/12 Python
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
Python换行与不换行的输出实例
2020/02/19 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
会计专业毕业生自我评价
2013/09/25 职场文书
中专毕业生自我鉴定范文
2013/11/09 职场文书
人事部主管岗位职责
2013/12/26 职场文书
就业协议书的作用
2014/04/11 职场文书
大型活动组织方案
2014/05/10 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
Nginx域名转发使用场景代码实例
2021/03/31 Servers
MySQL root密码的重置方法
2021/04/21 MySQL