How to Use TestNG Framework for Creating Selenium Scripts – TestNG Selenium Tutorial #12

In the last few tutorials, we shed light on the basic and commonly used WebDriver commands. We also learned about the locating strategies of UI elements and their inclusion in the test scripts. And therefore, we developed our very first WebDriver Automation Test Script.

Moving ahead with this tutorial, we would discuss all about TestNG, its features and its applications.

TestNG is an advance framework designed in a way to leverage the benefits by both the developers and testers. For people already using JUnit, TestNG would seem no different with some advance features. With the commencement of the frameworks, JUnit gained an enormous popularity across the Java applications, Java developers and Java testers, with remarkably increasing the code quality.

Selenium TestNG Framework

See also => JUnit Tutorial and its usage in Selenium scripts

Despite being an easy to use and straightforward framework, JUnit has its own limitations which give rise to the need of bringing TestNG into the picture. TestNG was created by an acclaimed programmer named as “Cedric Beust”. TestNG is an open source framework which is distributed under the Apache software License and is readily available for download.

Talking about our requirement to introduce TestNG with WebDriver is that it provides an efficient and effective test result format that can in turn be shared with the stake holders to have a glimpse on the product’s/application’s health thereby eliminating the drawback of WebDriver’s incapability to generate test reports. TestNG has an inbuilt exception handling mechanism which lets the program to run without terminating unexpectedly.

Both TestNG and JUnit belong to the same family of Unit Frameworks where TestNG is an extended version to JUnit and is more extensively used in the current testing era.

Features of TestNG

  • Support for annotations
  • Support for parameterization
  • Advance execution methodology that do not require test suites to be created
  • Support for Data Driven Testing using Dataproviders
  • Enables user to set execution priorities for the test methods
  • Supports threat safe environment when executing multiple threads
  • Readily supports integration with various tools and plug-ins like build tools (Ant, Maven etc.), Integrated Development Environment (Eclipse).
  • Facilitates user with effective means of Report Generation using ReportNG

TestNG versus JUnit

There are various advantages that make TestNG superior to JUnit. Some of them are:

  • Advance and easy annotations
  • Execution patterns can be set
  • Concurrent execution of test scripts
  • Test case dependencies can be set

Annotations are preceded by a “@” symbol in both TestNG and JUnit.

So now let us get started with the installation and implementation part.

TestNG Installation in Eclipse

Follow the below steps to TestNG Download and installation on eclipse:

Step 1: Launch eclipse IDE -> Click on the Help option within the menu -> Select “Eclipse Marketplace..” option within the dropdown.

Selenium TestNG tutorial 1

Step 2: Enter the keyword “TestNG” in the search textbox and click on “Go” button as shown below.

Selenium TestNG tutorial 2

Step 3: As soon as the user clicks on the “Go” button, the results matching to the search string would be displayed. Now user can click on the Install button to install TestNG.

Selenium TestNG tutorial 3

Step 4: As soon as the user clicks on the Install button, the user is prompted with a window to confirm the installation. Click on “Confirm” button.

Selenium TestNG tutorial 4

Step 5: In the next step, the application would prompt you to accept the license and then click on the “Finish” button.

Step 6: The installation is initiated now and the progress can be seen as following:

Selenium TestNG tutorial 5

We are advised to restart our eclipse so as to reflect the changes made.

Upon restart, user can verify the TestNG installation by navigating to “Preferences” from “Window” option in the menu bar. Refer the following figure for the same.

Selenium TestNG tutorial 6

(Click on image to view enlarged)

Selenium TestNG tutorial 7

Creation of Sample TestNG project

Let us begin with the creation of TestNG project in eclipse IDE.

Step 1: Click on the File option within the menu -> Click on New -> Select Java Project.

Selenium TestNG tutorial 8

Step 2: Enter the project name as “DemoTestNG” and click on “Next” button. As a concluding step, click on the “Finish” button and your Java project is ready.

Selenium TestNG tutorial 9

