我是使用 selenium 和 java 的页面对象模型自动化的新手。我正在使用页面对象模型,并将每个页面作为单个类,并将该页面中的操作作为方法。使用 Excel 来读取测试数据。我有一个使用各种参数搜索客户的测试,例如客户编号、保单编号、姓氏、名字、网络引用、电子邮件等等......现在我必须在方法签名中提供所有参数,否则测试将因数据提供者而失败不匹配错误。我有一个 GetData 方法,它提供指定的 excelsheet 中的字符串数组。
是否可以将参数设置为可选,以便我可以在测试方法的签名中仅指定该特定测试所需的参数。实际测试中有15个参数和附加组合。 (如果这是不可能的,我必须将数据拆分为 16 个不同的选项卡,并分别为每个测试定义数据提供程序)。或者还有其他方法可以实现这一目标吗?谢谢
当前代码:
@DataProvider(name="ClientSearchData")
public String[][] getTestData() {
String[][] testRecords = getData("TestData_igo4.xlsx","ClientSearch");
return testRecords;
}
@BeforeTest
public void setUp() {
init();
}
@Test(dataProvider="ClientSearchData")
public void verifyClientSearchByClientNumber(String clientnumber, String policynumber, String surname, String webreference, String email) {
//code for search by clientnumber
}
@Test(dataProvider="ClientSearchData")
public void verifyClientSearchByPolicyNumber(String clientnumber, String policynumber, String surname, String webreference, String email) {
//Code for search by policynumber
}
我想要像下面这样的东西,以避免每个测试不必要的参数..
@DataProvider(name="ClientSearchData")
public String[][] getTestData() {
String[][] testRecords = getData("TestData.xlsx","ClientSearch");
return testRecords;
}
@BeforeTest
public void setUp() {
init();
}
@Test(dataProvider="ClientSearchData")
public void verifyClientSearchByClientNumber(String clientnumber) {
//code for search by clientnumber
}
@Test(dataProvider="ClientSearchData")
public void verifyClientSearchByPolicyNumber(String policynumber) {
//Code for search by policynumber
}
最佳答案
我想你正在寻找的是 Varargs 。 你可以简单地像下面这样做
@DataProvider(name = "testData")
public static Object[][] testDataProvider() {
return new Object[][] {new String[]{"a","b","c"}};
}
@Test(priority=3,dataProvider = "testData")
public void test1(String... str1) {
System.out.println("first string"+" "+str1[0]);
}
@Test(priority=4,dataProvider = "testData")
public void test2(String... str2) {
System.out.println("second string"+" " + str2[1]);
}
以上打印
first string a
second string b
在上面的代码中,只需根据您的getTestData
调整数据提供程序
三个点...
是这里的关键
编辑:
你实际上可以在没有 Varargs 的情况下做到这一点。下面也打印相同的内容
@Test(priority=3,dataProvider = "testData")
public void test1(String str1[] ) {
System.out.println("first string"+" "+str1[0]);
}
@Test(priority=4,dataProvider = "testData")
public void test2(String str2[]) {
System.out.println("second string"+" " + str2[1]);
}
关于java - Selenium java测试NG : Is it possible to use dataprovider data partially in testng test method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47185164/