python playwright 自動(dòng)等待和斷言詳解
自動(dòng)等待及元素執(zhí)行方法
操作元素的一系列方法,只要調(diào)用了測(cè)試夾函數(shù)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()="設(shè)置"]') page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索設(shè)置"]') page.set_checked('//*[text()="全部語(yǔ)言"]', False) assert page.title() == "百度一下,你就知道" page.close() if __name__ == '__main__': pytest.main(["-v", "test_example.py"])
playwright對(duì)元素執(zhí)行前,會(huì)進(jìn)行一系列可操作性檢查,以確保這些行動(dòng)按預(yù)期運(yùn)行。它會(huì)自動(dòng)等待所有相關(guān)檢查通過,然后才執(zhí)行請(qǐng)求的操作。如果所需的檢查未在給定的范圍內(nèi)通過則拋出timeout,操作將失敗并顯示TimeoutError。
- 執(zhí)行方法如下:
鼠標(biāo)雙擊
page.dblclick()
獲取元素焦點(diǎn)
# 獲取元素并聚焦它。 如果沒有匹配的元素,則方法等待匹配元素出現(xiàn)在 DOM 中。 page.focus('#su')
鼠標(biāo)懸停
# 就是鼠標(biāo)放在按鈕上,此方法針對(duì)那種浮框操作 page.hover('//*[@id="u1"]/*[text()="設(shè)置"]')
鼠標(biāo)點(diǎn)擊
page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索設(shè)置"]')
設(shè)置復(fù)選框取消或選中
page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索設(shè)置"]')
取消已選中復(fù)選框取
# 確保元素是復(fù)選框或單選框。如果該元素已取消選中,則此方法立即返回 page.uncheck('//*[text()="僅簡(jiǎn)體中文"]')
輸入?yún)?shù)
# 此方法是聚焦元素,input輸入值后觸發(fā)事件。您也可以傳遞一個(gè)空字符串來清除輸入字段。 page.fill("#kw", "秦時(shí)明月")
獲取元素屬性值
# 返回元素屬性值 page.get_attribute('#kw', 'name')
獲取內(nèi)部文本
page.inner_text('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]//*[@class="title-content-title"]')
獲取內(nèi)部HTML
page.inner_html('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]')
獲取文本內(nèi)容
page.text_content('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]')
截圖
# baidu.png存放至當(dāng)前文件夾下的cases文件夾種 page.screenshot(path='./cases/baidu.png')
填寫文本并觸發(fā)鍵盤事件
# 為文本中的每個(gè)字符發(fā)送一個(gè)keydown、keypress/input和keyup事件。 page.type("#kw", "hello")
輸入鍵盤操作
# 獲取按鈕元素,輸入鍵盤操作 page.press('#su', 'Enter')
設(shè)置select下拉選項(xiàng)
# 與值匹配的單個(gè)選擇 page.select_option(\"select#colors\", \"blue\") # 與標(biāo)簽匹配的單個(gè)選擇 page.select_option(\"select#colors\", label=\"blue\") # 多項(xiàng)選擇 page.select_option(\"select#colors\", value=[\"red\", \"green\", \"blue\"])
調(diào)度事件
# type可傳:"click", "dragstart" page.dispatch_event('#su', 'click')
檢查點(diǎn)(斷言)
文字內(nèi)容斷言
# 獲取文本內(nèi)容,進(jìn)行斷言 content = page.text_content('[target="_blank"]:first-child') assert content == "新聞"
內(nèi)部文字?jǐn)嘌?/h3>
# 獲取內(nèi)部文字,進(jìn)行斷言
text = page.inner_text('[target="_blank"]:first-child')
assert text == "新聞"
# 獲取內(nèi)部文字,進(jìn)行斷言 text = page.inner_text('[target="_blank"]:first-child') assert text == "新聞"
屬性斷言
# 獲取屬性值,進(jìn)行斷言 attribute = page.get_attribute('#su', 'value') assert attribute == "百度一下"
復(fù)選框斷言
page.hover('//*[@id="u1"]/*[text()="設(shè)置"]') page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索設(shè)置"]') # 復(fù)選框狀態(tài),進(jìn)行斷言 checked = page.is_checked('//*[text()="全部語(yǔ)言"]') assert checked
js表達(dá)式斷言
# JS表達(dá)式,進(jìn)行斷言 js_content = page.locator('[data-index="4"]>a>[class="title-content-title"]').text_content() assert js_content == "長(zhǎng)津湖超戰(zhàn)狼2成中國(guó)影史票房冠軍"
內(nèi)部HTML斷言
# 內(nèi)部 HTML ,進(jìn)行斷言 html = page.inner_html('[class="hot-title"]') assert "百度熱搜" in html
元素可見斷言
# 元素可見性 ,進(jìn)行斷言 visible = page.is_visible('#su') assert visible
啟動(dòng)狀態(tài)斷言
# 啟用狀態(tài)(元素存在可點(diǎn)擊) ,進(jìn)行斷言 enabled = page.is_enabled('#su') assert enabled
直接對(duì)比斷言
assert page.title() == "百度一下,你就知道"
playwright還提供了自定義斷言,這一塊我還沒有實(shí)操過,有興趣可的可繼續(xù)研究下:
# 斷言本地存儲(chǔ)值 user_id = page.evaluate("() => window.localStorage.getItem('user_id')") assert user_id # 斷言輸入元素的值 value = page.locator('#search').input_value() assert value == 'query' # 斷言計(jì)算樣式 font_size = page.locator('div').evaluate('el => window.getComputedStyle(el).fontSize') assert font_size == '16px' # 斷言列表長(zhǎng)度 length = page.locator('li.selected').count() assert length == 3
總結(jié)
playwright增加了自動(dòng)等待,這樣就能把用例批量運(yùn)行的穩(wěn)定性提升上去了,對(duì)斷言的操作相比selenium來說也比較容易上手一些。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
手動(dòng)安裝Anaconda環(huán)境變量的實(shí)現(xiàn)教程
這篇文章主要介紹了手動(dòng)安裝Anaconda環(huán)境變量的實(shí)現(xiàn)教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01致Python初學(xué)者 Anaconda入門使用指南完整版
相信大多數(shù) Python 的初學(xué)者們都曾為環(huán)境問題而頭疼不已,但你并不孤獨(dú),大家都是這么折騰過來的。為了在入門時(shí)少走彎路,并且讓高漲的積極性不至于太受打擊,這里推薦使用 Anaconda 來管理你的安裝環(huán)境和各種工具包2018-04-04使用Python實(shí)現(xiàn)遺傳算法的完整代碼
這篇文章主要介紹了使用Python實(shí)現(xiàn)遺傳算法,其本質(zhì)是一種高效、并行、全局搜索的方法,自適應(yīng)的控制搜索過程以求得最優(yōu)解,需要的朋友可以參考下2023-03-03python 調(diào)試器pdb的簡(jiǎn)單使用
這篇文章主要介紹了python 調(diào)試器pdb的簡(jiǎn)單使用,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03詳解Python圖像形態(tài)學(xué)處理(開運(yùn)算,閉運(yùn)算,梯度運(yùn)算)
數(shù)學(xué)形態(tài)學(xué)(Mathematical Morphology)是一種應(yīng)用于圖像處理和模式識(shí)別領(lǐng)域的新方法。本文將為大家介紹Python圖像形態(tài)學(xué)處理中的開運(yùn)算、閉運(yùn)算和梯度運(yùn)算,感興趣的可以了解一下2022-06-06