跳到主要內容

自動等待

簡介

Playwright 在執行動作之前,會先對元素執行一系列可操作性檢查,以確保這些動作能如預期般運作。它會自動等待所有相關檢查通過後,才會執行請求的動作。如果要求的檢查在指定的 timeout 內未通過,動作將會失敗並拋出 TimeoutError

例如,對於 locator.click(),Playwright 將確保:

以下是針對每個動作執行的完整可操作性檢查清單

動作可見穩定接收事件已啟用可編輯
locator.check()-
locator.click()-
locator.dblclick()-
locator.set_checked()-
locator.tap()-
locator.uncheck()-
locator.hover()--
locator.drag_to()--
locator.screenshot()---
locator.fill()--
locator.clear()--
locator.select_option()---
locator.select_text()----
locator.scroll_into_view_if_needed()----
locator.blur()-----
locator.dispatch_event()-----
locator.focus()-----
locator.press()-----
locator.press_sequentially()-----
locator.set_input_files()-----

強制執行動作

某些動作 (例如 locator.click()) 支援 force 選項,可停用非必要的可操作性檢查。例如,將 truthy force 傳遞給 locator.click() 方法將不會檢查目標元素是否實際接收點擊事件。

斷言

Playwright 包含自動重試斷言,透過等待直到條件符合來消除不穩定性,與動作前的自動等待類似。

斷言描述
expect(locator).to_be_attached()元素已附加
expect(locator).to_be_checked()核取方塊已勾選
expect(locator).to_be_disabled()元素已停用
expect(locator).to_be_editable()元素可編輯
expect(locator).to_be_empty()容器為空
expect(locator).to_be_enabled()元素已啟用
expect(locator).to_be_focused()元素已聚焦
expect(locator).to_be_hidden()元素不可見
expect(locator).to_be_in_viewport()元素與視窗相交
expect(locator).to_be_visible()元素可見
expect(locator).to_contain_text()元素包含文字
expect(locator).to_have_attribute()元素具有 DOM 屬性
expect(locator).to_have_class()元素具有 class 屬性
expect(locator).to_have_count()列表具有確切數量的子元素
expect(locator).to_have_css()元素具有 CSS 屬性
expect(locator).to_have_id()元素具有 ID
expect(locator).to_have_js_property()元素具有 JavaScript 屬性
expect(locator).to_have_text()元素符合文字
expect(locator).to_have_value()輸入框具有值
expect(locator).to_have_values()選取器已選取選項
expect(page).to_have_title()頁面具有標題
expect(page).to_have_url()頁面具有 URL
expect(response).to_be_ok()回應具有 OK 狀態

請參閱斷言指南以了解更多資訊。

可見

當元素具有非空的邊界框且沒有 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.click(),Playwright 都會點擊 [Sign Up] 按鈕

  • 頁面正在檢查使用者名稱是否唯一,且 [Sign Up] 按鈕已停用;
  • 在與伺服器確認後,已停用的 [Sign Up] 按鈕會被另一個現在已啟用的按鈕取代。