我是使用selenium和java的Page-Object模型自动化的新手。我正在使用页面对象模型,并将每个页面作为单个类,并将该页面中的操作作为方法。使用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
}

答案 0 :(得分:1)
您可以根据调用它的方法为数据提供者建模。我要做的可能是基于方法名称编写逻辑。将Method对象传递给dataprovider,根据方法名称创建Object [] []。
说
public Object[][] dp(Method m) {
key = m.getName.replace("verifyClientSearchBy","");
//From excel data, just fetch key column's values or put
//logic here whatever is convenient
//Build your Object[][] with only one value
答案 1 :(得分:1)
我认为你所看到的是Varargs。 您可以像下面这样做
$s = preg_replace('/(?<!href="|">)(?<!src=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/is', '<a href="\\1" target="_blank">\\1</a>', $s);
以上打印
@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,你实际上可以做到这一点。下面还打印相同的
...