Step 3: The next step is to configure the TestNG library into the newly created Java project. For the same, Click on the “Libraries” tab under Configure Build Path. Click on “Add library” as shown below.

Selenium TestNG tutorial 10

Step 4: The user would be subjected with a dialog box promoting him/her to select the library to be configured. Select TestNG and click on the “Next” button as shown below in the image. In the end, click on the “Finish” button.

Selenium TestNG tutorial 11

The TestNG is now added to the Java project and the required libraries can be seen in the package explorer upon expanding the project.

Selenium TestNG tutorial 12

Add all the downloaded Selenium libraries and jars in the project’s build path as illustrated in the previous tutorial.

Creating TestNG class

Now that we have done all the basic setup to get started with the test script creation using TestNG. Let’s create a sample script using TestNG.

Step 1: Expand the “DemoTestNG” project and traverse to “src” folder. Right click on the “src”package and navigate to New -> Other..

Selenium TestNG tutorial 13

Step 2: Expand TestNG option and select “TestNG” class option and click on the “Next” button.

Selenium TestNG tutorial 14

Step 3: Furnish the required details as following. Specify the Source folder, package name and the TestNG class name and click on the Finish button. As it is evident from the below picture, user can also check various TestNG notations that would be reflected in the test class schema. TestNG annotations would be discussed later in this session.


Selenium TestNG tutorial 15

The above mentioned TestNG class would be created with the default schema.

Selenium TestNG tutorial 16

Now that we have created the basic foundation for the TestNG test script, let us now inject the actual test code. We are using the same code we used in the previous session.

Scenario:

  • Launch the browser and open “gmail.com”.
  • Verify the title of the page and print the verification result.
  • Enter the username and Password.
  • Click on the Sign in button.
  • Close the web browser.

Code:

 package TestNG;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;

public class DemoTestNG {
       public WebDriver driver = new FirefoxDriver();
       String appUrl = "https://accounts.google.com";

@Test
public void gmailLogin() {
             // launch the firefox browser and open the application url
              driver.get("https://gmail.com");
             
// maximize the browser window
              driver.manage().window().maximize();
             
// declare and initialize the variable to store the expected title of the webpage.
              String expectedTitle = " Sign in - Google Accounts ";
             
// fetch the title of the web page and save it into a string variable
              String actualTitle = driver.getTitle();
              Assert.assertEquals(expectedTitle,actualTitle);
             
// enter a valid username in the email textbox
              WebElement username = driver.findElement(By.id("Email"));
              username.clear();
              username.sendKeys("TestSelenium");

// enter a valid password in the password textbox
              WebElement password = driver.findElement(By.id("Passwd"));
              password.clear();
              password.sendKeys("password123");
             
// click on the Sign in button
              WebElement SignInButton = driver.findElement(By.id("signIn"));
              SignInButton.click();
             
// close the web browser
              driver.close();
}
} 

Code Explanation with respect to TestNG

1) @Test – @Test is one of the TestNG annotations. This annotation lets the program execution to know that method annotated as @Test is a test method. To be able to use different TestNG annotations, we need to import the package “import org.testng.annotations.*”.

2) There is no need of main() method while creating test scripts using TestNG. The program execution is done on the basis of annotations.

3) In a statement, we used Assert class while comparing expected and the actual value. Assert class is used to perform various verifications. To be able to use different assertions, we are required to import “import org.testng.Assert”.

Executing the TestNG script

The TestNG test script can be executed in the following way:

=> Right click anywhere inside the class within the editor or the java class within the package explorer, select “Run As” option and click on the “TestNG Test”.

Selenium TestNG tutorial 17

TestNG result is displayed into two windows:

  • Console Window
  • TestNG Result Window

Refer the below screencasts for the result windows:

Selenium TestNG tutorial 18

(Click on image to view enlarged)

Selenium TestNG tutorial 19

HTML Reports

TestNG comes with a great capability of generating user readable and comprehensible HTML reports for the test executions. These reports can be viewed in any of the browser and it can also be viewed using Eclipse’s build –in browser support.

