
- Selenium - Home
- Selenium - Overview
- Selenium - Components
- Selenium - Automation Testing
- Selenium - Environment Setup
- Selenium - Remote Control
- Selenium - IDE Introduction
- Selenium - Features
- Selenium - Limitations
- Selenium - Installation
- Selenium - Creating Tests
- Selenium - Creating Script
- Selenium - Control Flow
- Selenium - Store Variables
- Selenium - Alerts & Popups
- Selenium - Selenese Commands
- Selenium - Actions Commands
- Selenium - Accessors Commands
- Selenium - Assertions Commands
- Selenium - Assert/Verify Methods
- Selenium - Locating Strategies
- Selenium - Script Debugging
- Selenium - Verification Points
- Selenium - Pattern Matching
- Selenium - JSON Data File
- Selenium - Browser Execution
- Selenium - User Extensions
- Selenium - Code Export
- Selenium - Emitting Code
- Selenium - JavaScript Functions
- Selenium - Plugins
- Selenium WebDriver Tutorial
- Selenium - Introduction
- Selenium WebDriver vs RC
- Selenium - Installation
- Selenium - First Test Script
- Selenium - Driver Sessions
- Selenium - Browser Options
- Selenium - Chrome Options
- Selenium - Edge Options
- Selenium - Firefox Options
- Selenium - Safari Options
- Selenium - Double Click
- Selenium - Right Click
- HTML Report in Python
- Handling Edit Boxes
- Selenium - Single Elements
- Selenium - Multiple Elements
- Selenium Web Elements
- Selenium - File Upload
- Selenium - Locator Strategies
- Selenium - Relative Locators
- Selenium - Finders
- Selenium - Find All Links
- Selenium - User Interactions
- Selenium - WebElement Commands
- Selenium - Browser Interactions
- Selenium - Browser Commands
- Selenium - Browser Navigation
- Selenium - Alerts & Popups
- Selenium - Handling Forms
- Selenium - Windows and Tabs
- Selenium - Handling Links
- Selenium - Input Boxes
- Selenium - Radio Button
- Selenium - Checkboxes
- Selenium - Dropdown Box
- Selenium - Handling IFrames
- Selenium - Handling Cookies
- Selenium - Date Time Picker
- Selenium - Dynamic Web Tables
- Selenium - Actions Class
- Selenium - Action Class
- Selenium - Keyboard Events
- Selenium - Key Up/Down
- Selenium - Copy and Paste
- Selenium - Handle Special Keys
- Selenium - Mouse Events
- Selenium - Drag and Drop
- Selenium - Pen Events
- Selenium - Scroll Operations
- Selenium - Waiting Strategies
- Selenium - Explicit/Implicit Wait
- Selenium - Support Features
- Selenium - Multi Select
- Selenium - Wait Support
- Selenium - Select Support
- Selenium - Color Support
- Selenium - ThreadGuard
- Selenium - Errors & Logging
- Selenium - Exception Handling
- Selenium - Miscellaneous
- Selenium - Handling Ajax Calls
- Selenium - JSON Data File
- Selenium - CSV Data File
- Selenium - Excel Data File
- Selenium - Cross Browser Testing
- Selenium - Multi Browser Testing
- Selenium - Multi Windows Testing
- Selenium - JavaScript Executor
- Selenium - Headless Execution
- Selenium - Capture Screenshots
- Selenium - Capture Videos
- Selenium - Page Object Model
- Selenium - Page Factory
- Selenium - Record & Playback
- Selenium - Frameworks
- Selenium - Browsing Context
- Selenium - DevTools
- Selenium Grid Tutorial
- Selenium - Overview
- Selenium - Architecture
- Selenium - Components
- Selenium - Configuration
- Selenium - Create Test Script
- Selenium - Test Execution
- Selenium - Endpoints
- Selenium - Customizing a Node
- Selenium Reporting Tools
- Selenium - Reporting Tools
- Selenium - TestNG
- Selenium - JUnit
- Selenium - Allure
- Selenium & other Technologies
- Selenium - Java Tutorial
- Selenium - Python Tutorial
- Selenium - C# Tutorial
- Selenium - Javascript Tutorial
- Selenium - Kotlin Tutorial
- Selenium - Ruby Tutorial
- Selenium - Maven & Jenkins
- Selenium - Database Testing
- Selenium - LogExpert Logging
- Selenium - Log4j Logging
- Selenium - Robot Framework
- Selenium - AutoIT
- Selenium - Flash Testing
- Selenium - Apache Ant
- Selenium - Github Tutorial
- Selenium - SoapUI
- Selenium - Cucumber
- Selenium - IntelliJ
- Selenium - XPath
- Selenium Miscellaneous Concepts
- Selenium - IE Driver
- Selenium - Automation Frameworks
- Selenium - Keyword Driven Framework
- Selenium - Data Driven Framework
- Selenium - Hybrid Driven Framework
- Selenium - SSL Certificate Error
- Selenium - Alternatives
Selenium - TestNG
While we are running any automation tests using Selenium or any other tool, we will be required to view and analyze the results of the execution to conclude the number of tests which got executed, passed, failed, failure data, and so on in the form of reports.
Sometimes, the screenshots where the tests have undergone a failure are also captured in the reports. The test reports are also required to be shared with the project stakeholders on a periodic basis. For this purpose, we can take the help of the TestNG reports.
A TestNG report is a html report generated automatically once a test case built and run with the help of the TestNG. It is a unit testing framework which can be integrated with Selenium tests and used for reporting purposes.
In addition to this, the TestNG has a default reporting class called the Reporter which helps to log. This is useful in detecting the root cause of failure to debug the failed test.
Prerequisites to Create A TestNG Report
Install Java(version above 8) in the system and check if it is present with the command: java -version. The java version installed will be visible if installation has been completed successfully.
Install maven in the system and check if it is present with the command: mvn -version. The maven version installed will be visible if installation has been completed successfully.
Install any IDE like Eclipse, IntelliJ, and so on.
Add the TestNG dependencies from the link below: https://mvnrepository.com/artifact/.
Add the Selenium Java dependencies from the below link: selenium-java
Save the pom.xml with all the dependencies and update the maven project
What are the Different Ways to Generate TestNG Reports?
The difference ways to generate a TestNG report are listed below −
emailable-report.html
index.html report
Reporter class report
emailable-report.html
The steps to create an emailable-report.html are listed below −
Step 1 − Create a TestNG test class with the implementation of the below example where we will first click on the New User button on the Welcome Page.
Please note, we will run the test through the testng.xml file.

