Webのユニットテスト⑦ Java
前回の続きです。
Hudsonの分散プロジェクトで、
作成したユニットテストを複数ブラウザで実行してみます。
と思ったのですが・・・ここで問題発生(;´Д`)
Antでユニットテストを実行してみたら、
バージョンが違う「/org/apache/tools/ant/Project.class」クラスがあるんで、
ビルドできないって怒られます。
「/org/apache/tools/ant/Project.class」はAntのクラスなのですが、
なぜか「selenium-server.jar」にも同じクラスが入っているのが原因みたいですね・・・
仕方がないので・・・方針を変更したいと思います。
SeleniumServerをプログラム内で起動していましたが、バッチで起動することにします。
よくよく考えてみたらSeleniumServerは立ち上げっぱなしでいいので、こっちの方がいいかも。
■selenium-server-run.bat
SeleniumServerを以下のコマンドで起動します。
バッチファイルを作っておくと便利だと思います。
java -jar selenium-server.jar
■WebTester.java
SeleniumServerを起動する処理を削除しました。
ついでにユニットテスト時のスクリーンショットを撮る機能を実装してみました。
package sample; import java.util.Properties; import com.thoughtworks.selenium.DefaultSelenium; import com.thoughtworks.selenium.Selenium; public class WebTester { private Properties prop; private Selenium selenium; private String className; private String methodName; public void setUp() throws Throwable { // プロパティファイル読み込み if (this.prop == null) { this.prop = new Properties(); this.prop.load(this.getClass().getResourceAsStream("/WebTester.properties")); } // テスト対象のサーバURL&ブラウザ設定をプロパティから読み込む String url = this.prop.getProperty("SeleniumTest.Url"); String browser = this.prop.getProperty("SeleniumTest.Browser"); // seleniumインスタンス起動 this.selenium = new DefaultSelenium("localhost", 4444, browser, url); this.selenium.start(); } public void tearDown() throws Throwable { // 画面のスクリーンショットを保存 captureScreenshot(); // Seleniumインスタンスを停止 this.selenium.close(); this.selenium.stop(); } public Selenium getSelenium() { return this.selenium; } public void open(String url) { // アプリケーション名の取得 String appName = this.prop.getProperty("SeleniumTest.App"); // ブラウザを最大化で表示 this.selenium.open(appName + url); this.selenium.windowMaximize(); // 呼び出し側のクラス名&メソッド名を保持しておく this.className = Thread.currentThread().getStackTrace()[2].getClassName(); this.methodName = Thread.currentThread().getStackTrace()[2].getMethodName(); } public void captureScreenshot() { captureScreenshot(this.className + "." + this.methodName + ".png"); } public void captureScreenshot(String fileName) { // スクリーンショット保存ディレクトリが指定されている場合に、スクリーンショットを保存する String ScreenshotDir = this.prop.getProperty("SeleniumTest.ScreenshotDir"); if (ScreenshotDir != null) { // 画面のスクリーンショットを保存 this.selenium.captureScreenshot(ScreenshotDir + "/" + fileName); } } }