Может ли Selenium снять скриншот с ошибкой теста с JUnit?

Когда мой тестовый пример выходит из строя, особенно на нашем сервере сборки, я хочу сделать снимок экрана/экрана, чтобы помочь мне отладить то, что произошло позже. Я знаю, как сделать снимок экрана, но я надеялся, что в JUnit вы вызовете мой метод takeScreenshot(), если тест завершится с ошибкой, прежде чем браузер будет закрыт.

Нет, я не хочу редактировать наши тесты тестов, чтобы добавить try/catch. Возможно, я мог бы, возможно, поговорить в аннотации, я полагаю. Все мои тесты имеют общий родительский класс, но я не могу придумать, что я могу сделать, чтобы решить эту проблему.

Идеи?

Ответы

Ответ 1

Несколько быстрых поисков привели меня к этому:

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

В принципе, он рекомендует создать JUnit4 Rule, который завершает тест Statement в блоке try/catch, в котором он вызывает:

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

Это работает для вашей проблемы?

Ответ 2

Если вы хотите быстро добавить это поведение в ВСЕ свои тесты в ходе, вы можете использовать интерфейс 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));