简体   繁体   中英

How to read multiple sets of value in the excel sheet using DataProvider in Selenium WebDriver with Java and TestNG

I'm fairly new to Selenium WebDriver. I wrote code to read the login credentials and values from the excel sheet by using Data Provider. It runs through the first set up data(login functionality) perfectly giving me the green status bar.

In my application, after login, I want to select values by sending index and Selection(In Administration Method) from the same excel sheet but I failed to read values. For hard coded values its working fine.

can anyone please give me the idea how to write it. Used Excel Sheet:

Below is my code:

import java.io.File;

import jxl.Sheet;
import jxl.Workbook;

import org.testng.annotations.BeforeSuite;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.junit.AfterClass;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//import org.testng.annotations.BeforeClass;

public class TestCase {

String[][] tabArray = null;
Workbook workbk;
Sheet sheet;
int rowCount, colCount;
String sheetPath = "test/Resources/Data/Auto_Increment.xls";
WebDriver login;
//int eRow, eCol, sRow = 0, sCol = 0;


@BeforeSuite
public void setUp(){
    login = new FirefoxDriver();
    login.get("http://etazo.tangosoftware.com");
    System.out.println("select the etazo web link..");
}

@DataProvider
public Object[][] getLoginData() throws Exception {
    Object[][] retObjArr = getExcelData(sheetPath, "Sheet1");
    System.out.println("getData function executed!!");
    return retObjArr;
}

//  Excel API to read test data from excel workbook
public String[][] getExcelData(String xlPath, String shtName)
        throws Exception {
    Workbook workbk = Workbook.getWorkbook(new File(xlPath));
    Sheet sht = workbk.getSheet(shtName);
    rowCount = sht.getRows();
    colCount = sht.getColumns();
    tabArray = new String[rowCount][colCount - 2];
    System.out.println("erow: " + rowCount);
    System.out.println("ecol: " + colCount);
    for (int i = 0; i < rowCount; i++) {
        for (int j = 0; j < 3; j++) {
            tabArray[i][j] = sht.getCell(j, i).getContents();
        }
    }
    return (tabArray);
}

@Test(dataProvider = "getLoginData")
public void LoginData(String distID, String asmtId, String studID)
        throws InterruptedException, BiffException, IOException {
    Administartion(distID, asmtId, studID);
}
public void Administartion(String distID, String asmtId, String studID)
        throws BiffException, IOException {
    Workbook workbk = Workbook.getWorkbook(new File(sheetPath));
    Sheet sht = workbk.getSheet("Sheet1");
    int currRow = sht.findCell(studID).getRow();
    //login.findElement(By.xpath("//*[@id='question-"+sIndex+"']/bubbles/circle["+sValue+"]")).click();     
    System.out.println(sht.getCell(3, currRow).getContents() + " Index ");
    System.out.println(sht.getCell(4, currRow).getContents() + " Answer selection");
}

}

edited the code. Now this will fetch all the records.

And your excel sheet should look something similar to this:在此处输入图片说明

import java.io.File;
import java.io.IOException;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestClass {
    String[][] tabArray = null;
    Workbook workbk;
    Sheet sheet;
    int rowCount, colCount;
    String sheetPath = "D:\\Download\\Auto_Increment.xls";

    // Excel API to read test data from excel workbook
    public String[][] getExcelData(String xlPath, String shtName)
            throws Exception {
        Workbook workbk = Workbook.getWorkbook(new File(xlPath));
        Sheet sht = workbk.getSheet(shtName);
        rowCount = sht.getRows();
        colCount = sht.getColumns();
        tabArray = new String[rowCount][colCount - 2];
        System.out.println("erow: " + rowCount);
        System.out.println("ecol: " + colCount);
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < 3; j++) {
                tabArray[i][j] = sht.getCell(j, i).getContents();
            }
        }
        return (tabArray);
    }

    @DataProvider
    public Object[][] getLoginData() throws Exception {
        Object[][] retObjArr = getExcelData(sheetPath, "Sheet1");
        System.out.println("getData function executed!!");
        return retObjArr;
    }

    @Test(dataProvider = "getLoginData")
    public void LoginData(String distID, String asmtId, String studID)
            throws InterruptedException, BiffException, IOException {
        Administartion(distID, asmtId, studID);
    }

    public void Administartion(String distID, String asmtId, String studID)
            throws BiffException, IOException {
        Workbook workbk = Workbook.getWorkbook(new File(sheetPath));
        Sheet sht = workbk.getSheet("Sheet1");
        int currRow = sht.findCell(studID).getRow();
        System.out.println(sht.getCell(3, currRow).getContents() + " Index ");
        System.out.println(sht.getCell(4, currRow).getContents() + " Answer selection");
    }
}

Dependencies used:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.13</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.13</version>
</dependency>

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
    <scope>test</scope>
</dependency>

Code goes here to read xlsx file:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestDataProvider {
    static File resultFile = new File(“PATH OF THE EXCEL”);
    public static DataFormatter formatter = new DataFormatter();

    @Test(dataProvider = "readExcelFile")
    public static void test1(String slNum, String name, String Address, String email) throws  IOException {
        System.out.println(slNum+" "+ name+" "+Address + " "+email);

    FURTHER CODE GOES HERE


    }

    @DataProvider
    public static Object[][] readExcelFile() throws InvalidFormatException, IOException {
        FileInputStream fis = new FileInputStream(resultFile);
        XSSFWorkbook wb = new XSSFWorkbook(fis);
        XSSFSheet sh = wb.getSheet(“SHEET NAME”);

        System.out.println(sh.getPhysicalNumberOfRows());
        System.out.println(sh.getRow(0).getPhysicalNumberOfCells());
        int RowNum = sh.getPhysicalNumberOfRows();
        int ColNum = sh.getRow(0).getPhysicalNumberOfCells();

        String[][] xlData = new String[RowNum-1][ColNum];

        for (int i = 0; i < RowNum - 1; i++) 
        {
            XSSFRow row = sh.getRow(i + 1);
            for (int j = 0; j < ColNum; j++) 
            {
                if (row == null)
                    xlData[i][j] = "";
                else {
                    XSSFCell cell = row.getCell(j);                 
                    if (cell == null)
                        xlData[i][j] = ""; 
                    else {
                        String value = formatter.formatCellValue(cell);
                        xlData[i][j] = value.trim();                        
                    }
                }
            }
        }       
        return xlData;
    }   
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM