如何在测试后修复报告打开应用程序然后截取屏幕截图
How to fix report opening app after test and then taking screenshot
测试失败尝试截图。实际发生的事情是,一旦 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
方法正在对应用程序进行初始化,因为该应用程序再次打开。
因此,您需要在代码中进行以下更改,然后才能正常工作:
全局声明 AppiumDriver<MobileElement> driver
而不是
在 setupTests
方法中声明它,以便可以使用
整个 class.
从您的 @AfterMethod
中删除代码行 AppiumDriver<MobileElement> driver =
MetricellTest.setupTests();
因为它是
再次初始化 driver
和应用程序。
更新了答案并添加了额外的解释:
您可以像这样全局声明 driver
:
因此,假设您的 class 名称是 testClass
,您应该在 class 的代码开始之后声明 driver
,例如:
public class testClass{
AppiumDriver<MobileElement> driver;
// Add Rest of the code here
}
测试失败尝试截图。实际发生的事情是,一旦 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
方法正在对应用程序进行初始化,因为该应用程序再次打开。
因此,您需要在代码中进行以下更改,然后才能正常工作:
全局声明
AppiumDriver<MobileElement> driver
而不是 在setupTests
方法中声明它,以便可以使用 整个 class.从您的
@AfterMethod
中删除代码行AppiumDriver<MobileElement> driver = MetricellTest.setupTests();
因为它是 再次初始化driver
和应用程序。
更新了答案并添加了额外的解释:
您可以像这样全局声明 driver
:
因此,假设您的 class 名称是 testClass
,您应该在 class 的代码开始之后声明 driver
,例如:
public class testClass{
AppiumDriver<MobileElement> driver;
// Add Rest of the code here
}