To generate the HTML report, follow the below steps:

Step 1: Execute the newly created TestNG class. Refresh the project containing the TestNG class by right clicking on it and selecting “Refresh” option.

Step 2: A folder named as “test-output” shall be generated in the project at the “src” folder level. Expand the “test-output” folder and open on the “emailable-report.html” file with the Eclipse browser. The HTML file displays the result of the recent execution.

Selenium TestNG tutorial 20

Selenium TestNG tutorial 21

Step 3: The HTML report shall be opened with in the eclipse environment. Refer the below image for the same.

Selenium TestNG tutorial 22

Refresh the page to see the results for fresh executions if any.

Setting Priority in TestNG

Code Snippet

 package TestNG;
import org.testng.annotations.*;
public class SettingPriority {

@Test(priority=0)
public void method1() {
 }

@Test(priority=1)
public void method2() {
 }

@Test(priority=2)
public void method3() {
 }
} 

Code Walkthrough

If a test script is composed of more than one test method, the execution priority and sequence can be set using TestNG annotation “@Test” and by setting a value for the “priority” parameter.

In the above code snippet, all the methods are annotated with the help @Test and the priorities are set to 0, 1 and 2. Thus the order of execution in which the test methods would be executed is:

  • Method1
  • Method2
  • Method3

Support for Annotations

There are number of annotations provided in TestNG and JUnit. The subtle difference is that TestNG provides some more advance annotations to JUnit.

TestNG Annotations:

Following is the list of the most useful and favorable annotations in TestNG:

AnnotationDescription
@TestThe annotation notifies the system that the method annotated as @Test is a test method
@BeforeSuiteThe annotation notifies the system that the method annotated as @BeforeSuite must be executed before executing the tests in the entire suite
@AfterSuiteThe annotation notifies the system that the method annotated as @AfterSuite must be executed after executing the tests in the entire suite
@BeforeTestThe annotation notifies the system that the method annotated as @BeforeTest must be executed before executing any test method within the same test class
@AfterTestThe annotation notifies the system that the method annotated as @AfterTest must be executed after executing any test method within the same test class
@BeforeClassThe annotation notifies the system that the method annotated as @BeforeClass must be executed before executing the first test method within the same test class
@AfterClassThe annotation notifies the system that the method annotated as @AfterClass must be executed after executing the last test method within the same test class
@BeforeMethodThe annotation notifies the system that the method annotated as @BeforeMethod must be executed before executing any and every test method within the same test class
@AfterMethodThe annotation notifies the system that the method annotated as @AfterMethod must be executed after executing any and every test method within the same test class
@BeforeGroupsThe annotation notifies the system that the method annotated as @BeforeGroups is a configuration method that enlists a group and that must be executed before executing the first test method of the group
@AfterGroupsThe annotation notifies the system that the method annotated as @AfterGroups is a configuration method that enlists a group and that must be executed after executing the last test method of the group

Note: Many of the aforementioned annotations can be exercised in JUnit 3 and JUnit 4 framework also.

Conclusion

Through this tutorial, we tried to make you acquainted with a java based testing framework named as TestNG. We started off the session with the installation of the framework and moved with the script creation and advance topics. We discussed all the annotations provided by TestNG. We implemented and executed our first TestNG test script using annotations and assert statements.

