跳到主要內容

自動等待

簡介

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>
  • 它是 <button><select><input><textarea><option><optgroup>,並且是具有 [disabled] 屬性的 <fieldset> 的一部分;
  • 它是具有 [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 按鈕被另一個現在已啟用的按鈕取代。