Selenium Framework

How to Create Data Driven Framework in Selenium Webdriver in easy way

Data driven framework in selenium webdriver

Today in this article we will mainly discuss how to implement data driven framework in selenium webdriver using TestNG data provider.Data driven framework in selenium webdriverWe 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.

 

author-avatar

About Mukesh Otwani

I am Mukesh Otwani working professional in a beautiful city Bangalore India. I completed by BE from RGPV university Bhopal. I have passion towards automation testing since couple of years I started with Selenium then I got chance to work with other tools like Maven, Ant, Git, GitHub, Jenkins, Sikuli, Selenium Builder etc.