简体   繁体   English

使用 TestNG 和 Java 在 Selenium 中出现数据提供者不匹配错误

[英]Data Provider Mismatch error in Selenium with TestNG and Java

Can you please suggest for the possible cause of the Data provider mismatch error which is coming in case of implementing Excel flow from Selenium Java.您能否建议数据提供程序不匹配错误的可能原因,该错误是在从 Selenium Java 实现 Excel 流程的情况下出现的。

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)

Code which I am using to get the Data from Excel:我用来从 Excel 获取数据的代码:

    public static Object[][] TestData() {
Workbook workBook;
    Sheet sheet;           
File src = new File(FilePath);
        workBook = WorkbookFactory.create(src); 
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++) {[![enter image description here][1]][1]
                for (int j = 0; j < cellCount; j++) {
                    data[i][j] = sheet.getRow(1).getCell(j);
                }
            }
            return data;
        }

Method where I am calling this TestData:我调用这个 TestData 的方法:

@DataProvider
    public Object[][] getData() {
        Object[][] data = TestUtil.TestData();
        return data;
    }

@Test(dataProvider = "getData")
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
        }
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)

As per the above error, the createFlow() method is expecting the String as an argument but you are passing the Cell which is not acceptable.根据上述错误, createFlow()方法期望 String 作为参数,但您传递的是不可接受的Cell

Try the below modified code :尝试以下修改后的代码:

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;
}

You need to call the getStringCellValue() method to get the String data.您需要调用getStringCellValue()方法来获取 String 数据。

Update :更新 :

You will get an exception, if you are trying to read Numeric data from the excel by using getStringCellValue() .如果您尝试使用getStringCellValue()从 Excel 中读取数字数据,则会出现异常。

To avoid this exception, you can append ' apostrophe symbol as prefix in the Numeric cell of the excel sheet.为避免此异常,您可以在 Excel 工作表的数字单元格中附加'撇号符号作为前缀。

Suppose you have some data like below format in the excel :假设您在 excel 中有一些类似以下格式的数据:

| Ali   |
| 123   |
| Puppy |

you can get Ali , Puppy values using getStringCellValue() but you can't get 123 because it is Number so try to append ' before that 123 in the excel and press enter.您可以使用getStringCellValue()获得AliPuppy值,但无法获得123因为它是数字,因此尝试在 excel 中的123之前附加'并按 Enter。 It looks something like this and you won't get that error.它看起来像这样,你不会得到那个错误。

| Ali   |
| '123  |
| Puppy |

If you want to fetch the data irrespective of the data type that has provided from the excel and you don't want to append ' then you need to do something like below :如果您想获取数据而不管 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;
}

Import Cell from import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Cell;导入Cell import org.apache.poi.ss.usermodel.Cell; package.包裹。

I hope it helps...我希望它有帮助...

@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 }
}

Maybe try to assign name to your data provider and replace the dataprovider name instead the method name.也许尝试为您的数据提供者分配名称并替换数据提供者名称而不是方法名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Selenium 与 TestNG 和 Java 中的数据提供程序不匹配错误 | org.testng.internal.reflect.MethodMatcherException - Data Provider Mismatch error in Selenium with TestNG and Java | org.testng.internal.reflect.MethodMatcherException Selenium 中的数据提供者与 TestNG 不匹配 - Data provider mismatch in Selenium with TestNG 测试数据提供者获取错误“数据提供者不匹配” - Testng data provider Getting error "Data provider mismatch" TestNG - Selenium Java &gt; 数据提供者迭代并返回到之前的@Test - TestNG - Selenium Java > Data Provider Iteration and Return to previous @Test org.testng.internal.reflect.MethodMatcherException:数据提供者不匹配 - org.testng.internal.reflect.MethodMatcherException: Data provider mismatch 使用 selenium webdriver 和 java testng 中的数据提供程序 - data providers in testng using selenium webdriver and java 调用Java类(Selenium WebDriver,TestNG)时出错 - Error calling a java class (Selenium WebDriver, TestNG) TestNG数据提供者 - TestNG Data provider Selenium Webdriver,TestNG-数据提供程序尝试传递2个参数,但是方法采用3个参数,而TestNG无法注入合适的对象 - Selenium Webdriver, TestNG - data provider is trying to pass 2 parameter but the method take 3 and TestNG is unable in inject a suitable object org.openqa.selenium.remote.UnreachableBrowserException:-错误的硒Java TestNG - org.openqa.selenium.remote.UnreachableBrowserException: - Error selenium Java TestNG
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM