Today in this article we will mainly discuss how to implement data driven framework in selenium webdriver using TestNG data provider.We have so many frameworks like Keyword driven framework, Hybrid Framework, POM that is Page object model and data driven framework, each framework having its own feature so we need to decide which framework to choose for this project.
I created Youtube Video for the same
Data driven framework in selenium webdriver
This framework purely depends on data and data source can be anything like Excel file, CSV File, database.
In data driven framework script will be separated from Data part, it means so if any changes happen we do not have to modify all the test cases.
Example-
I have to create 50 Gmail accounts so I have two approaches to do this
First- I can create 50 scripts and run them.
Second- I can keep all the data separate in the file and changes the data only that is required for script and script will be only one. In future, any changes in my application then I have to modify my one script only not the scripts.
In simple words when we have to execute the same script with multiple sets of data we will adopt data driven framework
In this post, we are taking data from 2D Array and passing the data into script.
Note- If you are not aware of Arrays then I would suggest you to watch Array’s video first which will help you to understand framework easily.
Scenario 1- Open Facebook and type username and password and login
this test case should run 2 times with different set of data(data we have provided in the 2D array)
Lest Implement the same
package DataDrivenTesting;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestDDT {
// this will take data from dataprovider which we created
@Test(dataProvider="testdata")
public void TestFireFox(String uname,String password){
// Open browsre
WebDriver driver=new FirefoxDriver();
// Maximize browser
driver.manage().window().maximize();
// Load application
driver.get("http://www.facebook.com");
// clear email field
driver.findElement(By.id("email")).clear();
// Enter usename
driver.findElement(By.id("email")).sendKeys(uname);
// Clear password field
driver.findElement(By.id("pass")).clear();
// Enter password
driver.findElement(By.id("pass")).sendKeys(password);
}
// this is DataProvider which actually feed data to our test cases here I have taken 2 D //array with 2 rows and 2 column it means. It will run our test case two times because we //have taken 2 rows. While first iteration this will pass username and password to test //case and in second iteration perform the same for second rows
@DataProvider(name="testdata")
public Object[][] TestDataFeed(){
// Create object array with 2 rows and 2 column- first parameter is row and second is //column
Object [][] facebookdata=new Object[2][2];
// Enter data to row 0 column 0
facebookdata[0][0]="Selenium1@gmail.com";
// Enter data to row 0 column 1
facebookdata[0][1]="Password1";
// Enter data to row 1 column 0
facebookdata[1][0]="Selenium2@gmail.com";
// Enter data to row 1 column 0
facebookdata[1][1]="Password2";
// return arrayobject to testscript
return facebookdata;
}
}
Data driven framework in selenium webdriver using Excel files
In above post, we have seen data driven using 2D array but once your test data will increase then you have to switch to Excel or CSV or Database.
Create some test data in Excel that we will pass to the script. For demo purpose, I have to take username and password in Excel.
Point to keep in mind before creating data driven framework in selenium webdriver
Before implement the program please make sure you are familiar with Reading Data from Excel.
Try to implement below program and before executing make sure following Thing configured correctly.
Eclipse, TestNG, JExcel or Apache POI
Scenario -Open Facebook and login with different username and password
username and password will be coming from excel sheet
Note- in below program we have 2 rows only so test case will execute 2 times with different data
package DataDrivenTesting;
import java.io.File;
import java.io.IOException;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestDDT1 {
WebDriver driver;
Workbook wb;
Sheet sh1;
int numrow;
String username;
String password;
@BeforeTest
public void Setup()
{
driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://www.facebook.com");
}
@Test(dataProvider="testdata")
public void TestFireFox(String uname,String password1)
{
driver.findElement(By.id("email")).clear();
driver.findElement(By.id("email")).sendKeys(uname);
driver.findElement(By.id("pass")).clear();
driver.findElement(By.id("pass")).sendKeys(password1);
}
@DataProvider(name="testdata")
public Object[][] TestDataFeed(){
try {
// load workbook
wb=Workbook.getWorkbook(new File("location of excel sheet/fbdata.xls"));
// load sheet in my case I am referring to first sheet only
sh1= wb.getSheet(0);
// get number of rows so that we can run loop based on this
numrow= sh1.getRows();
}
catch (Exception e)
{
e.printStackTrace();
}
// Create 2 D array and pass row and columns
Object [][] facebookdata=new Object[numrow][sh1.getColumns()];
// This will run a loop and each iteration it will fetch new row
for(int i=0;i<numrow;i++){
// Fetch first row username
facebookdata[i][0]=sh1.getCell(0,i).getContents();
// Fetch first row password
facebookdata[i][1]=sh1.getCell(1,i).getContents();
}
// Return 2d array object so that test script can use the same
return facebookdata;
}
@AfterTest
public void QuitTC(){
// close browser after execution
driver.quit();
}
}
I hope you have enjoyed the data driven framework in selenium webdriver and Hope you will implement the same. If you still have any doubt then let me know in the comment section. You can implement the same data driven framework using POM (Page Object model ) which will be the advanced version of data driven framework in selenium webdriver.
Kindly share this with your friends as well.