MagicPodには、テストの安定性を高めるためのさまざまな待機コマンドが用意されています。
待機コマンドは「秒間待つ」による固定時間待機と、「UI要素が表示されるまで待つ」などの特定の条件が満たされるまで待機する条件付き待機の2種類があります。なるべく前者の固定時間待機は使わないことをお勧めします。実行時間を無駄に伸ばすだけでなく、環境によっては待ち時間が足りずにテストが失敗する場合もあるためです。
代わりに「UI要素が表示されるまで待つ」などの条件付き待機を推奨します。条件が成立した瞬間に次のステップへ進むため、テストを速く・安定して実行できます。
ここでは、いくつかの条件付き待機コマンドとその使い分けについて説明します。
画面全体の描画が終わるまで待つ
画面全体の描画が終わるまで待つコマンドは、画面に一定時間変化がないことを基準として、描画の完了を検知します。
そのため、以下のように画面が継続的に変化するWebページでは、描画完了を正しく検知できない可能性があるため、本コマンドは非推奨です。
- 動画が埋め込まれているページ
- 数秒おきにバナー画像が切り替わるページ など
また、ページの読み込み途中に一時的に画面変化が止まった場合、描画が完了したと誤認識し、次のステップへ進んでしまうケースもあります。
このような状況では、「UI要素が表示されるまで待つ」または「UI要素が存在するまで待つ」コマンドを、描画完了後に表示されるUI要素に対して使用することで、より安定した動作が期待できます。
「UI要素が存在するまで待つ」と「UI要素が表示されるまで待つ」の違い
UI要素が存在するまで待つコマンドは、対象のUI要素がUIツリー上に存在していること(UI要素が存在しなくなるまで待つコマンドについては存在していないこと)を検出できるまで待機します。このとき、対象の要素が表示されているかどうかは検出判定に影響しません。
一方、UI要素が表示されるまで待つコマンドは、対象のUI要素が表示されているかどうかを検出できるまで待機します。このため、対象のUI要素がUIツリー上に存在していても、以下のような非表示状態である場合は検出されません。
- display: none;
- visibility: hidden;
- opacity: 0;
反対に、UI要素が表示しなくなるまで待つコマンドについては上記のような非表示状態である場合に検出されます。
このため、基本的には「UI要素が表示されるまで待つ」コマンドの方が、UI要素が表示状態になるまで正確に待機してくれることから、より安定しており、推奨されます。
ただし、モバイルアプリのiOSテストにおいては「UI要素が表示されるまで待つ」が不安定となるため、「UI要素が存在するまで待つ」を使用してください。
| コマンド | 内容 | 安定性 | iOSでの利用可否 |
| UI要素が存在するまで待つ | UI要素がUIツリー上に現れるまで待機 | ◯ | ◯ |
| UI要素が表示されるまで待つ | UI要素が画面上に表示されるまで待機 | ◎ | △ |