@DataProvider in TestNG: How to Run a Test Case multiple times with different Values as Input

Print View Mobile View

In our last topic we saw how to use the @Parameters annotation. Now we are going to learn about @DataProvider annotation.

In TestNG, there’s a concept known as data driven testing, which allows testers to automatically run a test case multiple times, with different input and validation values. A good example of this is, suppose, you have to test thousands of forms using automation. You’d want to pass complex parameters or parameters that need to be created from Java, in such cases parameters can be passed using Dataproviders.

In the below code, we are using @DataProvider as a source for login credentials for Facebook. Test case will be executed twice as there are two sets of accounts provided for test.

File: DataProviderDemo.java

package TestNGDemo;

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.Test;
import org.testng.annotations.DataProvider;
public class DataProviderDemo {
	private static WebDriver driver;
	@DataProvider(name = "FB_Login")
	public static Object[][] credentials() {
		return new Object[][] { { "[email protected]", "Test@123" }, { "[email protected]", "123@Test" }};
	// Here we are calling the Data Provider object with its Name
	@Test(dataProvider = "FB_Login")
	public void test(String uname, String password) {
		// Set path of Chrome Driver
		System.setProperty("webdriver.chrome.driver", "C:\\Files\\chromedriver.exe");
		// Create a new instance of Chrome driver
		driver = new ChromeDriver();

		// Open Google

		System.out.println("Logging in user: "+uname);		

		// Find Search field
		WebElement user = driver.findElement(By.id("email"));
		// Type in keyword for search

		WebElement pass = driver.findElement(By.id("pass"));
		// Type in keyword for search
		// Prints in console

		// Clicks on search button
		// Close Google Chrome