自動待機
はじめに
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オプションをサポートしています。例えば、Locator.click()メソッドに真の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.click()が呼び出されたタイミングに関わらず、PlaywrightがSign Upボタンをクリックするシナリオを考えてみましょう。
- ページはユーザー名が一意であるかを確認しており、「サインアップ」ボタンは無効になっています。
- サーバーでの確認後、無効だった「サインアップ」ボタンは、現在有効になっている別のボタンに置き換えられます。