Module 20 - TestNG Frame Work | Selenium Forum
M
Posted on 23/08/2016
Hi I am trying to retrieve the record from Excel Sheet using "DataProvider annotation" but i am getting [b:nm4mchp3]"ArrayIndexOutOfBoundsException"[/b:nm4mchp3] i tried my best but not understand that where i am wrong so please suggest me where i am wrong.

[b:nm4mchp3]Project & Excell Sheet is also Attached.[/b:nm4mchp3]

[b:nm4mchp3]Code :-[/b:nm4mchp3]

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestA {


@Test(dataProvider="getdata")
public void testA(String RunMode, String col1,String col2, String col3,String col4){

}

@DataProvider
public Object[][]getdata(){


Xls_Reader xls = new Xls_Reader("D:\\DataTestNG.xlsx");
//String sheetName="Data";
String testCasename="TestB";

int testStartRowNum =1;

while(!xls.getCellData("TestData", 0, testStartRowNum).equals(testCasename)){
testStartRowNum++;

//String str= Integer.toString(testStartRowNum);
//System.out.println(str);

}
System.out.println("Test Start From " +testStartRowNum);

//************************ Calculate rows of data************************

int colStartRowNum = testStartRowNum+1; //0+1=1
int dataStartRowNum= testStartRowNum+2; //0+2=2
int rows=0;
while(!xls.getCellData("TestData", 0, dataStartRowNum+rows).equals("")){
rows++;
}
System.out.println("Total Rows -- > " +rows);


//**********************Calculate column of data**************************

int column=0;
while(!xls.getCellData("TestData", column, colStartRowNum).equals("")){
column++;
}
System.out.println("Total Coloumns are -- > " +column);


Object[][] data = new Object[rows][column];


//************************ Read the data from Excel*****************************

int rowData=0;
for(int rNum=testStartRowNum;rNum<dataStartRowNum+rows;rNum++){
for(int cNum=0;cNum<column;cNum++){
//System.out.println(xls.getCellData("TestData", colNum, rowNum));
[b:nm4mchp3] data[rowData][cNum]=xls.getCellData("TestData",cNum,rNum);[/b:nm4mchp3] <<---->> [b:nm4mchp3]Issue Come on this line.[/b:nm4mchp3]
}
rowData++;
}
return data;
}

}

M
Replied on 24/08/2016

send me the entire stack trace.


M
Replied on 24/08/2016

[b:1gpgqxip]Here is the Complete Stack Trace [/b:1gpgqxip]:-


[TestNG] Running:
C:\Users\TI01266\AppData\Local\Temp\testng-eclipse--2115654991\testng-customsuite.xml

Test Start From 7
Total Rows -- > 2
Total Coloumns are -- > 5
TestB




RunMode
Col1
Col2
Col3
Col4
Y
SKIPPED: testA
java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException: 2
at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:162)
at org.testng.internal.Parameters.handleParameters(Parameters.java:430)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1270)
at org.testng.internal.Invoker.createParameters(Invoker.java:985)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1075)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:774)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
at org.testng.SuiteRunner.run(SuiteRunner.java:261)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1048)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:152)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:57)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
at TestA.getdata(TestA.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:136)
... 20 more


===============================================
Default test
Tests run: 1, Failures: 0, Skips: 1
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 1
===============================================

[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@7c3b99: 7 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 11 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@724356: 44 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@151574b: 6 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@886462: 49 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@3f3b9b: 6 ms


M
Replied on 24/08/2016

data starts with zero

try this
data[rowData-1][cNum-1]=xls.getCellData("TestData",cNum,rNum); <<---->> Issue Come on this line.

or some other version of this like
data[rowData][cNum-1]
you'll have try which works..


M
Replied on 24/08/2016

Hi Ashish,
I tried with both but still facing the same issue.

[b:1pkqemjt]Stack Trace[/b:1pkqemjt] :-


[TestNG] Running:
C:\Users\TI01266\AppData\Local\Temp\testng-eclipse-1470431781\testng-customsuite.xml

Test Start From 7
Total Rows -- > 2
Total Coloumns are -- > 5
TestB
SKIPPED: testA
java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException: -1
at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:162)
at org.testng.internal.Parameters.handleParameters(Parameters.java:430)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1270)
at org.testng.internal.Invoker.createParameters(Invoker.java:985)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1075)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:774)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
at org.testng.SuiteRunner.run(SuiteRunner.java:261)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1048)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:152)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:57)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
at TestA.getdata(TestA.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:136)
... 20 more


