Selenium 中的数据提供者与 TestNG 不匹配

Ani*_*nie 2 java excel testng selenium apache-poi

我正在用 selenium 编写以下代码并显示以下错误,请告诉我问题出在哪里。

导入 org.testng.annotations.DataProvider; 导入 org.testng.annotations.Test;

public class testngexcel {

    public static ExcelReader excel = null;
    @Test(dataProvider = "newdata")
    public void testData(String username, String password, Integer age) {
        System.out.println(username + " - " + password + " - " + age);
    }

    @DataProvider(name = "newdata")
    public static Object[][] getData() {

            if (excel == null) {
                excel = new ExcelReader("C:\\Users\\Anjali.Nautiyal\\Desktop\\selenium\\testngdata.xlsx");
            }

            String sheetName = "login";
            int rows = excel.getRowCount(sheetName);
            int cols = excel.getColumnCount(sheetName);

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

            for (int rowNum = 2; rowNum <= rows; rowNum++) {
                for (int colNum = 0; colNum < cols; colNum++) {
                    data[rowNum - 2][colNum] = excel.getCellData(sheetName, colNum, rowNum);
                }
            }
            return data;
Run Code Online (Sandbox Code Playgroud)

错误:

失败:testData org.testng.internal.reflect.MethodMatcherException:数据提供者不匹配方法:testData([Parameter{index=0, type=java.lang.String, DeclarationAnnotations=[]}, Parameter{index=1, type=java .lang.String, DeclarationAnnotations=[]}, Parameter{index=2, type=java.lang.Integer, DeclarationAnnotations=[]}]) 参数:[(java.lang.String)anjali,(java.lang.String )pa,(java.lang.String)25.0] 在 org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:49) 在 org.testng.internal.Invoker.injectParameters(Invoker.java:1293) 在 org .testng.internal.Invoker.invokeTestMethods(Invoker.java:1187) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) at org.testng.TestRunner.privateRun(TestRunner.java:744) at org.testng.TestRunner.run(TestRunner.java:602) at org.testng.SuiteRunner.runTest(SuiteRunner.java:380) at org.testng.SuiteRunner.runSequentially(SuiteRunner) .java:375) 在 org.testng.SuiteRunner.privateRun(SuiteRunner.java:340) 在 org.testng.SuiteRunner.run(SuiteRunner.java:289) 在 org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)在 org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1301) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1226) 在 org.testng。 TestNG.runSuites(TestNG.java:1144) at org.testng.TestNG.run(TestNG.java:1115) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) at org.testng.remote.RemoteTestNG .initAndRun(RemoteTestNG.java:230) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

Gau*_*hah 6

我看到的唯一问题是,您正在从 excel 中读取数据,因此可能所有值都在传入String,除非您将其转换为Integer. 但是,在您的测试中,您希望第三个参数ageInteger

将类型更改为String应该可以解决问题

@Test(dataProvider = "newdata")
public void testData(String username, String password, String age) {
        System.out.println(username + " - " + password + " - " + age);
}
Run Code Online (Sandbox Code Playgroud)

以下代码会引发相同的错误。

@DataProvider(name = "newdata")
public static Object[][] getData() {
    return new Object[][]{
            {"20"},
            {"30"}
    };
}

@Test(dataProvider = "newdata")
public void testData(Integer age) {

    System.out.println(age);

}
Run Code Online (Sandbox Code Playgroud)