Repository navigation
Description
Describe the bug
I'm using selenium + cucumber with TestNG for automation testing. I'm trying to generate a report with attached screenshots in case of a test fail.
I'm using a TestListener.class to listen to failed tests. In my onTestFailure method I create the screenshot and add the attachment to the report.
The attachments are visible in the allure-results folder. Unfortunately the screenshots are not rendered in the test report.
To Reproduce
Steps to reproduce the behavior:
- Create TestNG tests
- Create TestNG TestListener.class
- Add onTestFailure method
@Override
public void onTestFailure(ITestResult result){
try {
takeScreenshot();
System.out.println("Screenshot done");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private void takeScreenshot() throws IOException {
File screenshotAs = ((TakesScreenshot) DriverManager.getDriver()).getScreenshotAs(OutputType.FILE);
Allure.addAttachment("Screenshot", FileUtils.openInputStream(screenshotAs));
}
}
- Execute tests and create attachments.
- Generate test report with failing tests.
- Serve report allure serve target/allure-results
Expected behavior
Screenshots should be rendered in the test report.
Screenshots
https://photos.app.goo.gl/PdHr81xEF4ifUBWe8
Desktop (please complete the following information):
- OS: macOS monterey 12.6.1
- Browser: chrome ver. 109.0.5414.119, firefox ver. 109.0
Additional context
I'm using the following dependencies
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.mygroupid</groupId>
<artifactId>da-tool-ui-automation</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<selenium.version>4.6.0</selenium.version>
<webdrivermanager.version>5.3.1</webdrivermanager.version>
<cucumber.version>7.10.1</cucumber.version>
<testng.version>7.7.0</testng.version>
<junit-platform.version>1.9.1</junit-platform.version>
<assertj.version>3.23.1</assertj.version>
<owner.version>1.0.12</owner.version>
<allure.version>2.20.1</allure.version>
<aspectj.version>1.9.19</aspectj.version>
<maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>${webdrivermanager.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-testng -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>${cucumber.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aeonbits.owner</groupId>
<artifactId>owner</artifactId>
<version>${owner.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.qameta.allure/allure-testng -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-testng</artifactId>
<version>${allure.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.qameta.allure/allure-cucumber7-jvm -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-cucumber7-jvm</artifactId>
<version>${allure.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/gherkin -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>gherkin</artifactId>
<version>26.0.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.source}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
-Dcucumber.options="--plugin io.qameta.allure.cucumber7-jvm.AllureCucumber7Jvm"
</argLine>
<systemPropertyVariables>
<allure.results.directory>${project.build.directory}/allure-results</allure.results.directory>
</systemPropertyVariables>
<suiteXmlFiles>
src/test/resources/suites/local.xml
</suiteXmlFiles>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
Runner class
package org.ebay.datool.runner;
import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;
import org.ebay.datool.driver.BrowserFactory;
import org.ebay.datool.driver.DriverManager;
import org.ebay.datool.listener.TestListener;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.*;
@CucumberOptions(
tags = "@login or @dropdown",
features = "classpath:cucumber/features",
glue = "org/ebay/datool/steps",
plugin = {"pretty", "io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm",
"json:target/cucumber-reports/cucumber.json",
"html:target/cucumber-reports/cucumberreport.html"}
)
@Listeners({TestListener.class})
public class RunCucumberTest extends AbstractTestNGCucumberTests {
@BeforeMethod(alwaysRun = true)
@Parameters("browser")
public void setUp(@Optional("chrome") String browser) {
WebDriver driver = BrowserFactory.valueOf(browser.toUpperCase()).createDriver();
DriverManager.setDriver(driver);
}
@AfterMethod(alwaysRun = true)
public void tearDown(){
DriverManager.quit();
}
}
TestListener
package org.ebay.datool.listener;
import io.qameta.allure.Allure;
import org.apache.commons.io.FileUtils;
import org.ebay.datool.driver.DriverManager;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.testng.ITestListener;
import org.testng.ITestResult;
import java.io.File;
import java.io.IOException;
public class TestListener implements ITestListener {
@Override
public void onTestFailure(ITestResult result){
try {
takeScreenshot();
System.out.println("Screenshot done");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private void takeScreenshot() throws IOException {
File screenshotAs = ((TakesScreenshot) DriverManager.getDriver()).getScreenshotAs(OutputType.FILE);
Allure.addAttachment("Screenshot", FileUtils.openInputStream(screenshotAs));
}
}
The screenshot are being generated when I use Cucumbers @after method
@After
public void scenarioCheck(Scenario scenario) throws IOException {
System.out.println("Checking screenshot");
if(scenario.isFailed()){
File screenshotAs = ((TakesScreenshot) DriverManager.getDriver()).getScreenshotAs(OutputType.FILE);
Allure.addAttachment("Screenshot", FileUtils.openInputStream(screenshotAs));
}
}
Activity
Krzysztof-Bednarczyk commentedon Jan 30, 2023
Tried also to create attachments using the annotation
Issue is reproducable in other testing framework.
baev commentedon Aug 17, 2023
see #707 (comment)