3

I'm trying to run this method in Selenium webdriver but I continue to get this error:

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)

--------->what am I doing wrong? The code is below. I have its's setup in a SetUpBase separate class.

@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());
 }
2
  • Did you resolve it ? Commented Sep 16, 2016 at 9:02
  • 2
    @Emna this is TestNGException for un-supplied parameters in @Test method. I have added both approaches provided by TestNG to do the same. You can try that out. Hope this helps! Commented Sep 16, 2016 at 18:58

3 Answers 3

4
+50

The TestNGException is coming because your @Test method requires 2 parameters (i.e. PrimaryBorrowerBaseName1 and PrimaryBorrowerBaseName) but you are not passing them.

To solve this you need to supply these parameters when TestNG invokes your @Test method (i.e. PopulateBorrower). TestNG provides 2 ways to do the same.

Supplying parameters in TestNG

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

You can try any one of below approach to solve your issue.

Solution 1: Parameters from testng.xml

The testng.xml file:

<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>

Your test class:

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
     }
}

Solution 2: Parameters with DataProviders

The testng.xml file:

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

Your test class:

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
     }
}
Sign up to request clarification or add additional context in comments.

1 Comment

I had this exception : SKIPPED: run org.testng.TestNGException: Parameter 'primary-borrower-base-name1' is required by (at)Test on method run but has not been marked (at)Optional or defined
2

Why do you use static function as a test? It should not be static!

3 Comments

I removed the static--> no luck @Parameters({"PrimaryBorrowerBaseName1","PrimaryBorrowerBaseName "}) @Test public void PopulateBorrower(String PrimaryBorrowerBaseName1,String PrimaryBorrowerBaseName)
You should specify data provider - the function that returns some parameters that the test uses.
1

Does your unit test use the @DataProvider annotation (@Parameterized in JUnit 4.11)? If so, and you have defined a data provider method, then your @Test annotation needs to recognize it as such like so:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.