用語集 · UI 自動化
自動待機(Auto-waiting)
英語: Auto-waiting
別名: オートウェイト, 自動ウェイト, auto-wait, auto wait
定義
固定のスリープに頼らず、要素が表示・安定・有効化などの操作可能な状態になるまでフレームワークが自動で待ってから操作する機能です。
自動待機(Auto-waiting)とは、自動化フレームワークが操作を実行する前に要素の準備ができているかを確認し、準備が整うかタイムアウトするまで再試行し続ける仕組みです。Playwright と Cypress にはこの機能が組み込まれています。Playwright の click() は、要素が DOM にアタッチされ、表示され、安定し(アニメーション中でない)、イベントを受け取れ(他の要素に覆われていない)、有効になるまで待ちます。テストを書く人は操作だけを記述し、タイミングはフレームワークが処理します。
具体例
import { test, expect } from '@playwright/test';
test('saves the profile', async ({ page }) => {
await page.goto('/profile');
await page.getByLabel('Display name').fill('Ada');
// Waits until the button is visible, stable, enabled and not covered
await page.getByRole('button', { name: 'Save' }).click();
// Retries until the toast appears or the expect timeout is reached
await expect(page.getByRole('status')).toHaveText('Profile saved');
});
waitForTimeout はどこにも出てきません。フォームのバリデーション中に保存ボタンが一瞬無効になっていても、クリックは失敗せずに待機します。
明示的待機・暗黙的待機との違い
Selenium WebDriver は操作の前に自動で待機しません。暗黙的待機(findElement が要素の存在をポーリングする時間にだけ影響します)を設定するか、WebDriverWait と elementToBeClickable のような ExpectedConditions を使って明示的待機を書く必要があります。自動待機は、フレームワークがすべての操作に対して代わりに書いてくれる明示的待機に近いもので、確認項目は操作ごとに選ばれています。たとえば fill() では要素が編集可能であることも求められます。
限界
- 待つのは要素であって、業務上の状態ではありません。 送信するデータが読み込まれる前にボタンがクリック可能になる場合、自動待機では防げません。必要な状態を先にアサートしてください。
- 一度だけ読み取る値には適用されません。
await locator.textContent()はその時点の内容をそのまま返します。テキストを待ちたい場合はtoHaveTextのような Web ファーストアサーションを使います。 - 遅さを覆い隠すことがあります。 毎回タイムアウトぎりぎりまでかかるステップはテストとしては合格しますが、トレースで確認すべきパフォーマンス上のシグナルです。
force: trueはチェックを省略します。 カスタムコントロールでたまに必要になりますが、たいていは本当の問題を隠しているだけです。