On clicking the New User button, we will be navigating to the Registration page, having the Welcome, Register text as shown in the below image.

Example
package Report; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.*; import java.util.concurrent.TimeUnit; import static org.testng.Assert.assertEquals; public class TestNGTest { WebDriver driver; @BeforeTest public void setup() throws Exception{ // Initiate browser driver driver = new ChromeDriver(); // adding implicit wait of 12 secs driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Opening the webpage driver.get("https://www.tutorialspoint.com/selenium/practice/login.php"); } @Test(priority = 1) public void verifyWelcomePageHeading() { // identify header then get text WebElement header = driver.findElement (By.xpath("//*[@id='signInForm']/h1")); String text = header.getText(); // assertion to verify login page header assertEquals("Welcome, Login In", text); } @Test(priority = 2) public void moveToRegisterPage() { // identify button then click WebElement btn = driver.findElement (By.xpath("//*[@id='signInForm']/div[3]/a")); btn.click(); } @Test(priority = 3) public void verifyRegisterPageHeading() { // identify header then get text WebElement heder = driver.findElement (By.xpath("//*[@id='signupForm']/h1")); String text = heder.getText(); // assertion to verify register page header assertEquals("Welcome,Register", text); } @AfterTest public void teardown() { // quitting browser driver.quit(); } }
Configurations in testng.xml file.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="All Test Suite"> <test verbose="2" preserve-order="true" name="TestNGTest.java"> <classes> <class name="Report.TestNGTest"> <methods> <include name="verifyWelcomePageHeading"/> <include name="moveToRegisterPage"/> <include name="verifyRegisterPageHeading"/> </methods> </class> </classes> </test> </suite>
Dependencies in pom.xml file.
<?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.example</groupId> <artifactId>SeleniumJava</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>16</maven.compiler.source> <maven.compiler.target>16</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.11.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.testng/testng --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.9.0</version> <scope>test</scope> </dependency> </dependencies> </project>
Project structure of the above implementation is shown in the below image −

We will run the test through the testng.xml.
Output
=============================================== All Test Suite Total tests run: 3, Passes: 3, Failures: 0, Skips: 0 =============================================== Process finished with exit code 0
We had taken help of the TestNG test framework, to create tests and retrieved the page headers and verified them with assertions.
The result in the console shows Total tests run: 3, as there are three methods with @Test annotations - verifyWelcomePageHeading(), moveToRegisterPage(), and verifyRegisterPageHeading().
Finally, the message Passes: 3, and Process finished with exit code 0 was received, signifying successful execution of the code.
Step 2 − Refresh the project and a new folder called the test-output should get generated in the project structure.

Step 3 − Right-click on the emailable-report.html and select the option to open in a browser.

The report will be opened in the browser showing the test class name - TestNGTest.java with total number passed, skipped, failed, duration of test, and so on.. Also, the test method names moveToRegisterPage, verifyRegisterPageHeading, and verifyWelcomePageHeading are also included in the report.
index.html report
The steps to create an index.html report are listed below −
Step 1 − Follow Step1 of the steps described to create emailable-report.html.
Step 2 − Refresh the project and a new folder called the test-output should get generated in the project structure.

Step 3 − Right-click on the index.html and select the option to open in a browser.

The report will be opened in the browser showing the testng.xml, number of test, groups, Times, Reporter output, ignored methods, and Chronological view. Also, the Results section contains the test method names moveToRegisterPage, verifyRegisterPageHeading, and verifyWelcomePageHeading with the number of methods, passed, and failed.
Report Generated From Reporter Class
TestNG gives the Reporter class for logging purposes. It has four different ways to handle the information for logging −
Reporter.log( String str);
Reporter.log( String str, Boolean logToOut);
Reporter.log( String str, int l);
Reporter.log( String str, int l, Boolean logToOut);
The steps to generate log messages in report with Reporter class are listed below −
Step 1 − Create a TestNG test class with the implementation of the below example where we will first click on the New User button on the Welcome Page.
Please note, we will run the test through the testng.xml file. Also, once the test is executed, we will have the below log messages in the reports −
Moving to Registration Page
Verified Login Page Header
Verified Register Page Header

On clicking the New User button, we will be navigating to the Registration page, having the Welcome, Register text as shown in the below image.

Please note, we will run the test through the testng.xml file. Also, once the test is executed, we will have the below log messages in the reports −
Moving to Registration Page
Verified Login Page Header
Verified Register Page Header
Example
package Report; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Reporter; import org.testng.annotations.*; import java.util.concurrent.TimeUnit; import static org.testng.Assert.assertEquals; public class TestNGTest { WebDriver driver; @BeforeTest public void setup() throws Exception{ // Initiate browser driver driver = new ChromeDriver(); // adding implicit wait of 12 secs driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Opening the webpage driver.get("https://www.tutorialspoint.com/selenium/practice/login.php"); } @Test(priority = 1) public void verifyWelcomePageHeading() { // identify header then get text WebElement header = driver.findElement(By.xpath("//*[@id='signInForm']/h1")); String text = header.getText(); // assertion to verify login page header assertEquals("Welcome, Login In", text); Reporter.log("Verified Login Page header"); } @Test(priority = 2) public void moveToRegisterPage() { // identify button then click WebElement btn = driver.findElement(By.xpath("//*[@id='signInForm']/div[3]/a")); btn.click(); Reporter.log("Moving to Registration Page"); } @Test(priority = 3) public void verifyRegisterPageHeading() { // identify header then get text WebElement heder = driver.findElement(By.xpath("//*[@id='signupForm']/h1")); String text = heder.getText(); // assertion to verify register page header assertEquals("Welcome,Register", text); Reporter.log("Verified Register Page header"); } @AfterTest public void teardown() { // quitting browser driver.quit(); } }
Step 2 − Refresh the project and a new folder called the test-output should get generated in the project structure.
Step 3 − Right-click on the emailable-report.html and index.html to select the option to open in a browser.
The below emailable-report.html report should open in the browser showing the test class name - TestNGTest.java with total number passed, skipped, failed, duration of test, and so on. Also, the test method names moveToRegisterPage, verifyRegisterPageHeading, and verifyWelcomePageHeading are also included in the report.
At the lower section in the report, the logging messages along with the test method names were visible.

The below index.html report should open in the browser showing the testng.xml, number of test, groups, Times, Reporter output, ignored methods, and Chronological view. Also, the Results section contains the test method names moveToRegisterPage, verifyRegisterPageHeading, and verifyWelcomePageHeading with the number of methods, passed, and failed.
On clicking the Reporter output tab in the left, the logging messages along with the test method names were visible.

The below link provides a detailed description of TestNG: TestNG
This concludes our comprehensive take on the tutorial on Selenium - TestNG Report. Weve started with describing a TestNG report, prerequisites to set up a TestNG report, and walked through steps to create a different types of TestNG reports like emailable-report.html, index.html, and reports with Reporter class with an example illustrating how to use them along with Selenium. This equips you with in-depth knowledge of the TestNG report. It is wise to keep practicing what youve learned and exploring others relevant to Selenium to deepen your understanding and expand your horizons.