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中用于处理字符串的center()方法
May 18 Python
Python读写unicode文件的方法
Jul 10 Python
举例详解Python中yield生成器的用法
Aug 05 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
python ChainMap的使用和说明详解
Jun 11 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
python Kmeans算法原理深入解析
Aug 23 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 Python
Python之qq自动发消息的示例代码
Feb 18 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编程最快明白》第三讲:php数组
2010/11/01 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
jquery.validate使用攻略 第一部
2010/07/01 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python实现数据库编程方法详解
2015/06/09 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
Python中属性和描述符的正确使用
2016/08/23 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
汽车专业人才自我鉴定范文
2013/12/29 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android