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使用any判断一个对象是否为空的方法
Nov 19 Python
python实现下载指定网址所有图片的方法
Aug 08 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
python进行TCP端口扫描的实现
Dec 21 Python
python读取ini配置文件过程示范
Dec 23 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
opencv 图像轮廓的实现示例
Jul 08 Python
详解Python中openpyxl模块基本用法
Feb 23 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代码包装修正版
2008/03/15 PHP
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
详解vue axios中文文档
2017/09/12 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Python正则表达式和元字符详解
2018/11/29 Python
Python创建或生成列表的操作方法
2019/06/19 Python
Python制作词云图代码实例
2019/09/09 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
课改先进个人汇报材料
2014/01/26 职场文书
小学教师办公室制度
2014/02/03 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书