自動ウェイト
はじめに
Playwright は、アクションを実行する前に、要素の操作可能性チェックを広範囲に実行します。これらのアクションが期待どおりに動作するようにするためです。関連するすべてのチェックが成功するまで自動的に待機し、その後、要求されたアクションを実行します。必要なチェックが指定された timeout
内に成功しない場合、アクションは TimeoutError
で失敗します。
例えば、Locator.ClickAsync() の場合、Playwright は以下を確認します。
- ロケーターが正確に 1 つの要素に解決されること
- 要素が Visible (表示) であること
- 要素が Stable (安定) であること (アニメーション中またはアニメーション完了ではない)
- 要素が Receives Events (イベントを受け取る) こと (他の要素によって隠されていない)
- 要素が Enabled (有効) であること
以下は、各アクションに対して実行される操作可能性チェックの完全なリストです。
アクション | 表示 | 安定 | イベントを受け取る | 有効 | 編集可能 |
---|---|---|---|---|---|
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
オプションをサポートしています。これは、重要でない操作可能性チェックを無効にするものです。例えば、truthy な force
を Locator.ClickAsync() メソッドに渡すと、ターゲット要素が実際にクリックイベントを受け取るかどうかをチェックしません。
アサーション
Playwright には、自動再試行アサーションが含まれています。これは、条件が満たされるまで待機することで、不安定さを解消します。アクション前の自動ウェイトと同様です。
詳細については、アサーションガイド を参照してください。
表示
要素は、空でないバウンディングボックスを持ち、visibility:hidden
の計算済みスタイルを持たない場合に表示されているとみなされます。
この定義によれば、以下の点に注意してください。
- サイズがゼロの要素は、表示されているとはみなされません。
display:none
の要素は、表示されているとはみなされません。opacity:0
の要素は、表示されているとみなされます。
安定
要素は、少なくとも 2 つの連続するアニメーションフレームで同じバウンディングボックスを維持した場合に安定しているとみなされます。
有効
要素は、無効になっていない場合に有効になっているとみなされます。
要素が無効になるのは、以下の場合です。
<button>
,<select>
,<input>
,<textarea>
,<option>
, または<optgroup>
であり、[disabled]
属性を持つ場合。<button>
,<select>
,<input>
,<textarea>
,<option>
, または<optgroup>
であり、[disabled]
属性を持つ<fieldset>
の一部である場合。[aria-disabled=true]
属性を持つ要素の子孫である場合。
編集可能
要素は、有効 であり、readonly ではない場合に編集可能であるとみなされます。
要素がreadonly になるのは、以下の場合です。
<select>
,<input>
, または<textarea>
であり、[readonly]
属性を持つ場合。[aria-readonly=true]
属性を持ち、それをサポートする aria ロールを持つ場合。
イベントを受け取る
要素は、アクションポイントでポインターイベントのヒットターゲットである場合に、ポインターイベントを受け取るとみなされます。例えば、(10;10)
のポイントをクリックすると、Playwright は、別の要素 (通常はオーバーレイ) が代わりに (10;10)
でのクリックをキャプチャするかどうかを確認します。
例えば、Playwright が Locator.ClickAsync() の呼び出しがいつ行われたかに関係なく Sign Up
ボタンをクリックするシナリオを考えてみましょう。
- ページは、ユーザー名が一意であること、および
Sign Up
ボタンが無効になっていることを確認しています。 - サーバーとのチェック後、無効になっていた
Sign Up
ボタンは、現在有効になっている別のボタンに置き換えられます。