Article summary:

  • TestNG is an advance framework designed in a way to leverage the benefits by both the developers and testers.
  • TestNG is an open source framework which is distributed under the Apache software License and is readily available for download.
  • TestNG is considered to be superior to JUnit because of its advance features.
  • Features of TestNG
    • Support for Annotations
    • Advance execution methodology that do not require test suites to be created
    • Support for parameterization
    • Support for Data Driven Testing using Dataproviders
    • Setting execution priorities for the test methods
    • Supports threat safe environment when executing multiple threads
    • Readily supports integration with various tools and plug-ins like build tools (Ant, Maven etc.), Integrated Development Environment (Eclipse).
    • Facilitates user with effective means of Report Generation using ReportNG
  • Advantages of TestNG over JUnit
    • Added advance and easy annotations
    • Execution patterns can be set
    • Concurrent execution of test scripts
    • Test case dependencies can be set
  • TestNG is freely available and can be easily installed in the Eclipse IDE using Eclipse Market.
  • Upon installation, TestNG would be available as a library within the Eclipse environment.
  • Create a new Java Project and configure the build path using TestNG library.
  • Create a new TestNG class by expanding the created TestNG project and traverse to its “src” folder. Right click on the “src” package and navigate to New -> Other. Select TestNG class option.
  • @Test is one of the annotations provided by TestNG. This annotation lets the program execution to know that method annotated as @Test is a test method. To be able to use different TestNG annotations, we need to import the package “import org.testng.annotations.*”.
  • There is no need of main() method while creating test scripts using TestNG.
  • We use Assert class while comparing expected and the actual value. Assert class is used to perform various verifications. To be able to use different assertions, we are required to import “import org.testng.Assert”.
  • If a test script is composed of more than one test methods, the execution priority and sequence can be set using TestNG annotation “@Test” and by setting a value for the “priority” parameter.
  • TestNG has a capability of generating human readable test execution reports automatically. These reports can be viewed in any of the browser and it can also be viewed using Eclipse’s built – in browser support.

Next Tutorial #13: Moving ahead with the upcoming tutorials in the Selenium series, we would concentrate on handling the various types of web elements available on the web pages. Therefore, in the next tutorial, we would concentrate our focus on “dropdowns” and will exercise their handling strategies. We would also discuss about WebDriver’s Select class and its methods to select values in the dropdowns.

A remark for the readers: While our next tutorial of the Selenium series is in the processing mode, readers can start creating their own basic WebDriver scripts using TestNG framework.

For more advance scripts and concepts, include as many annotations and assertions in your TestNG classes and execute them using TestNG environment. Also analyze the HTML reports generated by TestNG.




Recommended reading

61 comments ↓

#1 Shilpa Kamble

excellent as usual with real examples. very helpful. thanks.

#2 Shruti Shrivastava

@Shipa

Thank You…:)

#3 krishna kumar

thanx a lot for wonderfull session.

#4 Shruti Shrivastava

@Krishna

Thank you for your kind words.
Keep Learning….

#5 Edko

I am trying to run testNG on Eclipse without sucess.

Here what i get:

org.testng.TestNGException:
Cannot instantiate class onetestngpackage.TestNGFirst
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:38)
at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:387)
at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:299)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:110)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:186)
at org.testng.internal.TestNGClassFinder.(TestNGClassFinder.java:120)
at org.testng.TestRunner.initMethods(TestRunner.java:409)
at org.testng.TestRunner.init(TestRunner.java:235)
at org.testng.TestRunner.init(TestRunner.java:205)
at org.testng.TestRunner.(TestRunner.java:160)
at org.testng.remote.RemoteTestNG$1.newTestRunner(RemoteTestNG.java:141)
at org.testng.remote.RemoteTestNG$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG.java:271)
at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:561)
at org.testng.SuiteRunner.init(SuiteRunner.java:157)
at org.testng.SuiteRunner.(SuiteRunner.java:111)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1299)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1286)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29)
… 21 more
Caused by: java.lang.NoClassDefFoundError: com/google/common/base/Function
at onetestngpackage.TestNGFirst.(TestNGFirst.java:12)
… 26 more
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Function
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
… 27 more

Please help to solve this problem

#6 Tonny

Thank u very much shruthy , looking for introduction to start selenium,plz add more about scripting

#7 Richie Gulati

Thank You Shruti..You have made my Selenium life easy:)

#8 vabhu

Hi,

I am using Nunit i.e.in C3 language.
Will you tell me how to generate results in Nunit.
Do u know any idea about that??

#9 vabhu

Corrections,I am using C# language.

#10 Divya

Im getting the result in console & it is passed too. But on refreshing the project testoutput folder is not created.Is there any configuration to be done.Some one please help us here.

