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实现一个简单的银行转账操作
Mar 06 Python
Python中input与raw_input 之间的比较
Aug 20 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python占位符输入方式实例
May 27 Python
flask应用部署到服务器的方法
Jul 12 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 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
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
php实现httpclient类示例
2014/04/08 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
JS 统计时间
2021/03/09 Javascript
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
javascript时间函数大全
2014/06/30 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
python线程池如何使用
2020/05/28 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
全球性的在线商店:Vogca
2019/05/10 全球购物
干部培训自我鉴定
2014/01/22 职场文书
学校卫生检查制度
2014/02/03 职场文书
大班亲子运动会方案
2014/06/10 职场文书
ktv好的活动方案
2014/08/15 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
初中优秀学生评语
2014/12/29 职场文书
格林童话读书笔记
2015/06/30 职场文书
优质服务标语口号
2015/12/26 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript