操作元素的一系列方法,只要调用了测试夹函数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"]' ) |
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' ) |
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 |
1 2 3 | # JS表达式,进行断言 js_content = page.locator( '[data-index="4"]>a>[class="title-content-title"]' ).text_content() assert js_content = = "长津湖超战狼2成中国影史票房冠军" |
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
联系客服