跳到主要內容

自動等待

簡介

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

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

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

動作可見穩定接收事件已啟用可編輯
locator.check()-
locator.click()-
locator.dblclick()-
locator.setChecked()-
locator.tap()-
locator.uncheck()-
locator.hover()--
locator.dragTo()--
locator.screenshot()---
locator.fill()--
locator.clear()--
locator.selectOption()---
locator.selectText()----
locator.scrollIntoViewIfNeeded()----
locator.blur()-----
locator.dispatchEvent()-----
locator.focus()-----
locator.press()-----
locator.pressSequentially()-----
locator.setInputFiles()-----

強制執行動作

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

斷言

Playwright 包含自動重試斷言,它會等待直到條件滿足,從而消除不穩定性,這與動作之前的自動等待類似。

斷言描述
expect(locator).toBeAttached()元素已附加
expect(locator).toBeChecked()核取方塊已勾選
expect(locator).toBeDisabled()元素已停用
expect(locator).toBeEditable()元素可編輯
expect(locator).toBeEmpty()容器為空
expect(locator).toBeEnabled()元素已啟用
expect(locator).toBeFocused()元素已聚焦
expect(locator).toBeHidden()元素不可見
expect(locator).toBeInViewport()元素與視窗相交
expect(locator).toBeVisible()元素可見
expect(locator).toContainText()元素包含文字
expect(locator).toHaveAttribute()元素具有 DOM 屬性
expect(locator).toHaveClass()元素具有 class 屬性
expect(locator).toHaveCount()列表具有確切數量的子元素
expect(locator).toHaveCSS()元素具有 CSS 屬性
expect(locator).toHaveId()元素具有 ID
expect(locator).toHaveJSProperty()元素具有 JavaScript 屬性
expect(locator).toHaveText()元素符合文字
expect(locator).toHaveValue()輸入框具有值
expect(locator).toHaveValues()選取器已選取選項
expect(page).toHaveTitle()頁面具有標題
expect(page).toHaveURL()頁面具有 URL
expect(response).toBeOK()回應具有 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 role。

接收事件

當元素是動作點處指標事件的命中目標時,即視為接收指標事件。例如,當點擊點 (10;10) 時,Playwright 會檢查是否另一個元素(通常是覆蓋層)將會改為捕獲 (10;10) 處的點擊。

例如,考慮這樣一種情況:無論何時調用 locator.click(),Playwright 都將點擊 Sign Up 按鈕:

  • 頁面正在檢查使用者名稱是否唯一,並且 Sign Up 按鈕已停用;
  • 與伺服器檢查後,已停用的 Sign Up 按鈕將被另一個現在已啟用的按鈕替換。