测试后如何修复打开报告的应用程序,然后截取屏幕截图

时间:2019-03-25 15:45:20

标签: java testng appium-android extentreports

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

我尝试过将range.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();
    }

}

我希望它会在截屏和测试失败时进行截图。目前,它只是在测试结束时打开应用程序,并获取主屏幕的屏幕截图。

1 个答案:

答案 0 :(得分:1)

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

因此,您需要在代码中进行以下更改,然后可以正常工作:

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

  2. 从您的AppiumDriver<MobileElement> driver = MetricellTest.setupTests();中删除代码行@AfterMethod,因为它是 再次初始化driver和应用。

更新后的答案并添加了额外的说明:
您可以像以下这样全局声明driver
因此,假设您的类名称为testClass,则应在类代码开始后声明driver,例如:

public class testClass{
    AppiumDriver<MobileElement> driver;

    // Add Rest of the code here
}