#11 Muhammed Ak

Shruti,
You have mentioned “Concurrent execution of test scripts” is an advantage of TestNG. Could you please explain with an example.

#12 Ashish

It was a wonderful session….Thnx :-)

#13 Ayush

Thank u so much…

#14 Ankur Tyagi

Nice Session on TestNG.

#15 Ravi

As usual ! Wonderful Article on TestNG. God bless you !!!

#16 Hemakumar

it’s really awesome session

#17 raju

I getting Error

org.testng.TestNGException:
Cannot instantiate class TestNG.DemoTestNG
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:38)
at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:387)
at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:299)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:110)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:186)
at org.testng.internal.TestNGClassFinder.(TestNGClassFinder.java:120)
at org.testng.TestRunner.initMethods(TestRunner.java:409)
at org.testng.TestRunner.init(TestRunner.java:235)
at org.testng.TestRunner.init(TestRunner.java:205)
at org.testng.TestRunner.(TestRunner.java:160)
at org.testng.remote.RemoteTestNG$1.newTestRunner(RemoteTestNG.java:141)
at org.testng.remote.RemoteTestNG$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG.java:271)
at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:561)
at org.testng.SuiteRunner.init(SuiteRunner.java:157)
at org.testng.SuiteRunner.(SuiteRunner.java:111)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1299)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1286)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29)
… 21 more
Caused by: java.lang.NoClassDefFoundError: com/google/common/base/Function
at TestNG.DemoTestNG.(DemoTestNG.java:10)
… 26 more
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Function
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
… 27 more

#18 Padmavathi

Hi,this session is help full.can u provide help on testing.xml also.iam in need of that.

#19 Sajid

Thanks guys great tutorial keep up the good work

The sample TestNG code has some error please use the one below I have corrected the missing quotes. Make sure you change the email and password to a valid one before executing

package TestNG;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;

public class DemoTest {
public WebDriver driver = new FirefoxDriver();
String appUrl = “https://accounts.google.com”;

@Test
public void gmailLogin() {
//launch the firefox browser and open the application url
driver.get(“https://accounts.google.com”);

// maximize the browser window
driver.manage().window().maximize();

// declare and initialize the variable to store the expected title of the webpage.
String expectedTitle = “Sign in – Google Accounts”;

// fetch the title of the web page and save it into a string variable
String actualTitle = driver.getTitle();
Assert.assertEquals(expectedTitle,actualTitle);

// enter a valid username in the email textbox
WebElement username = driver.findElement(By.id(“Email”));
username.clear();
username.sendKeys(“TestSelenium”);

// enter a valid password in the password textbox
WebElement password = driver.findElement(By.id(“Passwd”));
password.clear();
password.sendKeys(“password123”);

// click on the Sign in button
WebElement SignInButton = driver.findElement(By.id(“signIn”));
SignInButton.click();

// close the web browser
driver.close();
}
}

#20 Kumar

Can u please give one example about Setting Priority in TestNG.

#21 Ankita Rai

Thank you so much!!!
Really helpful…

#22 anonymous

whenever or always i visit to your site for explaination, and everytime i come her i am left speechless with the kind of material i see.
As i Einstein quoted once “a genius is a person who can explain a very long and complex thing in a single and simple lines”.
Well i would like to compliment the author with the same lines.
Thanks for this article.

#23 parthiban b

After i completed all steps but “Plug-in org.testng.eclipse was unable to load class org.testng.eclipse.ui.TestRunnerViewPart.” error trigger in TestNG view

#24 parthiban b

pls give any solution to resolve this

#25 Anji

Let me know the Best sites for Selenium Frame work learnings

#26 Amar

Thanks for Explaining selenium basics.

#27 Sairam

It is very useful but can you provide the information about XML file like how to create TestNG XML file and how to integrate multiple TestNG classes in one XML file…..

#28 Subash

How to install TestNG on eclipse

#29 Amandeep

Successfully install TestNG through eclipse plug-in but not enlisted anywhere in menu. Plz help it occured in Eclipse Kepler.

#30 Prateek

Hi,

I am not able to install TestNG plugin from Eclipse’s market place due to some proxy restrictions. Is there any other way to install it by offline mode?
Any help would be appreciated

Thanks
Prateek

#31 Rahul

Hi Pratek,
As far as i know TestNG cannot be installed offline. You will need to install it for using the framework. Install via eclipse market place is one option. Please try connecting to an open network so that you can download it.

#32 anilsharma

At the time of TestNG run it is showing error msg.

Error: Could not find or load main class org.testng.remote.RemoteTestNG

#33 Chetan M

hi i just want to know the diff between @before method and @beforetest method of testng i.m bit confused with the above statements

#34 umesh

I am trying to run testNG on Eclipse without sucess.

Here what i get:

org.testng.TestNGException:
Cannot instantiate class onetestngpackage.TestNGFirst
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:38)
at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:387)
at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:299)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:110)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:186)
at org.testng.internal.TestNGClassFinder.(TestNGClassFinder.java:120)
at org.testng.TestRunner.initMethods(TestRunner.java:409)
at org.testng.TestRunner.init(TestRunner.java:235)
at org.testng.TestRunner.init(TestRunner.java:205)
at org.testng.TestRunner.(TestRunner.java:160)
at org.testng.remote.RemoteTestNG$1.newTestRunner(RemoteTestNG.java:141)
at org.testng.remote.RemoteTestNG$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG.java:271)
at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:561)
at org.testng.SuiteRunner.init(SuiteRunner.java:157)
at org.testng.SuiteRunner.(SuiteRunner.java:111)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1299)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1286)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29)
… 21 more
Caused by: java.lang.NoClassDefFoundError: com/google/common/base/Function
at onetestngpackage.TestNGFirst.(TestNGFirst.java:12)
… 26 more
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Function
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
… 27 more

