【发布时间】: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