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

我正在下面的代码写在selenium和下面的错误显示,请让我知道问题在哪里。

import org.testng.annotations.DataProvider; import 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; 

错误:

失败:testData org.testng.internal.reflect.MethodMatcherException:数据提供者不匹配方法:testData([Parameter {index = 0,type = java.lang.String,declaredAnnotations = []},参数{index = 1,type = java .lang.String,declaredAnnotations = []},参数{index = 2,type = java.lang.Integer,declaredAnnotations = []}])参数:[(java.lang.String)anjali,(java.lang.String )pa,(java.lang.String)25.0] at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:49)at org.testng.internal.Invoker.injectParameters(Invoker.java:1293)at 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)org.testng.SuiteRunner.runTest(SuiteRunner.java:380)at org.testng.SuiteRunner .runSequent (org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)at org.testng.SuiteRunner.run(SuiteRunner.java:289)at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java :52)at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)at 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)at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

我看到的唯一的问题是,你正在阅读的Excel中,所以可能是所有的值都在String ,除非你把它转换为Integer 。 然而,在你的testing中,你期望第三个参数的ageInteger

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

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

下面的代码会引发同样的错误。

 @DataProvider(name = "newdata") public static Object[][] getData() { return new Object[][]{ {"20"}, {"30"} }; } @Test(dataProvider = "newdata") public void testData(Integer age) { System.out.println(age); }