In the Extent Report, I want to display the name of test instead of method name. So I found a solution, added a test name attribute for @Test annotation
Problem 1: In the report I see null being returned for getTestName method.
Problem 2: I am not able to create a test under 'Tests' column in the report with the test name. Here is the line which does that:
test = extent.createTest(Thread.currentThread().getStackTrace()1.getMethodName().toString());
I have added my test case and the Extent Report code. Please suggest.
My code for Extent Report:
package com.gale.precision.FundVisualizer.core;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.Status;
import com.aventstack.extentreports.markuputils.ExtentColor;
import com.aventstack.extentreports.markuputils.MarkupHelper;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
import com.aventstack.extentreports.reporter.configuration.ChartLocation;
import com.aventstack.extentreports.reporter.configuration.Theme;
import com.gale.precision.FundVisualizer.utility.SendEmail;
public class ExtentReport {
public static ExtentHtmlReporter htmlReporter;
public static ExtentReports extent;
public static ExtentTest test;
public static String suiteName;
@BeforeSuite
public static void setUp(ITestContext ctx) {
// String currentDate=getDateTime();
suiteName = ctx.getCurrentXmlTest().getSuite().getName();
htmlReporter = new ExtentHtmlReporter(System.getProperty("user.dir") + "/Reports/" + suiteName + ".html");
extent = new ExtentReports();
extent.attachReporter(htmlReporter);
extent.setSystemInfo("OS", "Windows");
extent.setSystemInfo("Host Name", "CI");
extent.setSystemInfo("Environment", "QA");
extent.setSystemInfo("User Name", "QA_User");
htmlReporter.config().setChartVisibilityOnOpen(true);
htmlReporter.config().setDocumentTitle("AutomationTesting Report");
htmlReporter.config().setReportName("testReport");
htmlReporter.config().setTestViewChartLocation(ChartLocation.TOP);
htmlReporter.config().setTheme(Theme.STANDARD);
}
@AfterMethod
public void getResult(ITestResult result) throws IOException {
if (result.getStatus() == ITestResult.FAILURE) {
String screenShotPath = GetScreenShot.capture(Base.driver, "screenShotName", result);
test.log(Status.FAIL, MarkupHelper.createLabel(result.getTestName() + " Test case FAILED due to below issues:",
ExtentColor.RED));
test.fail(result.getThrowable());
test.fail("Snapshot below: " + test.addScreenCaptureFromPath(screenShotPath));
} else if (result.getStatus() == ITestResult.SUCCESS) {
test.log(Status.PASS, MarkupHelper.createLabel(result.getTestName() + " Test Case PASSED", ExtentColor.GREEN));
} else {
test.log(Status.SKIP,
MarkupHelper.createLabel(result.getTestName()+ " Test Case SKIPPED", ExtentColor.ORANGE));
test.skip(result.getThrowable());
}
extent.flush();
}
@AfterSuite
public void tearDown() throws Exception {
System.out.println("In After Suite");
SendEmail.execute(SendEmail.path);
}
public static String getDateTime() {
// Create object of SimpleDateFormat class and decide the format
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
// get current date time with Date()
Date date = new Date();
// Now format the date
String currentDate = dateFormat.format(date);
String newDate = currentDate.replace('/', '_');
String newCurrentDate = newDate.replace(':', '.');
return newCurrentDate;
}
public void elementHighlight(WebElement element) {
for (int i = 0; i < 2; i++) {
JavascriptExecutor js = (JavascriptExecutor) Base.driver;
js.executeScript(
"arguments[0].setAttribute('style', arguments[1]);",
element, "color: red; border: 3px solid red;");
js.executeScript(
"arguments[0].setAttribute('style', arguments[1]);",
element, "");
}
}
}
I want to display test name in the report at the selected area. Please refer the image
Thanks in advance!!
For Problem 1, you should be using result.getMethod().getMethodName()
to get the test method name.
For Problem 2, a cleaner way of doing this would be to add a BeforeMethod and initialize the Extent test here instead of initializing it in every test method. You can get the testname or any other annotation value using the below technique inside BeforeMethod:
@BeforeMethod
public void setup(Method method) {
String testMethodName = method.getName(); //This will be:verifySaveButtonEnabled
String descriptiveTestName = method.getAnnotation(Test.class).testName(); //This will be: 'Verify if the save button is enabled'
test = extent.createTest(descriptiveTestName);
}