Может ли 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));