Seleniumを安定稼働させる

約300のテストクラス、実行しているテストケースで言えば約1,100ケース。
これを毎日定時に2回回してるけれども、まず失敗しない。しても、10回に1ケース。
なぜ、これほど安定するのか。
それは、魔法を使っているから!ではなく、ページを読み込む箇所に、以下のメソッドを挿入しているから。

/**
 * footerが出るまで待機する
 */
public static void FootrArrivalWait() {
	TargetArrivalWait(By.xpath("/html/body/footer"));
}

 * ターゲット要素が出現するまで待機する
 * 
 * @param by
 *            ターゲット要素
 */
public static void TargetArrivalWait(By by) {
	try {
		Wait<WebDriver> wait = new WebDriverWait(driver, 10);
		wait.until(visibilityOfElementLocated(by));
	} catch (TimeoutException e) {
		fail("要素出現タイムアウト:" + by);
	}
}

この2つのメソッドをページ読み込みを行う箇所に挿入しただけで、全く失敗しなくなった。
実は、Seleniumがエラーを吐く原因の9割が、Seleniumの動作が速すぎて、レタリングとかが追いつかないから。
だったら、待てばいいじゃん。
でも、毎回毎回ユニークな要素を指定するのは非効率的なので、フッター読み込み待機メソッドを作った。
このフッター読み込み待機メソッド(TargetArrivalWait(By by))をページオブジェクトに仕込めばOK。