0

I am using below code for data provider but it's not working. Please help to me how to resolve data provider mismatch issue. here mentioned complete details about all the methods reading xls , test , data provider .

@DataProvider
    public Object[][] getgbTestData(){
        Object data[][] = testutil.getTestData(sheetName);
        return data;
    }

    @Test(dataProvider="getgbTestData")
    public void addnewuser(String fname,String lname,String email,String pass,String conpass) throws IOException{

        newuser.newregistration1(fname, lname, email, pass, conpass);

        }

**method:**
public Personaldetails newregistration1(String fsname,String lsname,String email1,String pass1,String conpass1) throws IOException {

        Account.click();
        Registerlink.click();
        Firstname.sendKeys(fsname);
        Lastname.sendKeys(lsname);
        useremail.sendKeys(email1);
        password.sendKeys(pass1);
        confirmpassword.sendKeys(conpass1);
        submit.click();
        //return person;
        return new Personaldetails();

    }

//using below method to read data from excel

public static Object[][] getTestData(String sheetName) {
    FileInputStream file = null;
    try {
        file = new FileInputStream(TESTDATA_SHEET_PATH);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    try {
        book = WorkbookFactory.create(file);
    } catch (InvalidFormatException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    sheet = book.getSheet(sheetName);
    Object[][] data = new Object[sheet.getLastRowNum()][sheet.getRow(0).getLastCellNum()];
    // System.out.println(sheet.getLastRowNum() + "--------" +
    // sheet.getRow(0).getLastCellNum());
    for (int i = 0; i < sheet.getLastRowNum(); i++) {
        for (int k = 0; k < sheet.getRow(0).getLastCellNum(); k++) {
            data[i][k] = sheet.getRow(i + 1).getCell(k).toString();
            // System.out.println(data[i][k]);
        }
    }
    return data;
}
  • 1
    please post error & what getTestData is returning ? – Chandrashekhar Swami Mar 13 '18 at 03:48
  • org.testng.internal.reflect.MethodMatcherException: Data provider mismatch Method: addnewuser([Parameter{index=0, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=1, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=2, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=3, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=4, type=java.lang.String, declaredAnnotations=[]}]) Arguments: [(java.lang.String)fname] – krishna Mar 13 '18 at 03:48
  • hI@ShekharSwami , above error msg which i am getting. Please see the getTestData method in description. – krishna Mar 13 '18 at 04:01

2 Answers2

0

Looks like the test has required 5 arguments but your data provider method getTestData passing less/greater no of arguments.

Sodium
  • 1,016
  • 1
  • 9
  • 22
0

You are passing the wrong number of arguments. The method addnewuser() expects 5 arguments, but receives only one. You can see it in the last line in the error message

Arguments: [(java.lang.String)fname]

If you want to pass different number of parameters you can use String[] instead of single arguments. And if you expect 5 arguments each time check what data holds in getTestData()

Guy
  • 46,488
  • 10
  • 44
  • 88
  • Thanks for your inputs. but I am new the selenium. Please suggest how to use string[] ? If possible please correct the code . Thanks. – krishna Mar 13 '18 at 10:17
  • @Krishna `addnewuser(String[] data)` and access it by index `data[0]`, `data[1]` etc. – Guy Mar 13 '18 at 12:57