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

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

在测试失败时尝试截取屏幕截图。实际上发生的事情是,一旦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();
    }

}

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

java testng appium-android extentreports
1个回答
1
投票

@AfterMethod中,你再次初始化driver并调用setupTests方法,你的setupTests方法正在进行app的初始化,因为应用程序再次被打开。

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

  1. 全局声明AppiumDriver<MobileElement> driver而不是在setupTests方法中声明它,以便它可以在整个班级中使用。
  2. AppiumDriver<MobileElement> driver = MetricellTest.setupTests();中删除代码行@AfterMethod,因为它正在初始化driver和应用程序。

更新答案并添加额外说明: 您可以在全球范围内声明driver: 所以,假设你的类名是testClass,你应该在类的代码开始之后声明driver

public class testClass{
    AppiumDriver<MobileElement> driver;

    // Add Rest of the code here
}
© www.soinside.com 2019 - 2024. All rights reserved.