自動待機
概要
Playwright は、アクションが期待どおりに動作することを保証するために、アクションを実行する前に要素に対してさまざまな操作可能性チェックを実行します。関連するすべてのチェックが合格するまで自動的に待機し、その後でのみ要求されたアクションを実行します。必要なチェックが指定された timeout
内に合格しない場合、アクションは TimeoutError
で失敗します。
たとえば、locator.click() の場合、Playwright は以下を保証します。
- ロケーターが正確に 1 つの要素に解決されること
- 要素が 可視 であること
- 要素が 安定 していること(アニメーション中またはアニメーション完了ではない)
- 要素が イベントを受信する こと(他の要素によって隠されていない)
- 要素が 有効 であること
以下は、各アクションに対して実行される操作可能性チェックの完全なリストです。
アクション | 可視 | 安定 | イベントを受信する | 有効 | 編集可能 |
---|---|---|---|---|---|
locator.check() | はい | はい | はい | はい | - |
locator.click() | はい | はい | はい | はい | - |
locator.dblclick() | はい | はい | はい | はい | - |
locator.set_checked() | はい | はい | はい | はい | - |
locator.tap() | はい | はい | はい | はい | - |
locator.uncheck() | はい | はい | はい | はい | - |
locator.hover() | はい | はい | はい | - | - |
locator.drag_to() | はい | はい | はい | - | - |
locator.screenshot() | はい | はい | - | - | - |
locator.fill() | はい | - | - | はい | はい |
locator.clear() | はい | - | - | はい | はい |
locator.select_option() | はい | - | - | はい | - |
locator.select_text() | はい | - | - | - | - |
locator.scroll_into_view_if_needed() | - | はい | - | - | - |
locator.blur() | - | - | - | - | - |
locator.dispatch_event() | - | - | - | - | - |
locator.focus() | - | - | - | - | - |
locator.press() | - | - | - | - | - |
locator.press_sequentially() | - | - | - | - | - |
locator.set_input_files() | - | - | - | - | - |
強制アクション
locator.click() のような一部のアクションは、重要でない操作可能性チェックを無効にする force
オプションをサポートしています。たとえば、真偽値の force
を locator.click() メソッドに渡すと、ターゲット要素が実際にクリックイベントを受信するかどうかをチェックしません。
アサーション
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.click() 呼び出しが行われたタイミングに関係なく Sign Up
ボタンをクリックするシナリオを考えてみましょう。
- ページは、ユーザー名が一意であり、
Sign Up
ボタンが無効になっていることをチェックしています。 - サーバーとのチェック後、無効になっていた
Sign Up
ボタンが、有効になった別のボタンに置き換えられます。