Selenium WebDriver UIテストにおける注意

Selenium WebDriverによる自動テストは大変便利です。しかし、ajaxなどでの非同期処理をよく扱うWebサイトのテストをするときは注意が必要です。というのも、テストでは非同期処理の終了を待たずに次々処理をしてしまう可能性があるからです。

ajaxButton.click();
WebElement fooElement = driver.findElement(By.id("hoge"));

以上のコードでは、Buttonをクリックした後に生じるhogeと呼ばれる要素の有無を確認しようとしています。しかし非同期処理の性質から、 要素検索の方が要素への値の代入より早く行われてしまい、上手くテストが行えない危険性があるのです。

改善策として一番単純なものは、sleep()をつかってテストの処理を遅らせるものがあります。 あるはずの要素が正しく判定されない時などは、この点を意識してバグを探してみると良いかもしれません。