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 相关文章推荐
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
python常用函数详解
Sep 13 Python
使用python 3实现发送邮件功能
Jun 15 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
python并发和异步编程实例
Nov 15 Python
详解如何减少python内存的消耗
Aug 09 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
Anaconda的安装与虚拟环境建立
Nov 18 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
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
班级安全教育实施方案
2014/02/23 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
生活委员竞选稿
2015/11/21 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书