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

オートウェイト

導入

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` オプションをサポートしており、重要でない操作性チェックを無効にできます。たとえば、真偽値 `force` を Locator.click() メソッドに渡すと、ターゲット要素が実際にクリックイベントを受け取るかどうかはチェックされません。

アサーション

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()要素が class プロパティを持つ
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() 呼び出しが行われたタイミングに関係なく、Sign Up ボタンをクリックするシナリオを考えてみましょう。

  • ページは、ユーザー名が一意であるかどうかをチェックしており、Sign Up ボタンは無効になっています。
  • サーバーとのチェック後、無効になっていた Sign Up ボタンは、有効になった別のボタンに置き換えられます。