オートウェイト
導入
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 には、アクション前の自動ウェイトと同様に、条件が満たされるまで待機することで、不安定さを取り除く自動再試行アサーションが含まれています。
アサーションガイド で詳細をご覧ください。
表示
要素は、空でないバウンディングボックスを持ち、`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
ボタンは、有効になった別のボタンに置き換えられます。