Please help to solve this problem

#35 umesh

@Sajid
Your code is also not working..!!!

#36 Pavan

Good tutorial to start with TestNG

#37 Hamsini

Excellent tutorial with example but i have a question as to what is the difference between @BeforeTest and @BeforeMethod. It looks like both execute the same way.. Could you please explain on this?

#38 Kumar

ITs really a nice and easy walkthrough tutorial.Really appreaciate your work.

#39 Anuya

Excellent explanation.

#40 Aradhya

Fantastic…Good Article

#41 Sathish

Dear Admin,

Nice topic. Very useful. But am getting error like “com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘ DB name . Table Name’ doesn’t exist.

Kindly assit Please help. ASAP

#42 Tom Delmonte

Love all the information available, very complete and easy to understand.

Would like to volunteer to help improve the writing, there are several grammar errors spread across all pages, for example the beginning of this page (Tutorial 12) states:
TestNG is an advance (should be ‘advanced’) framework designed in a way to leverage the (remove) benefits by (should be ‘for’) both the developers and testers. For people already using JUnit, TestNG would seem no different with some advance (should be ‘advanced’) features.

#43 keshav

I am getting below output, while trying to run my java code using TestNG,

[TestNG] Running:
C:\Users\keshavd\AppData\Local\Temp\testng-eclipse–82361108\testng-customsuite.xml

