【问题标题】:Parameter error when running selenium webdriver test case in Java在 Java 中运行 selenium webdriver 测试用例时出现参数错误
【发布时间】:2013-06-26 10:48:57
【问题描述】:

我正在尝试在 Selenium webdriver 中运行此方法,但我继续收到此错误:

org.testng.TestNGException: 
Method PopulateBorrower requires 2 parameters but 0 were supplied in the @Test annotation.
    at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:198)
    at org.testng.internal.Parameters.createParameters(Parameters.java:134)
    at org.testng.internal.Parameters.createParameters(Parameters.java:370)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:447)
    at org.testng.internal.Invoker.handleParameters(Invoker.java:1384)
    at org.testng.internal.Invoker.createParameters(Invoker.java:1075)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1180)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:128)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1203)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1128)
    at org.testng.TestNG.run(TestNG.java:1036)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

--------->我做错了什么?代码如下。我在 SetUpBase 单独的类中设置了它。

@Test
public static void PopulateBorrower(String PrimaryBorrowerBaseName1,String PrimaryBorrowerBaseName)
{       
    String fName= PrimaryBorrowerInputDictionary.get(BorrowerFirstNameElement);
    String lName=PrimaryBorrowerInputDictionary.get(BorrowerLastNameElement);
    String suffix=PrimaryBorrowerInputDictionary.get(BorrowerSuffixElement);
    String social=PrimaryBorrowerInputDictionary.get(BorrowerSocialSecurityNumberElement);
    String homePhone=PrimaryBorrowerInputDictionary.get(BorrowerHomePhoneNumberElement);
    String schoolYears=PrimaryBorrowerInputDictionary.get(BorrowerYearsInSchoolElement);

    driver.findElement(By.id(PrimaryBorrowerBaseName1 + BorrowerFirstNameElement)).sendKeys(fName);
    driver.findElement(By.id(PrimaryBorrowerBaseName1 + BorrowerLastNameElement)).sendKeys(lName);
    driver.findElement(By.id(PrimaryBorrowerBaseName1 + BorrowerSuffixElement)).sendKeys(suffix);
    driver.findElement(By.name(PrimaryBorrowerBaseName + BorrowerHomePhoneNumberElement)).sendKeys(social);

    driver.findElement(By.name(PrimaryBorrowerBaseName + BorrowerHomePhoneNumberElement)).sendKeys(homePhone);
    driver.findElement(By.name(PrimaryBorrowerBaseName + BorrowerYearsInSchoolElement)).sendKeys(schoolYears);
    driver.findElement(By.name(PrimaryBorrowerBaseName +BorrowerMarriageStatusElement )).click();


    assertEquals(driver.findElement(By.id(PrimaryBorrowerBaseName + BorrowerFirstNameElement))
                .getText(), fName);

    assertEquals(driver.findElement(By.id(PrimaryBorrowerBaseName + BorrowerLastNameElement))
            .getText(), lName);

    assertEquals(driver.findElement(By.id(PrimaryBorrowerBaseName + BorrowerSuffixElement))
            .getText(), suffix);

    assertEquals(driver.findElement(By.id(PrimaryBorrowerBaseName + BorrowerHomePhoneNumberElement))
            .getText(), homePhone);

    assertEquals(driver.findElement(By.id(PrimaryBorrowerBaseName + BorrowerYearsInSchoolElement))
            .getText(), schoolYears);

    assertTrue(driver.findElement(By.id(PrimaryBorrowerBaseName + BorrowerMarriageStatusElement))
            .isSelected());
 }

【问题讨论】:

  • 你解决了吗?
  • @Emna 这是TestNGException 用于@Test 方法中未提供的参数。我添加了TestNG 提供的两种方法来做同样的事情。你可以试试看。希望这会有所帮助!

标签: java selenium-webdriver parameter-passing testng


【解决方案1】:

您的单元测试是否使用@DataProvider 注释(JUnit 4.11 中的@Parameterized)?如果是这样,并且您已经定义了数据提供者方法,那么您的 @Test 注释需要像这样识别它:

@Test
@Parameters(value="number", value2="digit")
public void parameterIntTest(int number, int digit) {
    System.out.println("Parameterized Number is : " + number + " and " + digit);
}

【讨论】:

    【解决方案2】:

    为什么使用静态函数作为测试?它不应该是静态的!

    【讨论】:

    • 我删除了静态 --> 运气不好 @Parameters({"PrimaryBorrowerBaseName1","PrimaryBorrowerBaseName "}) @Test public void PopulateBorrower(String PrimaryBorrowerBaseName1,String PrimaryBorrowerBaseName)
    • 您应该指定数据提供者 - 返回测试使用的一些参数的函数。
    • 您可以在这里阅读更多内容mkyong.com/unittest/testng-tutorial-6-parameterized-test
    【解决方案3】:

    TestNGException 即将到来,因为您的 @Test 方法需要 2 个参数(即 PrimaryBorrowerBaseName1PrimaryBorrowerBaseName),但您没有传递它们。

    要解决此问题,您需要在TestNG 调用您的@Test 方法(即PopulateBorrower)时提供这些参数。 TestNG 提供了 2 种方法来做同样的事情。

    TestNG 中提供parameters

    1. Parameters from testng.xml
    2. Parameters with DataProviders

    您可以尝试以下任何一种方法来解决您的问题。

    解决方案 1:testng.xml 中的参数

    testng.xml 文件

    <suite name="My Suite">
        <parameter name="primary-borrower-base-name1" value="value1" />
        <parameter name="primary-borrower-base-name"  value="value"/>
        <test name="My Test">
            <classes>
                <class
                    name="yourpackage.PopulateBorrowerTestClass2" />
            </classes>
        </test>
    </suite>
    

    你的测试类

    package yourpackage;
    
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    public class PopulateBorrowerTestClass2 {
    
        @Parameters({ "primary-borrower-base-name1", "primary-borrower-base-name" })
        @Test
        public static void PopulateBorrower(String PrimaryBorrowerBaseName1, String PrimaryBorrowerBaseName)
        {       
            System.out.println(PrimaryBorrowerBaseName1 + " " + PrimaryBorrowerBaseName);
           //your all code goes here
         }
    }
    

    解决方案 2:使用 DataProviders 的参数

    testng.xml 文件

    <suite name="My Suite">
        <test name="My Test">
            <classes>
                <class name="yourpackage.PopulateBorrowerTestClass1" />
            </classes>
        </test>
    </suite>
    

    你的测试类

    package yourpackage;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    public class PopulateBorrowerTestClass1 {
    
        //This method will provide data to any test method that declares that its Data Provider
        //is named "test1"
        @DataProvider(name = "test1")
        public Object[][] createData1() {
         return new Object[][] {
           { "PrimaryBorrowerBaseName1Value", "PrimaryBorrowerBaseNameValue" }
         };
        }
    
        //This test method declares that its data should be supplied by the Data Provider
        //named "test1"
        @Test(dataProvider = "test1")
        public static void PopulateBorrower(String PrimaryBorrowerBaseName1, String PrimaryBorrowerBaseName)
        {       
            System.out.println(PrimaryBorrowerBaseName1 + " " + PrimaryBorrowerBaseName);
           //your all code goes here
         }
    }
    

    【讨论】:

    • 我有这个异常:跳过:运行 org.testng.TestNGException:参数'primary-borrower-base-name1'是(at)测试方法运行时需要的,但尚未标记(at)可选或已定义
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2011-01-25
    • 2012-08-13
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多