java - 如何修复测试后打开报告然后截图的问题

标签 java testng appium-android extentreports

测试失败时尝试截图。实际发生的情况是,一旦 intellij 到达我的 @AfterMethod,它会再次启动应用程序并截取主屏幕的屏幕截图。

我尝试过放置extent.flush();进入 @AfterMethod 并将当前的 @AfterMethod 更改为 @AfterTest

    @AfterMethod
    public synchronized void afterMethod(ITestResult result) throws IOException {
        AppiumDriver<MobileElement> driver = MetricellTest.setupTests();
        String screenShot = CaptureScreenShot.captureScreen(driver, CaptureScreenShot.generateFileName(result));

        if (result.getStatus() == ITestResult.FAILURE) {
            test.get().log(Status.FAIL, result.getName());
            test.get().log(Status.FAIL, result.getThrowable());
            test.get().fail("Screen Shot : " + test.get().addScreenCaptureFromPath(screenShot));
            test.get().fail(result.getThrowable());
        } else if (result.getStatus() == ITestResult.SKIP) {
            test.get().skip("Test Case : " + result.getName() + " has been skipped");
            test.get().skip(result.getThrowable());


        } else
            test.get().pass("Test passed");

        extent.flush();
    }

}

我希望它能够在测试失败时截取屏幕截图。目前它只是在测试结束时打开应用程序并截取主屏幕的屏幕截图。

最佳答案

@AfterMethod ,您正在初始化 driver再次调用 setupTests方法和你的setupTests方法正在对应用程序进行初始化,因此应用程序将再次打开。

因此,您需要在代码中进行以下更改,这样它就可以正常工作了:

  1. 声明 AppiumDriver<MobileElement> driver全局而不是 在 setupTests 中声明它方法,以便可以使用 整个类。

  2. 删除代码行 AppiumDriver<MobileElement> driver = MetricellTest.setupTests();来自您的@AfterMethod因为它是 初始化driver再次打开应用程序。

更新了答案并添加了额外的解释:
您可以声明driver全局范围内喜欢:
所以,假设你的类(class)名称是 testClass ,您应该声明 driver就在类的代码开始之后,例如:

public class testClass{
    AppiumDriver<MobileElement> driver;

    // Add Rest of the code here
}

关于java - 如何修复测试后打开报告然后截图的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55341559/

相关文章:

java - 使用 JpaSpecificationExecutor 时使用 QueryHint

java - JPA - 无效的 persistence.xml

java - 重写 BeforeClass 方法正在停止整个测试执行

java - TestNG预期异常处理: Have my cake as well as eat it?

java - 当定义了 Android 和 IOS Xpath 时,Appium Page Factory 如何选择正确的 xpath

java - 实例化对象时出现 Appium 错误

java - 使用 skmap 的 FileNotFoundException

java - 如何在单线程旁边运行多线程 testng

javascript - 将WebDriver的Browser实例传递给Appium中的JavaScript

java - 停止使用的服务包时会发生什么