Получение данных из нескольких таблиц с использованием провайдера данных TestNG - PullRequest
0 голосов
/ 23 сентября 2011

Я использую Selenium RC с TestNG, чтобы провести какое-то тестирование на основе ключевых слов. Для этой же цели я хочу прочитать некоторые данные из таблицы Excel и использовать их. Здесь я использовал аннотацию провайдера данных TestNG. Но моя проблема является то, что я хочу читать данные из нескольких таблиц и использовать их в одном методе тестирования с использованием только одного поставщика данных. Но у меня возникают проблемы в этом. Может ли кто-нибудь помочь мне в этом.

Спасибо

Вот мой код:

@DataProvider(name = "DP1")

public Object[][] createData1() throws Exception {

  return new Object[][] {

    {getTableData.getTableArray(" Xls File Path", "Sheet name", "Table1")},

    {getTableData.getTableArray(" Xls File Path", "Sheet name", "Table2")}

  };

}

Это мой метод испытаний:

@Test (dataProvider = ("DP1"))

public void testallpivot(String Command, String Target, String Value) throws Exception {

  //Test Code here


}

Но этот код показывает индекс массива вне пределов исключения. Кто-нибудь, пожалуйста, помогите мне .....

Ну вот как выглядит getTableArray ..

public static Object[][] getTableArray(String xlFilePath, String sheetName, String     tableName) throws Exception{
    Object[][] tabArray;

        Workbook workbook = Workbook.getWorkbook(new File(xlFilePath));
        Sheet sheet = workbook.getSheet(sheetName); 
        int startRow,startCol, endRow, endCol,ci,cj;
        Cell tableStart=sheet.findCell(tableName);
        //System.out.println(tableName);
        startRow=tableStart.getRow();
        startCol=tableStart.getColumn();

        Cell tableEnd= sheet.findCell(tableName, startCol+1,startRow+1, 100, 64000,  false);                

        endRow=tableEnd.getRow();
        endCol=tableEnd.getColumn();
        System.out.println("startRow="+startRow+", endRow="+endRow+", " +
                "startCol="+startCol+", endCol="+endCol);
        tabArray=new String[endRow-startRow-1][endCol-startCol-1];
        ci=0;

        for (int i=startRow+1;i<endRow;i++,ci++){
            cj=0;
            for (int j=startCol+1;j<endCol;j++,cj++){
                tabArray[ci][cj]=sheet.getCell(j,i).getContents();
            }
        }


    return(tabArray);
}

А это трассировка стека .....

java.lang.ArrayIndexOutOfBoundsException: 1
at org.testng.internal.Invoker.injectParameters(Invoker.java:1144)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1020)
atorg.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:137)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:121)
at org.testng.TestRunner.runWorkers(TestRunner.java:953)
at org.testng.TestRunner.privateRun(TestRunner.java:633)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:316)
at org.testng.SuiteRunner.run(SuiteRunner.java:195)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:903)
at org.testng.TestNG.runSuitesLocally(TestNG.java:872)
at org.testng.TestNG.run(TestNG.java:780)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:75)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:127)

Ответы [ 3 ]

0 голосов
/ 10 октября 2011

вы можете вернуть только один массив, скопировав второй в первый.Попробуйте что-то вроде:

List<Object[]>  retVal = Arrays.asList
    (getTableData.getTableArray(" Xls File Path", "Sheet name", "Table1"));
retVal.addAll(
    Arrays.asList(getTableData.getTableArray(" Xls File Path", "Sheet name", "Table2")));
return retVal.toArray();
0 голосов
/ 18 марта 2013

Если вы откроете лист Excel во время выполнения кода, эта ошибка найдена. Перед выполнением контрольных примеров убедитесь, что вы сохранили и закрыли файл Excel.

0 голосов
/ 25 сентября 2011

Мы ничем не поможем, если вы не включите трассировку стека, а также то, что возвращает getTableArray () (это должен быть Object []).

...