Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to display test name under Extent Report instead of Method Name?

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.

/*============================================================================================================================

	 Test case : Verify if the save button is enabled on giving a comparison name in the save comparison form 
    ======================================================================================*/
	
	
	
  @Test(testName ="Verify if the save button is enabled")
  public void verifySaveButtonEnabled() {
	  
	    //test = extent.createTest(Thread.currentThread().getStackTrace()[1].getMethodName());
	   test = extent.createTest(Thread.currentThread().getStackTrace()[1].getMethodName().toString());
			   Base.getBrowser();
		InvestmentsSearch.login(Base.driver);
		InvestmentsSearch.InvestmentsLink(Base.driver).click();
		JavascriptExecutor jse = (JavascriptExecutor)Base.driver;
		jse.executeScript("window.scrollBy(0,750)", "");
		InvestmentsSearch.ViewResults(Base.driver).click();
		for(int i=0;i<=2;i++)
			 
		{
		 

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 imagescreenshot

Thanks in advance!!

like image 316
user2560019 Avatar asked Mar 07 '23 06:03

user2560019


2 Answers

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);
}
like image 70
Harish Avatar answered Apr 30 '23 03:04

Harish


@Test(descritpion="Verify if the save button is enabled")

you can use

result.getMethod().getDescription()

you have to initialize ITestResult result else you can use these methods in Listeners class

enter image description here

like image 45
Suhail Ahmed Avatar answered Apr 30 '23 03:04

Suhail Ahmed