首页 > 解决方案 > 如何解决 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。

我已经尝试了一段时间,但我一无所知。所以在这里,我来了。

你能告诉我问题出在哪里吗?

标签: seleniumtestng-dataprovider

解决方案


它抛出 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 方法


推荐阅读