TestNG 是否可以在@BeforeMethod失败时截屏?

问题描述 投票:0回答:3

有一些典型的解决方案可以在

@Test
失败时捕获屏幕截图,但是是否可以在
@Before/After
Class/Method
失败时执行此操作?

为什么我需要它? - 特别是对于

@BeforeMethod
来说,这会很好,我在测试类中使用通用逻辑 - 登录并转到特定页面。

testng
3个回答
1
投票

您可能想尝试实现

WebDriverEventListener
,在您的情况下,您可能对方法
onException
感兴趣,该方法将允许您对代码执行期间发生的每个异常进行处理,而且有必要使用
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


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

0
投票

对于 @Before 注释,您可以通过将屏幕截图放入 public void onTestSkipped(final ITestResult result) 来解决,因为当 Before 方法出现任何失败时,所有 @Test 将被跳过并调用 onTestSkipped。

这就是我在项目中解决它的方法:)

© www.soinside.com 2019 - 2024. All rights reserved.