有一种更简单的方法可以做到这一点。如果您将测试的所有参数放在单个 Excel 电子表格行中,则只需将所有参数读入单个对象即可。然后,在您的数据提供者中,返回一个包含所有这些参数的对象。
@Test(dataProvider = "Reg")
public void login(WebDriver drvInstance, HashMap params) {
这就是我以前的做法。然后,在 dataprovider 中,我只为每个测试创建新的驱动程序实例,并将所有参数收集到一个对象中,然后返回这两项。另外,我使用 Apache MetaModel 来读取电子表格。
在您的数据提供者中,执行以下操作:
@DataProvider(name = "test1")
public Object[][] prepareTestData() {
Object[][] vals = new Object[columns][rows];
for each row in spreadsheet {
get rows from spreadsheet into a hashmap
create new Capabilities object from hashmap values
create webdriver from capabilities
add driver and hashmap to object[][]
}
return vals;
}
您可能没有意识到这一点的美妙之处在于,您传递回方法的那两个参数也可以从@BeforeMethod
配置阶段访问。JUnit 无法做到的事情。此外,通过这种方式,TestNG 可以处理多个浏览器实例的线程。
此外,Rudziankoŭ 有一个观点。您可以在 dataprovider 方法中使用 Builder 模式来构造对象,但稍后我会在您让它工作后这样做。