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中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 Python
Flask数据库迁移简单介绍
Oct 24 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
Python测试线程应用程序过程解析
Dec 31 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
简单的命令查看安装的python版本号
Aug 28 Python
如何在Win10系统使用Python3连接Hive
Oct 15 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
详解Flask开发技巧之异常处理
Jun 15 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
php eval函数用法总结
2012/10/31 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
python程序快速缩进多行代码方法总结
2019/06/23 Python
Python shutil模块用法实例分析
2019/10/02 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
python3 logging日志封装实例
2020/04/08 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
银行求职信个人范文
2013/12/16 职场文书
学习党章思想汇报
2014/01/07 职场文书
毕业自我鉴定书
2014/03/24 职场文书
个人授权委托书模板
2014/09/14 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
编写python程序的90条建议
2021/04/14 Python