===============================================
Default test
Tests run: 1, Failures: 0, Skips: 1
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 1
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1a2d3be: 55 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 10 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@76800e: 42 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@2cef66: 6 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@1626c6d: 5 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@13a1324: 6 ms


M
Replied on 24/08/2016

do this also

data[rowData-1][cNum]


M
Replied on 24/08/2016

Hi Ashish,
I tried it but still facing same issue. Responsive image

Code :-

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestA {


@Test(dataProvider="getdata")
public void testA(String RunMode, String col1,String col2, String col3,String col4){

}

@DataProvider
public Object[][]getdata(){

Xls_Reader xls = new Xls_Reader("D:\\DataTestNG.xlsx");
//String sheetName="Data";
String testCasename="TestB";

int testStartRowNum =1;

while(!xls.getCellData("TestData", 0, testStartRowNum).equals(testCasename)){
testStartRowNum++;

}
System.out.println("Test Start From " +testStartRowNum);

//************************ Calculate rows of data************************

int colStartRowNum = testStartRowNum+1; //0+1=1
int dataStartRowNum= testStartRowNum+2; //0+2=2
int rows=0;
while(!xls.getCellData("TestData", 0, dataStartRowNum+rows).equals("")){
rows++;
}
System.out.println("Total Rows -- > " +rows);


//**********************Calculate column of data**************************

int cols=0;
while(!xls.getCellData("TestData", cols, colStartRowNum).equals("")){
cols++;
}
System.out.println("Total Coloumns are -- > " +cols);


Object[][] data = new Object[rows][cols];


//************************ Read the data from Excel*****************************

int rowData=0;
for(int rNum=testStartRowNum;rNum<dataStartRowNum+rows;rNum++){
for(int cNum=0;cNum<cols;cNum++){
System.out.println(xls.getCellData("TestData", cNum,rNum));
[b:veq2ryty]data[rowData-1][cNum]=xls.getCellData("TestData",cNum,rNum);[/b:veq2ryty] <------>
}
rowData++;
}
return data;
}

}

[b:veq2ryty]Stack Trace :-[/b:veq2ryty]



[TestNG] Running:
C:\Users\TI01266\AppData\Local\Temp\testng-eclipse-1560889565\testng-customsuite.xml

Test Start From 7
Total Rows -- > 2
Total Coloumns are -- > 5
TestB
SKIPPED: testA
java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException: -1
at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:162)
at org.testng.internal.Parameters.handleParameters(Parameters.java:430)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1270)
at org.testng.internal.Invoker.createParameters(Invoker.java:985)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1075)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:774)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
at org.testng.SuiteRunner.run(SuiteRunner.java:261)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1048)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:152)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:57)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
at TestA.getdata(TestA.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:136)
... 20 more


===============================================
Default test
Tests run: 1, Failures: 0, Skips: 1
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 1
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1a2d3be: 35 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 7 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@76800e: 26 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@2cef66: 4 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@1626c6d: 48 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@13a1324: 4 ms


M
Replied on 24/08/2016

