自動待機
概要
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
をtrue
で渡すと、ターゲット要素が実際にクリックイベントを受け取るかどうかのチェックは行われません。
アサーション
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()
の呼び出しがいつ行われたかに関わらず、「サインアップ」ボタンをクリックするシナリオを考えてみましょう。
- ページがユーザー名の一意性をチェックしており、「サインアップ」ボタンが無効になっている状態;
- サーバーでのチェック後、無効だった「サインアップ」ボタンが、有効になった別のボタンに置き換えられる。