WebDriverを使って受け入れテストを自動化できないかなーといろいろ試しているが、「何を持ってOK」にするか悩ましい。デザインはキャプチャとってみてもらうしかないけど、単純な遷移であればURLをチェックして、あとはJavascriptエラーが出ていないかを確認したい。
Javascriptのエラー検知は結構手間で、色々調べてみたけど海外のページでいくつかやりかたが紹介されていた。
もっともわかり易かったのがWebDriver: capture JS errors while running testsに書かれていた内容。
onerrorで検知する作戦
ページに以下を埋め込んでおく。
onerrorで検知して、jsErrorsにメッセージを貯めていく。あとは、WebDriverからJavascriptを実行して、値をWebDriverの世界に持ってくる。rubyのバインディングを使うならこんな感じ。
シンプルだけどページに埋め込んでおかないとダメなのが面倒くさい。
ハンドラ自体をWebDriverで実行する作戦
execute_scriptメソッドがあるので、各ページでハンドラ自体を実行すればいいのでは?というアイデア。
この問題は、ページが表示されたあとにこれが実行されてしまうので、ページ表示時に動いたJavascriptのエラーを検知できない。
JSErrorCollectorを使う作戦
FireFoxに限定するけど、JSErrorCollectorというFireFoxプラグインを使うことでエラーをプラグインに蓄積することもできる。
これでWebDriverを実行すればFireFoxの右下に「JSErrorCollector」が表示され、ここにエラーが蓄積してく。取得も簡単。
まとめ
Javaでの実装例はDetecting javascript errors using JSErrorCollector in firefox with cucumber and selenium or watir-webdriverでも紹介されている。このページだとCucumberを使って実行してますね。Rubyのサンプルコードもgithubで探せば見つかった。