[color=#FF0000:3oygkmcq]Object[][] data = new Object[rows][column];

[/color:3oygkmcq]

print the value of rows and column
[color=#FF0000:3oygkmcq]data[rowData][cNum]=xls.getCellData("TestData",cNum,rNum); <------>
}[/color:3oygkmcq]

print the the value of rowData and cNum(in for loop).
and run the program. and send a screen shot


M
Replied on 26/08/2016

Hi below is the Output of the value. So please suggest where i am wrong.


import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestA {


@Test(dataProvider="getdata")
public void testA(String RunMode, String col1,String col2, String col3,String col4){

}

@DataProvider
public Object[][]getdata(){

Xls_Reader xls = new Xls_Reader("D:\\DataTestNG.xlsx");
//String sheetName="Data";
String testCasename="TestB";

int testStartRowNum =1;

while(!xls.getCellData("TestData", 0, testStartRowNum).equals(testCasename)){
testStartRowNum++;

}
System.out.println("Test Start From " +testStartRowNum);

//************************ Calculate rows of data************************

int colStartRowNum = testStartRowNum+1; //0+1=1
int dataStartRowNum= testStartRowNum+2; //0+2=2
int rows=0;
while(!xls.getCellData("TestData", 0, dataStartRowNum+rows).equals("")){
rows++;
}
System.out.println("Total Rows -- > " +rows);


//**********************Calculate column of data**************************

int cols=0;
while(!xls.getCellData("TestData", cols, colStartRowNum).equals("")){
cols++;
}
System.out.println("Total Coloumns are -- > " +cols);


Object[][] data = new Object[rows][cols];


//************************ Read the data from Excel*****************************

int rowData=1;
for(int rNum=testStartRowNum;rNum<dataStartRowNum+rows;rNum++){
for(int cNum=0;cNum<cols;cNum++){
System.out.println(xls.getCellData("TestData", cNum,rNum));
data[rowData-1][cNum]= xls.getCellData("TestData",cNum,rNum);
}
rowData++;
}
return data;
}

}

[b:wfynld7x]ScreenShot attached[/b:wfynld7x]

Responsive image

M
Replied on 26/08/2016

system.out.print(rowData+""+cNum);
put this in for loop



//************************ Read the data from Excel*****************************

int rowData=1;
for(int rNum=testStartRowNum;rNum<dataStartRowNum+rows;rNum++){
for(int cNum=0;cNum<cols;cNum++){
[color=#FF0000:1jyitrs2]system.out.print(rowData+""+cNum);
[/color:1jyitrs2]
System.out.println(xls.getCellData("TestData", cNum,rNum));
data[rowData-1][cNum]= xls.getCellData("TestData",cNum,rNum);
}
rowData++;
}
return data;
}

}


M
Replied on 26/08/2016

Hi Ashish,
Issue Resolve. Updated Code is below


import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TEST {


@Test(dataProvider="getdata")
public void testA(String RunMode, String col1,String col2, String col3,String col4){

}

@DataProvider
public Object[][]getdata(){

Xls_Reader xls = new Xls_Reader("D:\\DataTestNG.xlsx");
//String sheetName="Data";
String testCasename="TestB";

int testStartRowNum =1;

while(!xls.getCellData("TestData", 0, testStartRowNum).equals(testCasename)){
testStartRowNum++;

}
System.out.println("Test Start From " +testStartRowNum); ///// 7

//************************ Calculate rows of data************************

int colStartRowNum = testStartRowNum+1; //0+1=1 ////////////8
int dataStartRowNum= testStartRowNum+2; //0+2=2 /////////// 9
int rows=0;
while(!xls.getCellData("TestData", 0, dataStartRowNum+rows).equals("")){
rows++;
}
System.out.println("Total Rows -- > " +rows); //////2


//**********************Calculate column of data**************************

int cols=0;
while(!xls.getCellData("TestData", cols, colStartRowNum).equals("")){
cols++;
}
System.out.println("Total Coloumns are -- > " +cols);


Object[][] data = new Object[rows][cols];


//************************ Read the data from Excel*****************************

int rowData=1;
[b:364av1hy]for(int rNum=dataStartRowNum;rNum<dataStartRowNum+rows;rNum++)[/b:364av1hy]{ -----> [b:364av1hy]rNum should be dataStartRowNum[/b:364av1hy]previously i used "[b:364av1hy]testStartRowNum[/b:364av1hy]"dueto that issue occur.
for(int cNum=0;cNum<cols;cNum++){
System.out.print(rowData+""+cNum);
System.out.println(xls.getCellData("TestData", cNum,rNum));
data[rowData-1][cNum]=xls.getCellData("TestData",cNum,rNum);
}
rowData++;
}
return data;
}}

[b:364av1hy]SCREEN SHOT ATTACHED[/b:364av1hy]

Responsive image

M
Replied on 29/08/2016

can you contact me on skype now?