[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\Default suite\Default test.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\Default suite exists: true
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\Default suite\Default test.xml
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\Default suite exists: true

===============================================
Default test
Tests run: 0, Failures: 0, Skips: 0
===============================================

===============================================
Default suite
Total tests run: 0, Failures: 0, Skips: 0
===============================================

[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\toc.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\Default test.properties
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\index.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\main.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\groups.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\classes.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\reporter-output.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\methods-not-run.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Problem creating output directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\Default suite\testng.xml.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old\Default suite exists: true
[Utils] Attempting to create C:\Users\keshavd\workspace\Practice\test-output\old\index.html
[Utils] Directory C:\Users\keshavd\workspace\Practice\test-output\old exists: true
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@ec3615b: 28 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@61129920: 3 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@65113ac8: 1 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@7342f820: 2 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@2653a1b3: 30 ms

It is not not working for me.

Please help

#44 Anuradha

I am also facing the same issue as keshav does, please help in resolving the same.

#45 Tushar

Thanks its really been very useful stuff for me.it is a good tutorial

#46 Prashanth

Excellent Explanation…..Really it is very helpfull for TestNG beginers…Thank you..

#47 swati

Good Article …Thanks

#48 Saurabh Gupta

Thanks a lot for sharing this post for beginner…

#49 mydhili

very nice explanation.
here is the example using priority parameter

import org.testng.annotations.Test;
public class testNGPriorityExample {
@Test
public void registerAccount()
{
System.out.println(“First register your account”);
}
@Test(priority=2)
public void sendEmail()
{
System.out.println(“Send email after login”);
}
@Test(priority=1)
public void login()
{
System.out.println(“Login to the account after registration”);
}
}

#50 Engy Elkafrawy

thank you so much for this amazing article it helped me a lot to start with TestNG .

#51 Anup Keshari Panda

I am unable to write code for radio buttons in testNG framework. So kindly any body can suggest the process of operating radio button operation in testNG framework in selenium

#52 saurav kumar

Hello,
Can i implement keyword driven and data driven framework using testng .

#53 vikas

Please post the instructions to copy paste this code in eclipse as I am not able to run the same. It is giving so many errors

#54 ashwini

Thank you shruthi, but please add more scripts ,add more information about how to use testNG, update it, then it is more & more helpfull.

#55 fatima

Finally i done with code for TestNG

code i tried is

package TestNg;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class tesTingf {
//public String app2 = “https://accounts.google.com/”;
public String app2=”https://accounts.google.com/”;
public WebDriver driver;
@Test
public void gmailLogin() {
//launch the firefox browser and open the application url
System.setProperty(“webdriver.gecko.driver”,”C:\\geckodriver-v0.15.0-win64\\geckodriver.exe”);

driver = new FirefoxDriver();
driver.get(app2);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

// maximize the browser window
driver.manage().window().maximize();

// declare and initialize the variable to store the expected title of the webpage.
String expectedTitle = “Sign in – Google Accounts”;

// fetch the title of the web page and save it into a string variable
String actualTitle = driver.getTitle();
Assert.assertEquals(expectedTitle,actualTitle);

// enter a valid username in the email textbox
WebElement username = driver.findElement(By.id(“Email”));
username.clear();
username.sendKeys(“TestSelenium”);
WebElement next = driver.findElement(By.id(“next”));
next.click();

// enter a valid password in the password textbox
WebElement password = driver.findElement(By.id(“Passwd”));
password.clear();
password.sendKeys(“password123”);

// click on the Sign in button
//WebElement SignInButton = driver.findElement(By.id(“signIn”));
WebElement SignInButton = driver.findElement(By.id(“signIn”));

SignInButton.click();

// close the web browser
driver.close();
}
}

#56 Anand

Simply Superb..!!! Great Work by the author. Much appreciated.

#57 Sherlin

Very Good Information!! Thanks a lot for your efforts!

Really it will be helpful for both beginners and experienced professional. Your information is very clear.

Along with your post, I put my input here.

There are number of benefits but from Selenium perspective, major advantages of TestNG are :

It gives the ability to produce HTML Reports of execution
Annotations made testers life easy
Test cases can be Grouped & Prioritized more easily
Parallel testing is possible
Generates Logs
Data Parameterization is possible

#58 Rakshu

Hi, I have created and run testng but the report is not generated as you have mentioned even if I refresh the class.

#59 Rakshu

Sorry, made a mistake.. it is working when refresh the entire project.

#60 richa

Hi

Shruti mam,

Could you please send me selenium tutorials in single pdf or doc as link is not opening in my company due to some Business restriction .

Regards
Richa

#61 Jatin

Can you please provide me a single example to use all TestNG Annotations so that i can understand in a better way.

Leave a Comment