《最新出爐》系列初窺篇-Python+Playwright自動化測試-4-playwright等待淺析

2023-06-25 15:00:21

1.簡介

在介紹selenium的時候,宏哥也介紹過等待,是因為在某些元素出現後,才可以進行操作。有時候我們自己忘記新增等待時間後,查了半天程式碼確定就是沒有問題,奇怪的就是獲取不到元素。然後搞了好久,或者經過別人的提示才恍然大悟沒有新增等待時間。而playwright為了避免我們犯這麼low的錯誤,它對元素執行操作前,會進行一系列可操作性檢查,以確保這些行動按預期執行。它會自動等待所有相關檢查通過,然後才執行請求的操作。如果所需的檢查未在給定的範圍內通過則丟擲timeout,操作將失敗並顯示TimeoutError。正是由於playwright新增了預設等待時間才會增加指令碼穩定性。

2.自動等待

什麼是playwright的自動等待?在官網我們可以看到這樣一段話:

Auto-wait. Playwright waits for elements to be actionable prior to performing actions. It also has a rich set of introspection events. The combination of the two eliminates the need for artificial timeouts - the primary cause of flaky tests.

翻譯過來的大概意思就是說:自動等待:playwright對元素執行操作前,會進行一系列可操作性檢查,以確保這些行動按預期執行。它會自動等待所有相關檢查通過,然後才執行請求的操作。如果所需的檢查未在給定的範圍內通過則丟擲timeout,操作將失敗並顯示TimeoutError。

如元素點選操作,在操作元素之前需要預判:

以下是針對每個操作執行的可操作性檢查的完整列表:

ActionAttachedVisibleStableReceives EventsEnabledEditable
check Yes Yes Yes Yes Yes -
click Yes Yes Yes Yes Yes -
dblclick Yes Yes Yes Yes Yes -
setChecked Yes Yes Yes Yes Yes -
tap Yes Yes Yes Yes Yes -
uncheck Yes Yes Yes Yes Yes -
hover Yes Yes Yes Yes - -
scrollIntoViewIfNeeded Yes - Yes - - -
screenshot Yes Yes Yes - - -
fill Yes Yes - - Yes Yes
selectText Yes Yes - - - -
dispatchEvent Yes - - - - -
focus Yes - - - - -
getAttribute Yes - - - - -
innerText Yes - - - - -
innerHTML Yes - - - - -
press Yes - - - - -
setInputFiles Yes - - - - -
selectOption Yes Yes - - Yes -
textContent Yes - - - - -
type Yes - - - - -

3.slow_mo

通過前邊的學習和實踐,想必大家和宏哥有同樣的感覺吧:Playwright 開啟瀏覽器執行指令碼的速度那就是一個字:快!相對於selenium,playwright執行速度會更快,眨眼間就完事了。因此為了便於我們檢視執行的過程,我們可以加上等待來減緩執行,但是與selenium不同,playwright通過slow_mo (單位是毫秒)減慢執行速度,它的作用範圍是全域性的,從啟動瀏覽器到操作元素每個動作都會有等待間隔,方便在出現問題的時候看到頁面操作情況。使用方法如下:

chromium.launch(headless=False, slow_mo=50)

3.1牛刀小試

宏哥就按照上邊的方法實踐一下,看一下是否真的可以減緩執行速度。

3.1.1參考程式碼
# coding=utf-8