画面テストはブラウザを使ってテスト行うため、HTMLのロードの時間やロード後に実行されるJavascript処理など、いろんなものに影響を受けるためテストを安定して自動実行するのが難しい。
そこで役に立つのがWebDriverが用意しているWait機能。WebDriverのドキュメントに「明示及び暗黙のWait」について説明があり、JSのロードやページ読み込み待ちの発生する場合に使えそうなWaitの使用方法が書かれている。
暗黙のWait
ドライバーに設定するだけで、要素が登場するまで設定した値だけ待つ。
明示のWait
明示のWaitをを使うと、「500ミリ秒ごとにチェックして、OKだったら処理に戻る」といったことを実装できます。ずっと待つのではなく「見つかったら戻る」ので多少時間を節約できる人間のような動きですね。
RSpecの場合、値検証に使うメソッドに以下のように組み込んでみた。
最後に最終的な結果判定をしてテスト失敗かどうかをみきわめる形。
タイムアウトしたときはTimeout::Errorが飛び出します。
Timeoutを検知して処理を追加することもできますね。
もし、値の確認時にページリロードを繰り返したい場合は、呼び出し元で
のようにURLを引数に与えて、
とかでリロードを繰り返せばいい気がするんですが、デフォルト500ms毎でぐるぐるしているみたいなので、ロードが遅すぎてうまくうごかなかった。