Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复测试后打开应用程序并拍摄屏幕截图的报告_Java_Testng_Appium Android_Extentreports - Fatal编程技术网

Java 如何修复测试后打开应用程序并拍摄屏幕截图的报告

Java 如何修复测试后打开应用程序并拍摄屏幕截图的报告,java,testng,appium-android,extentreports,Java,Testng,Appium Android,Extentreports,尝试在测试失败时拍摄屏幕截图。实际发生的情况是,一旦intellij进入我的@AfterMethod,它将再次启动应用程序并拍摄主屏幕的屏幕截图 我已经试着把范围。冲洗;转换为@AfterMethod并将当前@AfterMethod更改为@AfterTest @AfterMethod public synchronized void afterMethod(ITestResult result) throws IOException { AppiumDriver&

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

我已经试着把范围。冲洗;转换为@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中,您再次初始化驱动程序并调用setupTests方法,而setupTests方法正在初始化应用程序,因此应用程序将再次打开

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

全局声明AppiumDriver驱动程序,而不是 在setupTests方法中声明它,以便可以使用它 在整个课堂上

删除AppiumDriver驱动程序的代码行= MetricellTest.setupTests;因为它是 再次初始化驱动程序和应用程序

更新答案并添加额外解释: 您可以全局声明驱动程序,如下所示: 因此,假设您的类名是testClass,您应该在类的代码启动后声明驱动程序,如下所示:

public class testClass{
    AppiumDriver<MobileElement> driver;

    // Add Rest of the code here
}

请同时为您的方法setupTests添加代码,以便我们能够更清楚地了解问题。@SameerArora我已将代码添加到setupTests方法中感谢您的回答。如何全局声明drvier?@TomCockram已经更新了我的答案,请立即检查。谢谢,我已经做了这些更改,但是我得到了空指针异常。我将驱动程序设置为公共静态AppiumDriver AppiumDriver=null;我认为这是不对的。我应该怎么做?你在哪一行得到NPE?在做了我建议的更改后,你能在问题中发布你的整个类代码吗?到时能帮你更好吗