服务器之家

服务器之家 > 正文

python playwright 自动等待和断言详解

时间:2022-03-09 00:05     来源/作者:一名小测试

自动等待及元素执行方法

操作元素的一系列方法,只要调用了测试夹函数page,就能引出操作元素的方法:

?
1
2
3
4
5
6
7
8
9
10
11
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。

  • 执行方法如下:

鼠标双击

?
1
page.dblclick()

获取元素焦点

?
1
2
# 获取元素并聚焦它。 如果没有匹配的元素,则方法等待匹配元素出现在 DOM 中。
page.focus('#su')

鼠标悬停

?
1
2
# 就是鼠标放在按钮上,此方法针对那种浮框操作
page.hover('//*[@id="u1"]/*[text()="设置"]')

鼠标点击

?
1
page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')

设置复选框取消或选中

?
1
page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')

取消已选中复选框取

?
1
2
# 确保元素是复选框或单选框。如果该元素已取消选中,则此方法立即返回
page.uncheck('//*[text()="仅简体中文"]')

输入参数

?
1
2
# 此方法是聚焦元素,input输入值后触发事件。您也可以传递一个空字符串来清除输入字段。
page.fill("#kw", "秦时明月")

获取元素属性值

?
1
2
# 返回元素属性值
page.get_attribute('#kw', 'name')

获取内部文本

?
1
page.inner_text('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]//*[@class="title-content-title"]')

获取内部HTML

?
1
page.inner_html('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]')

获取文本内容

?
1
page.text_content('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]')

截图

?
1
2
# baidu.png存放至当前文件夹下的cases文件夹种
page.screenshot(path='./cases/baidu.png')

填写文本并触发键盘事件

?
1
2
# 为文本中的每个字符发送一个keydown、keypress/input和keyup事件。
page.type("#kw", "hello")

输入键盘操作

?
1
2
# 获取按钮元素,输入键盘操作
page.press('#su', 'Enter')

设置select下拉选项

?
1
2
3
4
5
6
# 与值匹配的单个选择
page.select_option(\"select#colors\", \"blue\")
# 与标签匹配的单个选择
page.select_option(\"select#colors\", label=\"blue\")
# 多项选择
page.select_option(\"select#colors\", value=[\"red\", \"green\", \"blue\"])

调度事件

?
1
2
# type可传:"click", "dragstart"
 page.dispatch_event('#su', 'click')

检查点(断言)

文字内容断言

?
1
2
3
# 获取文本内容,进行断言
content = page.text_content('[target="_blank"]:first-child')
assert content == "新闻"

内部文字断言

?
1
2
3
# 获取内部文字,进行断言
text = page.inner_text('[target="_blank"]:first-child')
assert text == "新闻"

属性断言

?
1
2
3
# 获取属性值,进行断言
attribute = page.get_attribute('#su', 'value')
assert attribute == "百度一下"

复选框断言

?
1
2
3
4
5
page.hover('//*[@id="u1"]/*[text()="设置"]')
page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')
# 复选框状态,进行断言
checked = page.is_checked('//*[text()="全部语言"]')
assert checked

js表达式断言

?
1
2
3
# JS表达式,进行断言
js_content = page.locator('[data-index="4"]>a>[class="title-content-title"]').text_content()
assert js_content == "长津湖超战狼2成中国影史票房冠军"

内部HTML断言

?
1
2
3
# 内部 HTML ,进行断言
html = page.inner_html('[class="hot-title"]')
assert "百度热搜" in html

元素可见断言

?
1
2
3
# 元素可见性 ,进行断言
visible = page.is_visible('#su')
assert visible

启动状态断言

?
1
2
3
# 启用状态(元素存在可点击) ,进行断言
enabled = page.is_enabled('#su')
assert enabled

直接对比断言

?
1
assert page.title() == "百度一下,你就知道"

playwright还提供了自定义断言,这一块我还没有实操过,有兴趣可的可继续研究下:

?
1
2
3
4
5
6
7
8
9
10
11
12
# 断言本地存储值
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来说也比较容易上手一些。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/LIFENG0402/article/details/121550064

相关文章

热门资讯

2022年最旺的微信头像大全 微信头像2022年最新版图片
2022年最旺的微信头像大全 微信头像2022年最新版图片 2022-01-10
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
返回顶部