メインコンテンツにスキップ

自動待機

概要

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 オプションをサポートしています。たとえば、真偽値の forcelocator.click() メソッドに渡すと、ターゲット要素が実際にクリックイベントを受信するかどうかをチェックしません。

アサーション

Playwright には、アクション前の自動待機と同様に、条件が満たされるまで待機することで不安定さを解消する自動再試行アサーションが含まれています。

アサーション説明
expect(locator).to_be_attached()要素がアタッチされている
expect(locator).to_be_checked()チェックボックスがチェックされている
expect(locator).to_be_disabled()要素が無効になっている
expect(locator).to_be_editable()要素が編集可能である
expect(locator).to_be_empty()コンテナが空である
expect(locator).to_be_enabled()要素が有効になっている
expect(locator).to_be_focused()要素にフォーカスがある
expect(locator).to_be_hidden()要素が非表示である
expect(locator).to_be_in_viewport()要素がビューポートと交差する
expect(locator).to_be_visible()要素が可視である
expect(locator).to_contain_text()要素がテキストを含む
expect(locator).to_have_attribute()要素が DOM 属性を持つ
expect(locator).to_have_class()要素が class プロパティを持つ
expect(locator).to_have_count()リストに正確な数の子要素がある
expect(locator).to_have_css()要素が CSS プロパティを持つ
expect(locator).to_have_id()要素が ID を持つ
expect(locator).to_have_js_property()要素が JavaScript プロパティを持つ
expect(locator).to_have_text()要素がテキストと一致する
expect(locator).to_have_value()入力欄が値を持つ
expect(locator).to_have_values()セレクトボックスでオプションが選択されている
expect(page).to_have_title()ページがタイトルを持つ
expect(page).to_have_url()ページが URL を持つ
expect(response).to_be_ok()レスポンスが OK ステータスである

詳細については、アサーションガイドをご覧ください。

可視

要素は、空でないバウンディングボックスを持ち、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 ボタンが、有効になった別のボタンに置き換えられます。