selenium,junit,cucumber,maven项目失败后如何调用函数
How to call a function after failure of selenium,junit,cucumber and maven project
我创建了一个 java cucumber maven 项目。现在我想添加一个侦听器或任何方式,以便在任何黄瓜 step/Test 失败时调用我的屏幕截图捕获功能。
我没有在 Junit 的 TestRunner class 中使用 @RunWith(Cucumber.class)
。我已经集成了 @RunWith(ExtendedCucumberRunner.class)
第一次尝试:
在这里,我尝试在 ExtendedCucumberRunner class 中覆盖以下函数:-
import org.junit.runner.notification.Failure;
public void testFailure(Failure failure){
}
但是如果我试图覆盖错误显示为:
The method testFailure(Failure) of type ExtendedCucumberRunner must
override or implement a supertype method.
第二次尝试:
我也试过扩展 RunListener
class 还是不行。
我尝试添加 Lister 的代码如下:
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
import automationframework.AutomationLog;
import automationframework.ScreenshotAndTestNgReporterListener;
public class JUnitExecutionListener extends RunListener{
/**
* Called when an atomic test fails.
* https://howtodoinjava.com/junit/how-to-add-listner-in-junit-testcases/
* */
@Override
public void testFailure(Failure failure) throws java.lang.Exception{
super.testFailure(failure);
if (!failure.getDescription().isSuite()) {
ScreenshotAndTestNgReporterListener.customScreenshot();
AutomationLog.error("In Custom Failer Class of Junit");
System.out.println("FAILED!!!!!"); //Here pass your screenshot capture event
}
ScreenshotAndTestNgReporterListener.customScreenshot();
AutomationLog.error("In Custom Failer Class of Junit");
System.out.println("FAILED!!!!!"); //Here pass your screenshot capture event
}
}
第三次尝试:
我也尝试在 TestRunner 中添加以下规则 class
@Rule
public TestWatcher watchman= new TestWatcher() {
private String watchedLog;
@Override
protected void failed(Throwable e, Description description) {
ScreenshotAndTestNgReporterListener.customScreenshot();
AutomationLog.error(e.getMessage());
watchedLog+= description + "\n";
}
@Override
protected void succeeded(Description description) {
watchedLog+= description + " " + "success!\n";
}
};
我不想添加 @After 方法,因为即使任何测试用例成功,它也会每次调用。
我只想在测试用例失败时捕获屏幕截图
任何人都可以告诉我任何方法,以便我可以实现同样的目标吗?
正如@Grasshopper 正确指出的那样。在任何步骤定义中使用以下函数一次。 Cucumber 将识别钩子,并在每个测试用例 运行 之后 运行 下面的函数。如果它失败,场景将 运行 if 条件,您可以在其后 运行 编写任何您想要的代码。
参考:
代码:
@After
public void afterMethod(Scenario scenario) {
if(scenario.isFailed()) {
}
}
导入:
import cucumber.api.java.After;
我创建了一个 java cucumber maven 项目。现在我想添加一个侦听器或任何方式,以便在任何黄瓜 step/Test 失败时调用我的屏幕截图捕获功能。
我没有在 Junit 的 TestRunner class 中使用 @RunWith(Cucumber.class)
。我已经集成了 @RunWith(ExtendedCucumberRunner.class)
第一次尝试: 在这里,我尝试在 ExtendedCucumberRunner class 中覆盖以下函数:-
import org.junit.runner.notification.Failure;
public void testFailure(Failure failure){
}
但是如果我试图覆盖错误显示为:
The method testFailure(Failure) of type ExtendedCucumberRunner must override or implement a supertype method.
第二次尝试:
我也试过扩展 RunListener
class 还是不行。
我尝试添加 Lister 的代码如下:
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
import automationframework.AutomationLog;
import automationframework.ScreenshotAndTestNgReporterListener;
public class JUnitExecutionListener extends RunListener{
/**
* Called when an atomic test fails.
* https://howtodoinjava.com/junit/how-to-add-listner-in-junit-testcases/
* */
@Override
public void testFailure(Failure failure) throws java.lang.Exception{
super.testFailure(failure);
if (!failure.getDescription().isSuite()) {
ScreenshotAndTestNgReporterListener.customScreenshot();
AutomationLog.error("In Custom Failer Class of Junit");
System.out.println("FAILED!!!!!"); //Here pass your screenshot capture event
}
ScreenshotAndTestNgReporterListener.customScreenshot();
AutomationLog.error("In Custom Failer Class of Junit");
System.out.println("FAILED!!!!!"); //Here pass your screenshot capture event
}
}
第三次尝试:
我也尝试在 TestRunner 中添加以下规则 class
@Rule
public TestWatcher watchman= new TestWatcher() {
private String watchedLog;
@Override
protected void failed(Throwable e, Description description) {
ScreenshotAndTestNgReporterListener.customScreenshot();
AutomationLog.error(e.getMessage());
watchedLog+= description + "\n";
}
@Override
protected void succeeded(Description description) {
watchedLog+= description + " " + "success!\n";
}
};
我不想添加 @After 方法,因为即使任何测试用例成功,它也会每次调用。
我只想在测试用例失败时捕获屏幕截图
任何人都可以告诉我任何方法,以便我可以实现同样的目标吗?
正如@Grasshopper 正确指出的那样。在任何步骤定义中使用以下函数一次。 Cucumber 将识别钩子,并在每个测试用例 运行 之后 运行 下面的函数。如果它失败,场景将 运行 if 条件,您可以在其后 运行 编写任何您想要的代码。
参考:
代码:
@After
public void afterMethod(Scenario scenario) {
if(scenario.isFailed()) {
}
}
导入:
import cucumber.api.java.After;