WebDriverがいい感じ

Webアプリのテストとして、実際にWebブラウザを使っての動きをテストしたい場合、Seleniumが使われることは珍しくないと思う。そんな時、今まではSeleniumServerを使って書いていたのだけど、WebDriverってのがあるんだね。

これは便利!SeleniumServerを必要としない分、実際の動きをシミュレートしてるってのが直感的に分かる。
ブラウザの戻る操作、複数ウインドウ、ダイアログ、フレームとかにも対応できるので、本当に人間が行う作業を自動化できる。

ただ、特定のelement(idやnameでひっぱる)やタイトルの確認のassertはできるけど、画面レイアウトの確認はどうしても人の目が必要。これはWebアプリの自動テストに共通の課題のように思う。これもまぁ、WebDriverでドライビングしたページをテストの際に必要に応じてキャプチャして画像ファイルで保存するようにしておいて、Jenkins等のCIツールの上で成果物とするようにしておけば、労力の大幅な削減は可能かな。

WebDriverはSlenium2.0以降(?)からはSeleniumにも入っているようで、これを使って動作を確認。
どんなことができるかってのは公式が詳しい(↓)。
http://seleniumhq.org/docs/03_webdriver.html

Windows環境ではInternetExplorerDriver、FirefoxDriver、HtmlUnitDriverが問題なく動く。Linux(CentOS)ではHtmlUnitDriverは問題なく動いたけど、FirefoxDriverがうまく動作しなかった・・・(ディスプレイはXvfbを利用、Firefoxのバージョンは8.0)。

色々と試したけど、FirefoxDriverのコンストラクタのうち、FirefoxDriver(Capabilities)を使うとうまく動いてくれる模様。デフォルトコンストラクタやFirefoxDriver(FirefoxProfile)では途中で動きが固まってしまい、起動に失敗した。
従来のSeleniumServerとSeleniumを使った方法でも、「Preparing Firefox profile...」が出力された後固まったようになったので、そういうものなのかな。Firefoxのプロファイル関連は色々とややこしいなぁと思った。

また、WebDriverBackedSeleniumを使うとWebDriverからSeleniumを取得できる。ただし、この場合、WebDriver#quit()ではなくSelenium#stop()を呼ばないとダメなよう。