Selenium java testNG:是否可以在testng测试方法中部分使用dataprovider数据
Selenium java testNG: Is it possible to use dataprovider data partially in testng test method
我不熟悉使用 selenium 和 java 的页面对象模型自动化。我正在使用页面对象模型,并将每个页面作为单个 class 并将该页面中的操作作为 methods.Using excel 以保持读取测试数据。我有一个使用各种参数搜索客户端的测试,如客户编号、保单编号、姓氏、名字、webrefernce、电子邮件等等……现在我必须在方法签名中提供所有参数,否则数据提供者测试失败不匹配错误。我有一个 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
}
您可以根据调用它的方法为您的数据提供者建模。我会做的可能是根据方法名称编写逻辑。将 Method 对象传递给您的数据提供者,根据方法的名称,创建您的 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
我想你在找的是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]);
}
我不熟悉使用 selenium 和 java 的页面对象模型自动化。我正在使用页面对象模型,并将每个页面作为单个 class 并将该页面中的操作作为 methods.Using excel 以保持读取测试数据。我有一个使用各种参数搜索客户端的测试,如客户编号、保单编号、姓氏、名字、webrefernce、电子邮件等等……现在我必须在方法签名中提供所有参数,否则数据提供者测试失败不匹配错误。我有一个 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
}
您可以根据调用它的方法为您的数据提供者建模。我会做的可能是根据方法名称编写逻辑。将 Method 对象传递给您的数据提供者,根据方法的名称,创建您的 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
我想你在找的是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]);
}