Data Driven TestNG从excel传递参数

时间:2016-01-07 11:37:55

标签: java selenium selenium-webdriver testng testng-dataprovider

我正在尝试使用TestNG使用数据驱动方法从excel传递参数。我的代码运行正常,但是,当我的测试到达该部分时,参数将被传递到我的表单上的字段,它们没有被传入。我的代码在下面打开excel阅读等。我的代码测试代码。由于我一直在Google工作表中创建电子表格并导出到xlsx,因此我没有安装excel。我想知道我的问题是我是不是没有安装excel所以文件无法打开和读取然后传入的参数?

package utility;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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;

    public class ExcelUtils {

            private static XSSFSheet ExcelWSheet;

            private static XSSFWorkbook ExcelWBook;

            private static XSSFCell Cell;

            private static XSSFRow Row;



   public static void setExcelFile(String Path,String SheetName) throws Exception {

               try {



                    FileInputStream ExcelFile = new FileInputStream(Path);



                    ExcelWBook = new XSSFWorkbook(ExcelFile);

                    ExcelWSheet = ExcelWBook.getSheet(SheetName);

                    } catch (Exception e){

                        throw (e);

                    }

            }

        public static Object[][] getTableArray(String FilePath, String SheetName, int iTestCaseRow)    throws Exception

        {   

           String[][] tabArray = null;

           try{

               FileInputStream ExcelFile = new FileInputStream(FilePath);



               ExcelWBook = new XSSFWorkbook(ExcelFile);

               ExcelWSheet = ExcelWBook.getSheet(SheetName);

               int startCol = 1;

               int ci=0,cj=0;

               int totalRows = 1; //Number of total rows in Data Sheet

               int totalCols = 3; //Number of columns in Data Sheet - Columns start from 0

               tabArray=new String[totalRows][totalCols];

                   for (int j=startCol;j<=totalCols;j++, cj++)

                   {

                       tabArray[ci][cj]=getCellData(iTestCaseRow,j);

                       System.out.println(tabArray[ci][cj]);

                   }

            }

            catch (FileNotFoundException e)

            {

                System.out.println("Could not read the Excel sheet");

                e.printStackTrace();

            }

            catch (IOException e)

            {

                System.out.println("Could not read the Excel sheet");

                e.printStackTrace();

            }

            return(tabArray);

        }



        public static String getCellData(int RowNum, int ColNum) throws Exception{

           try{

              Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum);

              String CellData = Cell.getStringCellValue();

              return CellData;

              }catch (Exception e){

                return"";

                }

            }

        public static String getTestCaseName(String sTestCase)throws Exception{

            String value = sTestCase;

            try{

                int posi = value.indexOf("@");

                value = value.substring(0, posi);

                posi = value.lastIndexOf(".");  

                value = value.substring(posi + 1);

                return value;

                    }catch (Exception e){

                throw (e);

                        }

            }

        public static int getRowContains(String sTestCaseName, int colNum) throws Exception{

            int i;

            try {

                int rowCount = ExcelUtils.getRowUsed();

                for ( i=0 ; i<rowCount; i++){

                    if  (ExcelUtils.getCellData(i,colNum).equalsIgnoreCase(sTestCaseName)){

                        break;

                    }

                }

                return i;

                    }catch (Exception e){

                throw(e);

                }

            }

        public static int getRowUsed() throws Exception {

                try{

                    int RowCount = ExcelWSheet.getLastRowNum();

                    return RowCount;

                }catch (Exception e){

                    System.out.println(e.getMessage());

                    throw (e);

                }

            }

}

测试代码如下:

package utility;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;

import java.util.concurrent.TimeUnit;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.DataProvider;

public class DataProviderWithExcel_001 {

    private String sTestCaseName;

    private int iTestCaseRow;

    WebDriver driver;

    private static Logger logger1 = LogManager.getLogger("Logger1");

    @BeforeMethod
      public void beforeMethod() {

         DOMConfigurator.configure("log4j.xml");

          driver = new FirefoxDriver();

          logger1.info("New Instance of firefox created");
          //Add wait to allow web elements to load

          driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

          logger1.info("Timeout Applied for 10 seconds to Allow Load of Elements");
          //Launch FireFoxDriver - Open WebPage

          driver.get("http://localhost/2010A15/");

          logger1.info("Website Launched");
          Reporter.log("Website Lauched Successfully  | "); //Main Event Logger/Report 

    }

  @Test(dataProvider = "Authentication")
  public void f(String sUsername, String sPassword, String sMemorableWord)  {



    //Find Login Element
      driver.findElement(By.id("WEB_LoginButton")).click();

      logger1.info("Login Button Clicked");
      //Find User name Element

      driver.findElement(By.id("dijit_form_ValidationTextBox_1")).sendKeys(sUsername);

      logger1.info("Username Entered");

      //Find Password Element

      driver.findElement(By.id("dijit_form_ValidationTextBox_2")).sendKeys(sPassword);

      logger1.info("Password Entered");

      //Find Memorable word Element

      driver.findElement(By.id("dijit_form_ValidationTextBox_3")).sendKeys(sMemorableWord);

      logger1.info("MemorableWord Entered");

      Reporter.log("All Login Details Entered  | "); //Main Event

      WebElement  login = driver.findElement(By.id("dijit_form_Button_1_label"));


      //If statement - will check if element is Displayed before clicking on login button.
      if(login.isDisplayed()){
          login.click();
          //Main Event is logged If Passed
          Reporter.log("Login Form Submitted  | ");
          logger1.info("Submit Button Clicked");
      }else{  

          Reporter.log("Login Failed  | ");
          Assert.fail("Login Failed - Check Data | ");
          //Main Event Log Fail  
         }  




    WebElement logout = driver.findElement(By.id("dijit_form_Button_0_label"));

    if(logout.isDisplayed()){
        logout.click();
    Reporter.log("Logout Successful  | ");
    }else {
        Reporter.log("Logout Failed");
        Assert.fail("Logout Failed - Check Data | ");
    }


    logger1.info("Logout Successful");


  }





  @AfterMethod
  public void afterMethod() {

     driver.close();
  }


  @DataProvider
  public Object[][] Authentication() throws Exception {

      // Setting up the Test Data Excel file

        ExcelUtils.setExcelFile("C://Selenium-java-maven//workSpace//Practice-test//src//testData//TestData.xlsx","Sheet1");

        sTestCaseName = this.toString();

        // From above method we get long test case name including package and class name etc.

        // The below method will refine your test case name, exactly the name use have used

        sTestCaseName = ExcelUtils.getTestCaseName(this.toString());

        // Fetching the Test Case row number from the Test Data Sheet

        // Getting the Test Case name to get the TestCase row from the Test Data Excel sheet

        iTestCaseRow = ExcelUtils.getRowContains(sTestCaseName,0);

        Object[][] testObjArray = ExcelUtils.getTableArray("C://Selenium-java-maven//workSpace//Practice-test//src//testData//TestData.xlsx","Sheet1",iTestCaseRow);

            return (testObjArray);

        }
}

1 个答案:

答案 0 :(得分:0)

测试用例名称与excel文件中的测试名称不匹配。