Java 如何修复测试后打开应用程序并拍摄屏幕截图的报告
尝试在测试失败时拍摄屏幕截图。实际发生的情况是,一旦intellij进入我的@AfterMethod,它将再次启动应用程序并拍摄主屏幕的屏幕截图 我已经试着把范围。冲洗;转换为@AfterMethod并将当前@AfterMethod更改为@AfterTestJava 如何修复测试后打开应用程序并拍摄屏幕截图的报告,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&
@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?在做了我建议的更改后,你能在问题中发布你的整个类代码吗?到时能帮你更好吗