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]);

  }