Skip to main content

Selenium - Data Driven Testing

In Automation, we need to runs scripts to test the same functionality with different types of data. This data is usually stored in an excel file and accessed via the script to enter in the Application Under Test.
In QTP, this is done using the DataTable
In Selenium we can use the Apache POI API to do read an excel workbook and write the output to the excel file.

Using the API is quite simple if you understand the basics.
POI - Poor Obfuscation Implementation. This name was humorously given  because Microsoft code was deliberately made difficult to reverse engineer but still it was reverse engineered.

POIFS - Poor Obfuscation Implementation File System. Used to access the input file.

HSSF - Horrible Spreadsheet Format This is used to read and write .xls files

XSSF - XML Spreadsheet Format This is used to read and write .xlsx files.


FileInputStream fs=new FileInputStream("C:\\Users\\Krishna\\selenium workspace\\Data\\firstone.xls");
POIFSFileSystem poi=new POIFSFileSystem(fs);
HSSFWorkbook hw=new HSSFWorkbook(poi);
HSSFSheet hs=hw.getSheet("Global");
Object data[][]=new Object[2][2];
System.out.println(hs.getLastRowNum());// last row number in excel
System.out.println(hs.getPhysicalNumberOfRows());//number of physically defined rows
System.out.println(hs.getRow(0).getLastCellNum()); // last cell number in row
System.out.println(hs.getRow(0).getPhysicalNumberOfCells()); // number of physically defined cells
for(int i=1;i<=hs.getLastRowNum();i++){
for(int j=0;j<hs.getRow(0).getLastCellNum();j++)
{
data[i-1][j]=hs.getRow(i).getCell(j).toString();
System.out.println(data[i-1][j]);
}
}
fs.close();

Use with Junit:
@Parameters
public static Collection<Object[]>(){
return Arrays.asList(data);
//data should be declared static in this case
}
The above code can be used to read data from excel sheet and store it in the object data array.
To understand the code remember the following hierarchy.

Access File -> Open the accessed file using POIFSFileSystem class -> Access the HSSFWorkBook workbook in the POIFSFileSystem -> Access the HSSFSheet sheet in the workbook using getSheet(sheetname) -> Access the row in the sheet using getRow(rownumber) -> Access the cell in the row using getCell(cellnumber)

getLastRowNum () gets the number last row on the sheet. Owing to idiosyncrasies in the excel file format, if the result of calling this method is zero, you can't tell if that means there are zero rows on the sheet, or one at position zero. For that case, additionally call getPhysicalNumberOfRows() to tell if there is a row at position zero or not.





Comments

Popular posts from this blog

Selenium Grid - Distributed Systems

Selenium grid is powerful and can be easily used with just few lines of code. A Grid is a network of computers which can be heterogeneous and geographically dispersed. A Selenium Grid is how a grid of computers are connected using Selenium and configured to perform a task. A task typically here is running a suite of test cases with different browsers in different platforms across geographically dispersed systems. The test cases can be run in parallel using Selenium. So if we have a grid of three computers the same set of test cases can be run in IE, Firefox and Chrome. To establish this we have three important components. 1) Hub 2) Node 3) Test Script A Hub acts like the server to which requests are sent . The Hub sends to request to various registered nodes. The HUB can be instantiated using command line by using the selenium server standalone jar file. Open command prompt, navigate to the folder which has the selenium server file and use this command. java -jar selen...

Transition from Test Automation Engineer to Test Engineer

What's the difference? Test Automation Engineer works on automating the Regression Test Suite. Test Engineer ensures the product can be released to the customer. With my industry experience, I have realized, that, as part of automation engineer your job duties don't stop with creating Automation tests, Frameworks and running them. With more tests being automated, your responsibilities not only include running the complete Regression suite but occasionally validation and verification of the product. There are different documents/sites defining different types of testing and where their usage, however,but finding bugs is a different skill. Though we are testers by role, our analytical minds work like developers as we develop scripts too. We could be biased. When something doesn't work, we look for a workaround and think it's no big deal. This attitude is a deal breaker!Instead use your skills to analyse and break the code. Here I am going to list some of my ideas ...

Switch between browsers\windows and pop ups

These commands can be used to switch between windows, iterate through different windows opened by the webdriver, handle pop ups and frames in windows.  GetWindowHandle Command Purpose : To get the   window handle   of the current window. driver.getWindowHandle(); Returns an alphanumeric string GetWindowHandles Command Purpose : To get the   window handle   of   all   the current windows. Set<String> handle=Driver.getWindowHandles(); Returns a set of window handles SwitchTo Window Command Purpose : WebDriver supports   moving   between named windows using the “switchTo” method. For(String handle:driver.getWindowHandles()) Driver.switchto().window(handle); Or Driver.switchto().window(windowname); <A href="newwindow.html" target=" windowname ">click here for a new window </A> SwitchTo Frame Command Purpose : WebDriver supports moving between frames using the “ switchTo ” method. Driver.s...