メインコンテンツへスキップ

自動待機

概要

Playwrightは、要素に対してアクションを実行する前に、それらのアクションが期待通りに動作することを保証するために、さまざまな実行可能性チェックを行います。関連するすべてのチェックが合格するまで自動的に待機し、その後要求されたアクションを実行します。指定されたtimeout内に必要なチェックが合格しない場合、アクションはTimeoutErrorで失敗します。

例えば、Locator.click()の場合、Playwrightは以下を保証します。

  • ロケーターが正確に1つの要素に解決されること
  • 要素が可視であること
  • 要素が安定していること(アニメーション中ではない、またはアニメーションが完了している)
  • 要素がイベントを受け取れること(他の要素に隠されていない)
  • 要素が有効であること

各アクションに対して実行される実行可能性チェックの完全なリストを以下に示します。

アクション可視安定イベントを受信有効編集可能
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オプションをサポートしています。例えば、Locator.click()メソッドにforcetrueで渡すと、ターゲット要素が実際にクリックイベントを受け取るかどうかのチェックは行われません。

アサーション

Playwrightには、アクション前の自動待機と同様に、条件が満たされるまで待機することで不安定さを排除する自動リトライアサーションが含まれています。

アサーション説明
assertThat(locator).isAttached()要素がアタッチされている
assertThat(locator).isChecked()チェックボックスがチェックされている
assertThat(locator).isDisabled()要素が無効になっている
assertThat(locator).isEditable()要素が編集可能である
assertThat(locator).isEmpty()コンテナが空である
assertThat(locator).isEnabled()要素が有効になっている
assertThat(locator).isFocused()要素がフォーカスされている
assertThat(locator).isHidden()要素が非表示である
assertThat(locator).isInViewport()要素がビューポートと交差している
assertThat(locator).isVisible()要素が可視である
assertThat(locator).containsText()要素がテキストを含んでいる
assertThat(locator).hasAttribute()要素がDOM属性を持っている
assertThat(locator).hasClass()要素がクラスプロパティを持っている
assertThat(locator).hasCount()リストが正確な数の子要素を持っている
assertThat(locator).hasCSS()要素がCSSプロパティを持っている
assertThat(locator).hasId()要素がIDを持っている
assertThat(locator).hasJSProperty()要素がJavaScriptプロパティを持っている
assertThat(locator).hasText()要素がテキストに一致する
assertThat(locator).hasValue()入力が値を持っている
assertThat(locator).hasValues()選択ボックスがオプションを選択している
assertThat(page).hasTitle()ページがタイトルを持っている
assertThat(page).hasURL()ページがURLを持っている
assertThat(response).isOK()レスポンスがOKステータスである

詳細については、アサーションガイドをご覧ください。

可視

要素は、空でないバウンディングボックスを持ち、visibility:hiddenの計算スタイルを持たない場合に可視と見なされます。

この定義によると、次の点に注意してください。

  • サイズがゼロの要素は可視とは見なされません。
  • display:noneの要素は可視とは見なされません。
  • opacity:0の要素は可視と見なされます。

安定

要素は、少なくとも2つの連続するアニメーションフレームの間、同じバウンディングボックスを維持している場合に安定と見なされます。

有効

要素は、無効になっていない場合に有効と見なされます。

要素は以下の場合に無効になります。

  • [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)でのクリックを捕捉するかどうかを確認します。

例えば、PlaywrightがLocator.click()の呼び出しがいつ行われたかに関わらず、「サインアップ」ボタンをクリックするシナリオを考えてみましょう。

  • ページがユーザー名の一意性をチェックしており、「サインアップ」ボタンが無効になっている状態;
  • サーバーでのチェック後、無効だった「サインアップ」ボタンが、有効になった別のボタンに置き換えられる。