首页 文章

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

提问于
浏览
0

我在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;

错误:

FAILED:testData org.testng.internal.reflect.MethodMatcherException:数据提供程序不匹配方法:testData([Parameter {index = 0,type = java.lang.String,declaredAnnotations = []},Parameter {index = 1,type = java.lang.String,declaredAnnotations = []},Parameter {index = 2,type = java.lang.Integer,declaredAnnotations = []}])参数:[(java.lang.String)anjali,(java.lang . 字符串)pa,(java.lang.String)25.0]在org.testng.internal.Invoker.injectParameters(Invoker.java:1293)的org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:49)处org.testng.internal.InvokeTestMethods(Invoker.java:1187)org.testng.inest.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) org.testng.TestRunner.privateRun(TestRunner.java:744)org.testng.TestRunner.run(TestRunner.java:602)org.testng.SuiteRunner.runTest(SuiteRunner.java:380)atg.testng . SuiteRunner.runSeque最初的(SuiteRunner.java:375)org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)atg.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)atg.testng.TestNG.runSuitesLocally(TestNG.java:1226)at org位于org.testng的org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)org.testng.TestNG.run(TestNG.java:1115)的.testng.TestNG.runSuites(TestNG.java:1144) . remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

1 回答

  • 2

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

    将类型更改为 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);
    
    }
    

相关问题