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

自動待機

はじめに

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

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

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

各アクションに対して実行される操作可能性チェックの完全なリストは以下の通りです。

アクション可視安定イベントを受信有効編集可能
Locator.CheckAsync()はいはいはいはい-
Locator.ClickAsync()はいはいはいはい-
Locator.DblClickAsync()はいはいはいはい-
Locator.SetCheckedAsync()はいはいはいはい-
Locator.TapAsync()はいはいはいはい-
Locator.UncheckAsync()はいはいはいはい-
Locator.HoverAsync()はいはいはい--
Locator.DragToAsync()はいはいはい--
Locator.ScreenshotAsync()はいはい---
Locator.FillAsync()はい--はいはい
Locator.ClearAsync()はい--はいはい
Locator.SelectOptionAsync()はい--はい-
Locator.SelectTextAsync()はい----
Locator.ScrollIntoViewIfNeededAsync()-はい---
Locator.BlurAsync()-----
Locator.DispatchEventAsync()-----
Locator.FocusAsync()-----
Locator.PressAsync()-----
Locator.PressSequentiallyAsync()-----
Locator.SetInputFilesAsync()-----

アクションの強制実行

Locator.ClickAsync()のような一部のアクションは、本質的ではない操作可能性チェックを無効にするforceオプションをサポートしています。例えば、Locator.ClickAsync()メソッドに真値のforceを渡すと、ターゲット要素が実際にクリックイベントを受信するかどうかはチェックされません。

アサーション

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

アサーション説明
Expect(Locator).ToBeAttachedAsync()要素がアタッチされている
Expect(Locator).ToBeCheckedAsync()チェックボックスがチェックされている
Expect(Locator).ToBeDisabledAsync()要素が無効である
Expect(Locator).ToBeEditableAsync()要素が編集可能である
Expect(Locator).ToBeEmptyAsync()コンテナが空である
Expect(Locator).ToBeEnabledAsync()要素が有効である
Expect(Locator).ToBeFocusedAsync()要素がフォーカスされている
Expect(Locator).ToBeHiddenAsync()要素が不可視である
Expect(Locator).ToBeInViewportAsync()要素がビューポートと交差している
Expect(Locator).ToBeVisibleAsync()要素が可視である
Expect(Locator).ToContainTextAsync()要素がテキストを含む
Expect(Locator).ToHaveAttributeAsync()要素がDOM属性を持つ
Expect(Locator).ToHaveClassAsync()要素がクラスプロパティを持つ
Expect(Locator).ToHaveCountAsync()リストが正確な数の子要素を持つ
Expect(Locator).ToHaveCSSAsync()要素がCSSプロパティを持つ
Expect(Locator).ToHaveIdAsync()要素がIDを持つ
Expect(Locator).ToHaveJSPropertyAsync()要素がJavaScriptプロパティを持つ
Expect(Locator).ToHaveTextAsync()要素がテキストと一致する
Expect(Locator).ToHaveValueAsync()入力が値を持つ
Expect(Locator).ToHaveValuesAsync()セレクトにオプションが選択されている
Expect(Page).ToHaveTitleAsync()ページがタイトルを持つ
Expect(Page).ToHaveURLAsync()ページがURLを持つ
Expect(Response).ToBeOKAsync()レスポンスが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)でのクリックをキャプチャするかどうかをチェックします。

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

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