java - Selenium java测试NG : Is it possible to use dataprovider data partially in testng test method

标签 java selenium-webdriver testng testng-dataprovider testng-eclipse

我是使用 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/

相关文章:

java - 如何优化我使用 Java 仅渲染 JPEG 文件的 Web 服务器?这是极慢的

java - Java省略号是否会导致数组在幕后分配内存?

python - 无法从网页中抓取标题

java - 将变量从 jenkins 传递到 testng.xml

java - 用于手机号码验证的正则表达式

java - 适用于 Android 的 Fortumo 应用内支付

javascript - 运行 Selenium-webdriver 时 ECONNREFUSED 连接

python - 构建 XPATH 表达式以获取并单击按钮元素

java - 使用自定义 TestNG.xml 文件而不是自动生成的文件?

unit-testing - 为什么我必须扩展 PowerMockTestCase?