【问题标题】:Getting <org.testng.internal.reflect.MethodMatcherException> Data provider mismatch error in Selenium with TestNG使用 TestNG 在 Selenium 中获取 <org.testng.internal.reflect.MethodMatcherException> 数据提供程序不匹配错误
【发布时间】:2021-10-16 03:50:13
【问题描述】:

我在 TestNG 中使用 @Dataprovide 实现数据驱动框架时遇到错误。 我正在从 excel 文件中读取数据并将其存储在数组列表中,然后使用数据提供程序将其传递给测试。但是,在执行测试时,我收到了 Data Provider mismatch 错误。请帮忙。

错误:

FAILED: register
org.testng.internal.reflect.MethodMatcherException: 
[public void com.bravura.tests.DataProviderTest.register(java.lang.String,java.lang.String,java.lang.String,java.lang.String)] has no parameters defined but was found to be using a data provider (either explicitly specified or inherited from class level annotation).
Data provider mismatch
Method: register([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=[]}])
Arguments: [([Ljava.lang.Object;) [Lallu, Yadav, geeta.kumari@gmail.com, Naukri@2021]]
    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:43)
    at org.testng.internal.Parameters.injectParameters(Parameters.java:914)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:34)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at org.testng.TestRunner.privateRun(TestRunner.java:794)
    at org.testng.TestRunner.run(TestRunner.java:596)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:377)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332)
    at org.testng.SuiteRunner.run(SuiteRunner.java:276)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1134)
    at org.testng.TestNG.runSuites(TestNG.java:1063)
    at org.testng.TestNG.run(TestNG.java:1031)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

测试:

    package com.bravura.tests;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import com.bravura.utilities.TestUtil;

public class DataProviderTest {
    WebDriver driver;
    @BeforeMethod 
    public void setUp() {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\ssaxena\\Downloads\\Selenium\\Drivers\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();        
        driver.get("https://www.ebay.com/");
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    }
    
    @DataProvider
    public Iterator<Object> getInputData() {
        ArrayList<Object> testData = TestUtil.getDataFromExcel();
        return testData.iterator();
    }
    
    @Test(dataProvider = "getInputData")
    public void register(String fname, String Lname, String email, String password) {
        driver.findElement(By.linkText("register")).click();
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
        driver.findElement(By.id("firstname")).sendKeys(fname);
        driver.findElement(By.name("lastname")).sendKeys(Lname); 
        driver.findElement(By.cssSelector("#Email")).sendKeys(email); 
        driver.findElement(By.xpath("//input[@name = 'password']")).sendKeys(password);
        
        driver.findElement(By.className("btn btn--primary btn--large btn--fluid")).click(); 
    }
    
    
    @AfterMethod
    public void tearDown() {
        driver.quit();
    }    
    
}

数据提供者方法

package com.bravura.utilities;
import java.util.ArrayList;
import java.util.Arrays;
public class TestUtil {
        static ReadExcelData reader = new ReadExcelData("D:\\SelemiumWorkspace\\SeleniumBasics\\Stores\\EbayRegistration.xlsx");
        public static ArrayList<Object> getDataFromExcel() {
            ArrayList<Object> dataList = new ArrayList<Object>();
            try {
                ReadExcelData reader = new ReadExcelData("D:\\SelemiumWorkspace\\SeleniumBasics\\Stores\\EbayRegistration.xlsx");
                }catch (Exception e) {
                    e.printStackTrace();
                }
            for(int i =2; i <= reader.getRowCount("RegistrationData"); i++) {
                
                String fname = reader.getCellData("RegistrationData", "FirstName", i);
                String Lname = reader.getCellData("RegistrationData", "LastName", i);
                String email = reader.getCellData("RegistrationData", "Email", i);
                String password = reader.getCellData("RegistrationData", "Password", i);
                    dataList.add(new Object[] {fname, Lname, email, password});
                }
            return dataList;
            }
    }

【问题讨论】:

    标签: java selenium selenium-webdriver testng testng-dataprovider


    【解决方案1】:

    因为Data provider must return Object[][] or Iterator&lt;Object[]&gt; ,所以我稍微修改一下你的代码就可以了。

     public static List<Object[]> getDataFromExcel() {
        List<Object[]> dataList = new ArrayList<>();
        ....
    }
    
    @DataProvider
    public Iterator<Object[]> getInputData() {
        return TestUtil.getDataFromExcel().iterator();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-05
      • 2018-02-10
      • 2021-12-24
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      相关资源
      最近更新 更多