selenium - 如何解决 TestNG 中的 org.testng.internal.reflect.MethodMatcherException?
问题描述
ContactsPage 类:-
public class ContactsPage extends TestBase {
public ContactsPage()
{
PageFactory.initElements(driver, this);
}
public boolean contactsLabel()
{
return contactsLabel.isDisplayed();
}
public void createNewContact1(String subject, String fName, String lName, String petname ) throws InterruptedException, AWTException
{
.....
}
public void createNewContact2(String comp, String comPos, String dept, String conLookSup ) throws InterruptedException
{
.....
}
public void createNewContact3(String conLookAss, String conLookRef ) throws InterruptedException
{
.....
}
}
ContactsPageTest 类:-
public class ContactsPageTest extends TestBase {
TestUtil testUtil;
LoginPage loginpage;
HomePage homepage;
ContactsPage contactsPage;
String sheetName = "Contacts";
public ContactsPageTest() {
super();
}
@BeforeMethod()
public void setUp() throws InterruptedException {
initialzation();
testUtil = new TestUtil();
loginpage = new LoginPage();
homepage = loginpage.login(prop.getProperty("username"), prop.getProperty("password"));
contactsPage = new ContactsPage();
}
/*
* @Test(priority = 1) public void contactsLabelTest() throws
* InterruptedException { testUtil.switchToFrame(); contactsPage =
* homepage.contactsLink(); Thread.sleep(3000);
* Assert.assertTrue(contactsPage.contactsLabel(), "Exception has caught!"); }
*/
@DataProvider
public Object[][] getCRMTestData() {
Object data[][] = TestUtil.getTestData("Contacts");
return data;
}
@Test(priority = 2, dataProvider = "getCRMTestData")
public void createNewContactTest1(String subject, String fName, String lName, String petname)
throws InterruptedException, AWTException {
testUtil.switchToFrame();
homepage.moveToNewContact();
contactsPage.createNewContact1(subject, fName, lName, petname);
}
@Test(priority = 3, dataProvider = "getCRMTestData")
public void createNewContactTest2(String comp, String comPos, String dept, String conLookSup)
throws InterruptedException, AWTException
{
contactsPage.createNewContact2(comp, comPos, dept, conLookSup);
}
@Test(priority = 4, dataProvider = "getCRMTestData")
public void createNewContactTest3(String conLookAss, String conLookRef)
throws InterruptedException, AWTException
{
contactsPage.createNewContact3(conLookAss, conLookRef);
}
@AfterMethod
public void close() {
driver.close();
}
}
错误信息:
FAILED: createNewContactTest1
org.testng.internal.reflect.MethodMatcherException:
Data provider mismatch
Method: createNewContactTest1([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: [(java.lang.String) Mr,(java.lang.String) Manideep,(java.lang.String) Latchupatula,(java.lang.String) Deep,(java.lang.String) Accenture,(java.lang.String) ASE,(java.lang.String) CSE,(java.lang.String) TL,(java.lang.String) NA,(java.lang.String) NA]
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:982)
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)
描述:我正在使用 Selenium 开发混合框架。我一开始是积极的,但我一直停留在:
org.testng.internal.reflect.MethodMatcherException。
我已经尝试了一段时间,但我一无所知。所以在这里,我来了。
你能告诉我问题出在哪里吗?
解决方案
它抛出 MethodMatcherException 因为您将相同的数据提供程序传递给不同的 @Test 方法,并且每个测试方法都有不同的参数值。@DataProvider 和 @Test 方法返回的参数必须匹配才能检索和分配数据。
您需要确定返回的是什么数据提供者,并且您可以根据这些参数将其分配给测试方法。
在这里,您的数据提供者返回的参数如下:它的 10 个参数 [Mr,Manideep,Latchupatula,Deep, Accenture, ASE, CSE,TL, NA, NA]
并且您将它与 @Test createNewContactTest1 方法的 4 个参数绑定:
createNewContactTest1(String subject, String fName, String lName, String petname)
你需要管理
根据您所需的参数,您的数据提供商检索代码或
您可以使用所需参数创建不同的工作表或
您可以根据 DP 返回将所有 10 个参数添加到 @Test 方法
推荐阅读
- foreign-keys - MySQL Workbench - 外键选项卡不起作用
- python - PyQt5 函数 setVisible 在 Python 中不起作用
- java - 如何在你的 spring 项目中计算所有具有 @Controllers 属性的类
- redis - Redis 之上的 URL 过滤:Bloom 过滤器或 HyperLogLog 数据结构
- r - remotes::install_github 错误:HTTP 错误 422。找不到 SHA 的提交:rc-0.3.1
- android - 文件系统大小写不匹配(Android Studio、Windows 10)
- sqlite - Dart / Flutter - 保存大量图像文件的正确方法
- kubernetes - 了解 Kubernetes Job 中的 backoffLimit
- typescript - 如何使静态方法可继承?
- r - 检查环境中数据的功能 - R