junit と Selenium WebDriver を使用して、すべてのポイントを満たすテスト フレームワークを構築しました。それはまさにあなたが求めているものではありませんが、私はそれがあなたにとって有益であると感じています.
多数の異なるブラウザで同じ Web ページを読み込む
Selenium のグリッドを使用すると、セットアップが非常に簡単になります。テストする環境でいくつかの仮想マシンをセットアップします。たとえば、私たちの環境では、次のようなセットアップで 4 つのノード (仮想マシンとして) で実行されているグリッドがあります。
- Windows と IE7 および FireFox
- Windows と IE8 および FireFox
- Windows と IE9 および Firefox
- Linux と FireFox
Selenium では、Windows ノードで実行できる IE のインスタンスは 1 つだけにすることをお勧めします。前述の各ノードには、指定された IE のインスタンスが 1 つと、指定された FF のインスタンスが 5 つあり、いつでも実行できます。グリッドのセットアップとハブの構成が完了したら、テストを開始するのは簡単です。WebDriver では、DesiredCapabilities
オブジェクトを使用して目的の環境をセットアップし、テストを送信して結果が返されるのを待ちます。
Platform desiredPlatform;
DesiredCapabilities desiredCapabilities;
desiredPlatform = Platform.LINUX;
desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setPlatform(desiredPlatform);
desiredCapabilities.setVersion("11");
WebDriver driver = new RemoteWebDriver("http://hubURL", desiredCapabilities);
多数の仮想マシン (セットアップ済み) に同じ Web ページをロードします。
私はこれを、型にはまらない方法ではありますが、スレッド化された方法でテストを強制的に実行することで解決しました。各 JUnit テストでは、私がまとめた共有スレッド ライブラリを使用して、個別のスレッドで必要なすべての RemoteWebDriver を作成します。これらの各スレッドは、そのノード上で同時に実行されますが、親スレッドは座ってすべてが終了するのを待ちます。次に、同様にマルチスレッドで実行される次のテストに進みます。
すべての子スレッドで Junit スタック トレースを取得するなど、いくつかの問題が発生しました。Std.err
親スレッドのバイトストリームにリダイレクトすることでこれを解決しました。すべてのエラーはそのストリームにルーティングされ、それを文字列に変換して、Std.out
各テストの最後に出力します。テストの最後に生成された html ページには、Std.out
完全に機能したものが含まれています。
さまざまなブラウザーの結果を比較するスナップショットを作成できる
私はこれを機能させましたが、スクリーンショットをリモートで取得することには固有の問題がいくつかあります。プロセスがサービスとして実行されている場合、IE は黒いスクリーンショットを返します。回避策は、コマンド ラインから jar を実行し、ユーザーがログインしたままにすることでした。この場合、スクリーンショットは正しく返されます。これはブラウザの既知の問題であり、この問題に対する適切な解決策はありません。スクリーンショットの撮影は大まかに次のように行われます
WebDriver augmentedDriver = new Augmenter().augment(driver);
TakesScreenshot ss = (TakesScreenshot) augmentedDriver;
String base64Screenshot = ss.getScreenshotAs(OutputType.BASE64);
byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes());
FileOutputStream fos = new FileOutputStream(new File(imageName));
fos.write(decodedScreenshot);
fos.close();
これにより、キャプチャされたスクリーンショットがリモート マシンの実行中のブラウザからローカル マシンに保存されます。
現実には、ブラウザの自動化は依然として安定化に苦労しています。あなたが尋ねているものなど、多くの重要な機能がありますが、どのフレームワークでもしっかりと実装されていません。しかし、時間が経てば、この問題の多くが落ち着き、世界中の QA 開発者が喜んでくれると確信しています。