自動待機
はじめに
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には、アクション前の自動待機と同様に、条件が満たされるまで待機することで不安定さを排除する自動再試行アサーションが含まれています。
アサーションガイドで詳細をご覧ください。
可視
要素は、空ではないバウンディングボックスを持ち、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が「サインアップ」ボタンをクリックするシナリオを考えてみましょう。
- ページがユーザー名の一意性をチェックしており、「サインアップ」ボタンが無効になっている状態;
- サーバーとのチェック後、無効になっていた「サインアップ」ボタンが、現在有効な別のボタンに置き換えられる。