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解析XML的几种常见方法的介绍
Apr 09 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
插入排序_Python与PHP的实现版(推荐)
May 11 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
微信跳一跳游戏python脚本
Apr 01 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
python实现简单聊天室功能 可以私聊
Jul 12 Python
python圣诞树编写实例详解
Feb 13 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
Django视图类型总结
Feb 17 Python
Python用SSH连接到网络设备
Feb 18 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 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 保留小数点
2009/04/21 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
Python随机生成彩票号码的方法
2015/03/05 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
出纳员的岗位职责
2014/02/22 职场文书
读群众路线心得体会
2014/03/07 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
2015年公司新年寄语
2014/12/08 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书