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实现逆波兰计算表达式实例详解
May 06 Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
python matlibplot绘制多条曲线图
Feb 19 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
Python3爬虫学习入门教程
Dec 11 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
python分数表示方式和写法
Jun 26 Python
python单例设计模式实现解析
Jan 07 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
Python中格式化字符串的四种实现
May 26 Python
Python新手如何理解循环加载模块
May 29 Python
python如何实现DES加密
Sep 21 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
php简单日历函数
2015/10/28 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
pytorch获取模型某一层参数名及参数值方式
2019/12/30 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
python如何调用百度识图api
2020/09/29 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
咖啡蛋糕店创业计划书
2014/01/28 职场文书
财务部会计岗位职责
2015/02/03 职场文书
狂人日记读书笔记
2015/06/30 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android