自動等待及元素執(zhí)行方法
操作元素的一系列方法,只要調(diào)用了測試夾函數(shù)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()="設(shè)置"]' ) page.click( '//*[@id="s-user-setting-menu"]//*[text()="搜索設(shè)置"]' ) page.set_checked( '//*[text()="全部語言"]' , False ) assert page.title() = = "百度一下,你就知道" page.close() if __name__ = = '__main__' : pytest.main([ "-v" , "test_example.py" ]) |
playwright對元素執(zhí)行前,會進行一系列可操作性檢查,以確保這些行動按預(yù)期運行。它會自動等待所有相關(guān)檢查通過,然后才執(zhí)行請求的操作。如果所需的檢查未在給定的范圍內(nèi)通過則拋出timeout,操作將失敗并顯示TimeoutError。
- 執(zhí)行方法如下:
鼠標雙擊
1
|
page.dblclick() |
獲取元素焦點
1
2
|
# 獲取元素并聚焦它。 如果沒有匹配的元素,則方法等待匹配元素出現(xiàn)在 DOM 中。 page.focus( '#su' ) |
鼠標懸停
1
2
|
# 就是鼠標放在按鈕上,此方法針對那種浮框操作 page.hover( '//*[@id="u1"]/*[text()="設(shè)置"]' ) |
鼠標點擊
1
|
page.click( '//*[@id="s-user-setting-menu"]//*[text()="搜索設(shè)置"]' ) |
設(shè)置復(fù)選框取消或選中
1
|
page.click( '//*[@id="s-user-setting-menu"]//*[text()="搜索設(shè)置"]' ) |
取消已選中復(fù)選框取
1
2
|
# 確保元素是復(fù)選框或單選框。如果該元素已取消選中,則此方法立即返回 page.uncheck( '//*[text()="僅簡體中文"]' ) |
輸入?yún)?shù)
1
2
|
# 此方法是聚焦元素,input輸入值后觸發(fā)事件。您也可以傳遞一個空字符串來清除輸入字段。 page.fill( "#kw" , "秦時明月" ) |
獲取元素屬性值
1
2
|
# 返回元素屬性值 page.get_attribute( '#kw' , 'name' ) |
獲取內(nèi)部文本
1
|
page.inner_text( '//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]//*[@class="title-content-title"]' ) |
獲取內(nèi)部HTML
1
|
page.inner_html( '//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]' ) |
獲取文本內(nèi)容
1
|
page.text_content( '//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]' ) |
截圖
1
2
|
# baidu.png存放至當前文件夾下的cases文件夾種 page.screenshot(path = './cases/baidu.png' ) |
填寫文本并觸發(fā)鍵盤事件
1
2
|
# 為文本中的每個字符發(fā)送一個keydown、keypress/input和keyup事件。 page. type ( "#kw" , "hello" ) |
輸入鍵盤操作
1
2
|
# 獲取按鈕元素,輸入鍵盤操作 page.press( '#su' , 'Enter' ) |
設(shè)置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\" ]) |
調(diào)度事件
1
2
|
# type可傳:"click", "dragstart" page.dispatch_event( '#su' , 'click' ) |
檢查點(斷言)
文字內(nèi)容斷言
1
2
3
|
# 獲取文本內(nèi)容,進行斷言 content = page.text_content( '[target="_blank"]:first-child' ) assert content = = "新聞" |
內(nèi)部文字斷言
1
2
3
|
# 獲取內(nèi)部文字,進行斷言 text = page.inner_text( '[target="_blank"]:first-child' ) assert text = = "新聞" |
屬性斷言
1
2
3
|
# 獲取屬性值,進行斷言 attribute = page.get_attribute( '#su' , 'value' ) assert attribute = = "百度一下" |
復(fù)選框斷言
1
2
3
4
5
|
page.hover( '//*[@id="u1"]/*[text()="設(shè)置"]' ) page.click( '//*[@id="s-user-setting-menu"]//*[text()="搜索設(shè)置"]' ) # 復(fù)選框狀態(tài),進行斷言 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 = = "長津湖超戰(zhàn)狼2成中國影史票房冠軍" |
內(nèi)部HTML斷言
1
2
3
|
# 內(nèi)部 HTML ,進行斷言 html = page.inner_html( '[class="hot-title"]' ) assert "百度熱搜" in html |
元素可見斷言
1
2
3
|
# 元素可見性 ,進行斷言 visible = page.is_visible( '#su' ) assert visible |
啟動狀態(tài)斷言
1
2
3
|
# 啟用狀態(tài)(元素存在可點擊) ,進行斷言 enabled = page.is_enabled( '#su' ) assert enabled |
直接對比斷言
1
|
assert page.title() = = "百度一下,你就知道" |
playwright還提供了自定義斷言,這一塊我還沒有實操過,有興趣可的可繼續(xù)研究下:
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 |
總結(jié)
playwright增加了自動等待,這樣就能把用例批量運行的穩(wěn)定性提升上去了,對斷言的操作相比selenium來說也比較容易上手一些。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!
原文鏈接:https://blog.csdn.net/LIFENG0402/article/details/121550064