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 相关文章推荐
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
python使用socket远程连接错误处理方法
Apr 29 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
python连接数据库的方法
Oct 19 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
python中的global关键字的使用方法
Aug 20 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 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
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
详解python做UI界面的方法
2019/02/27 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python爬虫用mongodb的理由
2020/07/28 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
美国创意之家:BulbHead
2017/07/12 全球购物
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
最新销售员个人自荐信
2013/09/21 职场文书
拾金不昧表扬信范文
2014/01/11 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
心理咨询承诺书
2014/05/20 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
公司奖励通知
2015/04/21 职场文书
小学推普周活动总结
2015/05/07 职场文书
小学生手册家长意见
2015/06/03 职场文书
盲山观后感
2015/06/11 职场文书
出生证明范本
2015/06/15 职场文书
三八节祝酒词
2015/08/11 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
Python 中 Shutil 模块详情
2021/11/11 Python