ChronoATX
ライセンス申請・無料トライアル

© 2026 ChronoATX. All rights reserved.

公開: 2026.08.20 (更新: 2026.08.20)
Q

ChronoATX で非同期リクエスト完了後に画面要素が変わる場合、.atx スクリプトで await Task.Delay(…) による固定待機を行う必要がありますか?

A

いいえ、await Task.Delay(…) による固定時間の待機は基本的に不要であり、推奨されません。

HTML の解析完了(DOMContentLoaded)と、その後の非同期通信(Ajax / Fetch)による DOM の再描画はタイミングが異なります。Task.Delay(5000) のような固定秒数待機は、ネットワーク遅延によるテスト失敗(フレーキー化)やテスト実行時間の無駄を引き起こす原因になります。

ChronoATX の Runtime には、非同期処理をイベント・状態ドリブンで検知する 4 つのスマート待機 API が提供されています。用途に合わせて使い分けることで、高速かつ堅牢な自動テストを実現できます。

## 非同期待機の 4 つのアプローチ
### 1. ネットワークアイドル待機(Wait For Network Idle)
適用シーン: 検索・フィルタリング・ページ読み込み後、複数の非同期 API リクエストがすべて完了(500ms 以上通信が発生しない状態)するのを待つ場合。


// 企業名を入力して検索
await Web.ClickLinkAsync("依頼先");
await Web.InputByLabelAsync("企業名 / 業種 / 地域", "sell");
await Web.PressKeyAsync("Enter");

// ❌ 以前の書き方: 固定時間待機
// await Task.Delay(5000);

// ⭕ 推奨: 通信が完了した瞬間に即座に次へ進む
await Web.WaitForNetworkIdleAsync();

await Web.ClickButtonAsync("詳細を見る");

### 2. 特定 API レスポンス待機(Wait For Response)
適用シーン: 保存・サインイン・データ更新など、特定のバックエンド API(例: HTTP 200)の返却をピンポイントで正確に待つ場合。


// 方式 A: 操作後に特定の API レスポンス完了を待つ
await Web.ClickButtonAsync("サインイン");
await Web.WaitForResponseAsync("/api/auth/login", 200);

// 方式 B: レスポンスが極めて速い場合の競合(取りこぼし)を防ぐトリガー実行
await Web.RunAndWaitForResponseAsync(
    async () => await Web.ClickButtonAsync("保存する"),
    "/api/v1/products",
    expectedStatus: 200
);

### 3. ローディング消失・特定テキスト出現待機(Wait For Text / Hidden)
適用シーン: 「処理中…」スピナーやオーバーレイ遮蔽幕が消えるのを待つ、または新しいステータス文字が表示されるのを待つ場合。


// 「処理中...」やローディング遮蔽幕が消えるまで待機
await Web.ClickButtonAsync("提出する");
await Web.WaitForTextHiddenAsync("処理中...");

// 特定のステータス文字列が表示されるまで待機(デフォルト最大30秒)
await Web.WaitForTextAsync("発送待ち");

### 4. カスタム条件ポーリング待機(Wait Until)
適用シーン: 複数条件の組み合わせや、独自のビジネスロジック・DOM 状態の変化を待つ場合。


// いずれかの完了ステータスが表示されるまで最大 15 秒間ポーリング
await Web.WaitUntilAsync(async () => {
    return await Web.IsTextVisibleAsync("受領済み") || await Web.IsTextVisibleAsync("完了");
}, timeoutMs: 15000, pollIntervalMs: 200);

### ベストプラクティス(補足)
新しく出現するボタンやリンクをクリックする場合: ChronoATX の ClickButtonAsync や InputByLabelAsync 等の操作 API は、内部で対象要素が可視・操作可能になるまで自動待機(Auto-waiting) します。そのため、多くの場合、事前の待機コード自体を書かずに直接操作を記述するだけで正常に動作します。

検証(Verify)処理について: VerifyTextAsync や VerifyLabelValueAsync には 5秒間の自己修復リトライ機構 が内蔵されています。非同期更新後のアサーション直前に置いていた Task.Delay もそのまま削除可能です。

この記事は役に立ちましたか?

今後のコンテンツ改善の参考にさせていただきます。