2011-09-23 61 views
0

我正在使用Selenium RC和TestNG做一些類似的關鍵字驅動的測試。爲了同樣的目的,我想從Excel表中讀取一些數據並使用它。在這裏我已經使用過TestNG.Data的數據提供者註釋。但我的問題是,我想從多個表中讀取數據,並在僅使用一個數據提供者的單一測試方法中使用它們。但我遇到了問題。可以幫助我這樣做。使用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 


} 

但是這個代碼是顯示綁定異常的數組索引.. 有人請幫我.....

那麼這是怎麼getTableArr唉..看起來

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) 
+0

只要數組指向一個不存在的數組,就會發生數組索引超出限制......可能是,我們必須檢查for循環中的增量以解決此問題。 –

回答

0

我們不能幫你多少,如果你不包括堆棧跟蹤,也什麼getTableArray( )返回(它應該是Object [])。

+0

正如我所說的,getTableArray需要因爲您要在數據提供程序中返回一個getTableArray()數組,因此會創建一個三元數組(Object [] [] [])。 –

+0

確定反黑組fine..but我在這裏的問題是,爲什麼它的工作很好,當我從喜歡存款保險計劃... @dataProvider(NAME =「DP1」) \t 公共對象[] [] createData單個表取數據( )拋出異常{ \t \t對象[] [] = retObjArr getTableData \t \t \t \t .getTableArray( XLS文件路徑」, 「SHEETNAME」, 「表1」); \t \t \t \t \t \t \t \t return(retObjArr); \t} –

+0

因爲在這種情況下,您並未將getTableArray()返回的值包裝在數組中。 –

0

通過將第二個複製到第一個,您可以只返回一個數組。嘗試類似:

​​
+0

嘿謝謝你的建議,但它的力量工作fr我..它也顯示相同的問題.. :( –

-1

如果您在執行代碼時打開Excel工作表,則會發現此錯誤。請確保在執行測試用例之前保存並關閉excel文檔。