web-dev-qa-db-ja.com

SeleniumはJUnitでのテスト失敗のスクリーンショットを撮ることができますか?

テストケースが失敗した場合、特にビルドサーバーで、後で何が起こったかをデバッグするために、画面の写真またはスクリーンショットを撮りたいと思います。スクリーンショットを撮る方法は知っていますが、ブラウザーが閉じる前にテストが失敗した場合にJUnitでtakeScreenshot()メソッドを呼び出す方法を望んでいました。

いいえ、膨大な数のテストを編集してtry/catchを追加したくありません。たぶん、たぶん注釈に話しかけられるかもしれないと思う。すべてのテストに共通の親クラスがありますが、これを解決するためにそこでできることは何も考えられません。

アイデア?

19

いくつかの簡単な検索が私にこれを導きました:

http://blogs.steeplesoft.com/posts/2012/grabbing-screenshots-of-failed-Selenium-tests.html

基本的に、彼はテストRuleをtry/catchブロックでラップするJUnit4 Statementを作成することをお勧めします。

imageFileOutputStream.write(
    ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES));

それはあなたの問題に役立ちますか?

18
Jeff Bowman

この動作をすばやく[〜#〜] all [〜#〜]実行時にテストに追加する場合は、RunListenerインターフェイスを使用してテストの失敗をリッスンできます。

public class ScreenshotListener extends RunListener {

    private TakesScreenshot screenshotTaker;

    @Override
    public void testFailure(Failure failure) throws Exception {
        File file = screenshotTaker.getScreenshotAs(OutputType.File);
        // do something with your file
    }

}

このようにリスナーをテストランナーに追加します...

JUnitCore junit = new JUnitCore();
junit.addListener(new ScreenshotListener((TakesScreenShots) webDriver));

// then run your test...

Result result = junit.run(Request.classes(FullTestSuite.class));
6
dellsala