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实现处理逆波兰表达式示例
Jul 30 Python
python实现C4.5决策树算法
Aug 29 Python
python实现贪吃蛇游戏
Mar 21 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
Python内存管理实例分析
Jul 10 Python
面向对象学习之pygame坦克大战
Sep 11 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
python opencv实现图像配准与比较
Feb 09 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 at(@)符号的用法简介
2009/07/11 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
php集成动态口令认证
2016/07/21 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
python+django快速实现文件上传
2016/10/24 Python
Python pass详细介绍及实例代码
2016/11/24 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
django-allauth入门学习和使用详解
2019/07/03 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
Python实现时间序列可视化的方法
2019/08/06 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
如何掌握自荐信格式呢
2013/11/19 职场文书
葡萄牙语专业个人求职信
2013/12/10 职场文书
大学生个人事迹材料
2014/01/21 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
小学数学教师研修日志
2015/11/13 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL