- Using Cucumber EventListener, I am trying to capture the screenshots in Allure report, but screenshots is not attached in the report.
Below are my CustomEventListener Code:
public class CListener extends TestRunner implements EventListener {
@Override
public void setEventPublisher(EventPublisher eventPublisher) {
eventPublisher.registerHandlerFor(TestStepFinished.class, this::stepFinished);
}
private void stepFinished(TestStepFinished event) {
PickleStepTestStep steps = (PickleStepTestStep) event.getTestStep();
String stepName = steps.getStep().getText();
if (event.getResult().getStatus().toString().equalsIgnoreCase("PASSED")) {
takeScreenshot(webDriver, event.getResult().getStatus().toString(), stepName);
} else if (event.getResult().getStatus().toString().equalsIgnoreCase("FAILED")) {
takeScreenshot(webDriver, event.getResult().getStatus().toString(), stepName);
}
Allure.addAttachment(stepName, new ByteArrayInputStream(((TakesScreenshot) webDriver).getScreenshotAs(OutputType.BYTES)));
}
private void takeScreenshot(WebDriver driver, String filePath, String screenName) {
File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(scrFile, new File("Screenshots\" + filePath + "\" + screenName + ".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Runner Class:
@CucumberOptions(
features = {"classpath:Login.feature"},
plugin = {
"summary",
"pretty",
"io.qameta.allure.cucumber6jvm.AllureCucumber6Jvm","utilities.CListener"},
glue = {"steps"}
)
public class TestRunner extends AbstractTestNGCucumberTests {
public static WebDriver webDriver;
@BeforeSuite
public void setup() {
WebDriverManager.chromedriver().setup();
webDriver = new ChromeDriver();
webDriver.manage().window().maximize();
}
@AfterSuite
public void tearDown() {
if (webDriver != null) {
webDriver.quit();
System.out.println("hello: inside teardown");
}
}
}
Sample code implementation can be found here
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…