テストケースが失敗した場合、特にビルドサーバーで、後で何が起こったかをデバッグするために、画面の写真またはスクリーンショットを撮りたいと思います。スクリーンショットを撮る方法は知っていますが、ブラウザーが閉じる前にテストが失敗した場合にJUnitでtakeScreenshot()
メソッドを呼び出す方法を望んでいました。
いいえ、膨大な数のテストを編集してtry/catchを追加したくありません。たぶん、たぶん注釈に話しかけられるかもしれないと思う。すべてのテストに共通の親クラスがありますが、これを解決するためにそこでできることは何も考えられません。
アイデア?
いくつかの簡単な検索が私にこれを導きました:
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));
それはあなたの問題に役立ちますか?
この動作をすばやく[〜#〜] 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));