Selenium可以用JUnit截取测试失败的屏幕截图吗?

当我的测试用例失败时,特别是在我们的构建服务器上,我想拍摄屏幕的照片/屏幕截图,以帮助我调试以后发生的事情。我知道如何截取屏幕截图,但我希望在JUnit中有一种方法可以在浏览器关闭之前,在测试失败时调用我的方法。takeScreenshot()

不,我不想去编辑我们的大量测试来添加尝试/捕获。我想,我也许,只是可能被说成一个注释。我所有的测试都有一个共同的父类,但我想不出我能做些什么来解决这个问题。

想法?


答案 1

一些快速搜索使我明白了这一点:

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

基本上,他建议创建一个JUnit4,将测试包装在一个 try/catch 块中,他在其中调用:RuleStatement

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));

推荐