We use DataProvider with external data to run the same test many times with different inputs. This helps check many cases without writing repeated code.
0
0
DataProvider with external data in Selenium Java
Introduction
Testing login with many username and password pairs.
Checking form submission with different sets of data.
Validating search functionality with various keywords.
Running tests with data stored in files like Excel or CSV.
Syntax
Selenium Java
import org.testng.annotations.DataProvider; @DataProvider(name = "dataName") public Object[][] dataMethod() { return new Object[][] { {"data1", "data2"}, {"data3", "data4"} }; }
The method annotated with @DataProvider returns a 2D Object array.
Each inner array represents one set of test data.
Examples
Simple DataProvider with two username-password pairs.
Selenium Java
import org.testng.annotations.DataProvider; @DataProvider(name = "loginData") public Object[][] loginData() { return new Object[][] { {"user1", "pass1"}, {"user2", "pass2"} }; }
DataProvider reading data from a CSV file line by line.
Selenium Java
import org.testng.annotations.DataProvider; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List; @DataProvider(name = "csvData") public Object[][] csvData() throws Exception { List<Object[]> data = new ArrayList<>(); BufferedReader br = new BufferedReader(new FileReader("data.csv")); String line; while ((line = br.readLine()) != null) { String[] parts = line.split(","); data.add(parts); } br.close(); return data.toArray(new Object[0][]); }
Sample Program
This test runs twice with different usernames and passwords. It checks if the password ends with '123'.
Selenium Java
import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*; public class LoginTest { @DataProvider(name = "loginData") public Object[][] loginData() { return new Object[][] { {"admin", "admin123"}, {"guest", "guest123"} }; } @Test(dataProvider = "loginData") public void testLogin(String username, String password) { System.out.println("Testing login with: " + username + ", " + password); // Simulate login success if password ends with '123' assertTrue(password.endsWith("123")); } }
OutputSuccess
Important Notes
Always name your DataProvider methods clearly to match their purpose.
When reading external files, handle exceptions properly to avoid test failures.
Use assertions inside the test method to verify expected behavior for each data set.
Summary
DataProvider lets you run one test many times with different data.
You can provide data directly in code or read from external files like CSV.
This helps test many cases easily and keeps tests clean.