TestNG是否有可能在@BeforeMethod上捕获截图失败?

时间:2016-09-23 13:30:36

标签: testng

@Test失败时捕获屏幕截图的典型解决方案,但在@Before/After Class/Method失败可能吗?

为什么我需要那个? - 特别是@BeforeMethod,我会在测试类中使用通用逻辑 - 登录并转到特定页面。

2 个答案:

答案 0 :(得分:1)

你可能想尝试实现WebDriverEventListener,你可能对方法onException感兴趣,这将允许你对代码执行期间发生的每个异常做smthn,也就是'有必要使用EventFiringWebDriver添加监听器

以下是一些参考资料: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/events/WebDriverEventListener.html

https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/events/EventFiringWebDriver.html

答案 1 :(得分:0)

目前停止覆盖TestNG ITestListener - onTestSkipped方法。缺点是每个跳过的@Test方法都有截图。当然,下面的代码应该重构,但这是一个很好的开始。注意:您应该将此自定义侦听器包含在testng.xml

@Override
public void onTestSkipped(ITestResult result) {
    if(result != null){
        String failedTestScreenshotFolder = Paths.get("").toAbsolutePath().toString() + "path/skippedScreenshots/";
        WebDriver webDriver = ((TestBase)result.getInstance()).webDriver;
        File scrFile = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        try {
            String className = result.getTestClass().getName();
            FileUtils.copyFile(scrFile, new File(failedTestScreenshotFolder + className.substring(className.lastIndexOf(".") + 1) + "." + result.getMethod().getMethodName() + ".jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}