在Java中运行selenium webdriver测试用例时出现参数错误
我正在尝试在Selenium webdriver中运行此方法,但仍然出现以下错误:在Java中运行selenium webdriver测试用例时出现参数错误,java,selenium-webdriver,parameter-passing,testng,Java,Selenium Webdriver,Parameter Passing,Testng,我正在尝试在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 or
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());
}
单元测试是否使用@DataProvider注释(@在JUnit4.11中参数化)?如果是这样,并且您已经定义了一个数据提供程序方法,@Test注释需要像这样识别它:
@Test
@Parameters(value="number", value2="digit")
public void parameterIntTest(int number, int digit) {
System.out.println("Parameterized Number is : " + number + " and " + digit);
}
为什么使用静态函数作为测试?它不应该是静态的 之所以出现
TestNGException
,是因为您的@Test
方法需要两个参数(即primarybrowerbasename1
和primarybrowerbasename
),但您没有传递它们
要解决此问题,您需要在TestNG
调用@Test
方法(即PopulateBorrower
)时提供这些参数TestNG
提供了两种相同的方法
在TestNG中提供
您可以尝试以下任何一种方法来解决您的问题
解决方案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
}
}
<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
}
}
解决方案2:使用数据提供程序的参数
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
}
}
<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
}
}
我删除了静态-->no luck@参数({“primarybrowerbasename1”,“primarybrowerbasename”})@Test public void populateborower(字符串primarybrowerbasename1,字符串primarybrowerbasename)您应该指定数据提供程序-返回测试使用的一些参数的函数。您可以在此处阅读更多内容。您解决了它吗?@Emna这是@test
方法中未提供参数的TestNGException
。我已经添加了TestNG
提供的两种方法来实现相同的功能。你可以试试看。希望这有帮助!我遇到了此异常:跳过:run org.testng.TestNGException:method run上的(at)测试需要参数'primary-borrower-base-name1',但尚未将其标记为(at)可选或定义