为了账号安全,请及时绑定邮箱和手机立即绑定

Selenium 中的数据提供程序不匹配错误与 TestNG 和 Java

Selenium 中的数据提供程序不匹配错误与 TestNG 和 Java

料青山看我应如是 2022-06-15 17:23:05
您能否就从 Selenium Java 实现 Excel 流时出现的数据提供程序不匹配错误的可能原因提出建议。org.testng.internal.reflect.MethodMatcherException: Data provider mismatchMethod: CreateFlow([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=[]}, Parameter{index=5, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=6, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=7, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=8, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=9, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=10, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=11, type=java.lang.String, declaredAnnotations=[]}])Arguments: [(org.apache.poi.xssf.usermodel.XSSFCell) AakashAuto,(org.apache.poi.xssf.usermodel.XSSFCell) Dummy,(org.apache.poi.xssf.usermodel.XSSFCell) dummy,(org.apache.poi.xssf.usermodel.XSSFCell) gmaAIL.COM,(org.apache.poi.xssf.usermodel.XSSFCell) asdsad,(org.apache.poi.xssf.usermodel.XSSFCell) sads,(org.apache.poi.xssf.usermodel.XSSFCell) asd,(org.apache.poi.xssf.usermodel.XSSFCell) asd,(org.apache.poi.xssf.usermodel.XSSFCell) Dummy,(org.apache.poi.xssf.usermodel.XSSFCell) Dummy,(org.apache.poi.xssf.usermodel.XSSFCell) Dummy,(org.apache.poi.xssf.usermodel.XSSFCell) asd]    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:45)    at org.testng.internal.Parameters.injectParameters(Parameters.java:796)    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:983)
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

org.testng.internal.reflect.MethodMatcherException: 

Data provider mismatch

Method: CreateFlow([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=[]}, Parameter{index=5, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=6, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=7, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=8, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=9, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=10, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=11, type=java.lang.String, declaredAnnotations=[]}])

Arguments: [(org.apache.poi.xssf.usermodel.XSSFCell) AakashAuto,(org.apache.poi.xssf.usermodel.XSSFCell) Dummy,(org.apache.poi.xssf.usermodel.XSSFCell) dummy,(org.apache.poi.xssf.usermodel.XSSFCell) gmaAIL.COM,(org.apache.poi.xssf.usermodel.XSSFCell) asdsad,(org.apache.poi.xssf.usermodel.XSSFCell) sads,(org.apache.poi.xssf.usermodel.XSSFCell) asd,(org.apache.poi.xssf.usermodel.XSSFCell) asd,(org.apache.poi.xssf.usermodel.XSSFCell) Dummy,(org.apache.poi.xssf.usermodel.XSSFCell) Dummy,(org.apache.poi.xssf.usermodel.XSSFCell) Dummy,(org.apache.poi.xssf.usermodel.XSSFCell) asd]

    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:45)

    at org.testng.internal.Parameters.injectParameters(Parameters.java:796)

    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:983)

    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)

    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)

    at org.testng.TestRunner.privateRun(TestRunner.java:648)

    at org.testng.TestRunner.run(TestRunner.java:505)

    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)

    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)

    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)

    at org.testng.SuiteRunner.run(SuiteRunner.java:364)

    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)

    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)

    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)

    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)

    at org.testng.TestNG.runSuites(TestNG.java:1049)

    at org.testng.TestNG.run(TestNG.java:1017)

    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)

    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)

    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

根据上述错误,该createFlow()方法期望 String 作为参数,但您传递的Cell是不可接受的。


试试下面的修改代码:


public static Object[][] TestData() {

    sheet = book.getSheetAt(0);

    int rowCount = sheet.getLastRowNum();

    int cellCount = sheet.getRow(0).getLastCellNum();

    Object[][] data = new Object[rowCount][cellCount];

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

        for (int j = 0; j < cellCount; j++) {

            // Call 'getStringCellValue()' here instead of using just 'getCell()'

            data[i][j] = sheet.getRow(1).getCell(j).getStringCellValue().trim();

        }

    }

    return data;

}

您需要调用该getStringCellValue()方法来获取字符串数据。


更新 :


如果您尝试使用getStringCellValue().


为避免此异常,您可以'在 Excel 工作表的数字单元格中附加撇号作为前缀。


假设您在 excel 中有一些如下格式的数据:


| Ali   |

| 123   |

| Puppy |

你可以得到Ali,Puppy使用的值,getStringCellValue()但你不能得到123,因为它是数字所以尝试在 excel 中追加'并按123Enter 键。它看起来像这样,你不会得到那个错误。


| Ali   |

| '123  |

| Puppy |

如果您想获取数据而不考虑从 excel 提供的数据类型并且您不想追加,'那么您需要执行以下操作:


public static Object[][] TestData() {

    sheet = book.getSheetAt(0);

    int rowCount = sheet.getLastRowNum();

    int cellCount = sheet.getRow(0).getLastCellNum();

    Object[][] data = new Object[rowCount][cellCount];

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

        for (int j = 0; j < cellCount; j++) {

            switch (sheet.getRow(1).getCell(j).getCellType()) {

               case Cell.CELL_TYPE_NUMERIC:

                   // Call 'getNumericCellValue()' here instead of using just 'getCell()'

                   data[i][j] = sheet.getRow(1).getCell(j).getNumericCellValue();

                   break;

               case Cell.CELL_TYPE_STRING:

                   // Call 'getStringCellValue()' here instead of using just 'getCell()'

                   data[i][j] = sheet.getRow(1).getCell(j).getStringCellValue().trim();

                   break;

            }

        }

    }

    return data;

}

Cell从import org.apache.poi.ss.usermodel.Cell;包中导入。


我希望它有帮助...


查看完整回答
反对 回复 2022-06-15
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

@DataProvider(name = "yourDPname")

public Object[][] getData() {

    Object[][] data = TestUtil.TestData();

    return data;

}


@Test(dataProvider = "yourDPname")

public void CreateFlow(String firstName, String lastName, String address,

        String email, String DOB, String MobileNumber, String HomeNumber,

        String PIN, String id, String secondID, String AccountID, String number)

        throws IOException, InterruptedException {

    //Printing all these values inside this method }

}

也许尝试为您的数据提供者分配名称并替换数据提供者名称而不是方法名称。


查看完整回答
反对 回复 2022-06-15
  • 2 回答
  • 0 关注
  • 268 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信