自動等待
簡介
Playwright 在對元素執行動作之前會進行一系列可操作性檢查,以確保這些動作能如預期執行。它會自動等待所有相關檢查通過,然後才執行請求的動作。如果必要的檢查在指定的 timeout
時間內未通過,動作將失敗並拋出 TimeoutError
。
例如,對於 Locator.ClickAsync()
,Playwright 會確保:
以下是每個動作執行的可操作性檢查完整清單:
強制動作
某些動作如 Locator.ClickAsync()
支援 force
選項,可停用非必要的可操作性檢查。例如,向 Locator.ClickAsync()
方法傳遞真值的 force
將不會檢查目標元素是否實際接收點擊事件。
斷言
Playwright 包含自動重試斷言,透過等待直到條件符合來消除不穩定性,類似於動作前的自動等待。
了解更多在 assertions 指南。
可見
當元素具有非空邊界框且沒有 visibility:hidden
計算樣式時,則被視為可見。
請注意,根據此定義:
- 零尺寸的元素不被視為可見。
- 具有
display:none
的元素不被視為可見。 - 具有
opacity:0
的元素被視為可見。
穩定
當元素在至少連續兩個動畫影格中保持相同的邊界框時,則被視為穩定。
啟用
當元素不是停用時,則被視為啟用。
在以下情況下元素停用:
- 它是具有
[disabled]
屬性的<button>
、<select>
、<input>
、<textarea>
、<option>
或<optgroup>
; - 它是屬於具有
[disabled]
屬性的<fieldset>
中的<button>
、<select>
、<input>
、<textarea>
、<option>
或<optgroup>
; - 它是具有
[aria-disabled=true]
屬性的元素的後代。
可編輯
當元素是啟用的且不是唯讀時,則被視為可編輯。
在以下情況下元素唯讀:
- 它是具有
[readonly]
屬性的<select>
、<input>
或<textarea>
; - 它具有
[aria-readonly=true]
屬性和支援它的 aria 角色。
接收事件
當元素是動作點指標事件的點擊目標時,則被視為接收指標事件。例如,在點 (10;10)
點擊時,Playwright 會檢查是否有其他元素(通常是覆蓋層)會代替捕獲在 (10;10)
的點擊。
例如,考慮一個情境,無論何時呼叫 Locator.ClickAsync()
,Playwright 都會點擊 Sign Up
按鈕:
- 頁面正在檢查使用者名稱是否唯一,且
Sign Up
按鈕被停用; - 與伺服器檢查後,被停用的
Sign Up
按鈕被替換為另一個現在啟用的按鈕。