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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
python学习教程之Numpy和Pandas的使用
Sep 11 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
Python创建数字列表的示例
Nov 28 Python
keras slice layer 层实现方式
Jun 11 Python
python/golang实现循环链表的示例代码
Sep 14 Python
Python pymysql模块安装并操作过程解析
Oct 13 Python
Django跨域请求原理及实现代码
Nov 14 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 adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
php二分法在IP地址查询中的应用
2008/08/12 PHP
PHP学习之数组值的操作
2011/04/17 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
详解python中asyncio模块
2018/03/03 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Python解析微信dat文件的方法
2020/11/30 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
如何将整数int转换成字串String
2014/03/21 面试题
毕业生在校学习的自我评价分享
2013/10/08 职场文书
计算机专业推荐信范文
2013/11/27 职场文书
女方婚礼新郎答谢词
2014/01/11 职场文书
超市5.1促销活动
2014/01/15 职场文书
擅自离岗检讨书
2014/02/11 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
法制宣传月活动总结
2014/04/29 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python