同时使用@DataProvider和@Parameters

时间:2014-08-13 20:01:10

标签: java selenium selenium-webdriver testng

我想知道是否有办法同时使用@DataProviderParamaters传递参数。

我尝试过两种选择,但都失败了:

@Parameters("Brand")
@Test(dataProvider="dpCGA", groups={"CGA"})
public void createAccount(String brand) {
    setBrand(brand);
}
在上面的例子中,

品牌变量被数据提供者覆盖。

@Parameters("Brand")
@Test(dataProvider="dpCGA", groups={"CGA"})
public void createAccount(String brand, String email) {
    setBrand(brand);
    createAccount(email);
}

测试用例甚至没有运行。

我正在使用TestNG来运行我的测试用例,并希望从XML文件中获取品牌参数。

另外,我有一个Excel文件用于保存电子邮件,并希望使用@DataProvider获取这些值。

是否可以同时使用这两个标签?如果没有,是否有其他方法可以从XML文件中获取品牌参数?

提前致谢

4 个答案:

答案 0 :(得分:2)

@DataProvider是将参数传递给方法的方法之一。您不能同时使用两种方法。

查看您的问题,您只需将品牌添加到DataProvider方法,例如

  @DataProvider(name="dpCGA")
  public Object[][] data() {

    return new Object[][] { 
        {"brand", "email1"}, 
        {"brand", "email2"}
     };
  }

并将其传递给方法,

@Test(dataProvider="dpCGA", groups={"CGA"})
public void createAccount(String brand, String email) {
    setBrand(brand);
    createAccount(email);
}

答案 1 :(得分:1)

根据您的情况,它实际上可能是“可行的”。特别是,如果您只有一个“参数”实例,例如,因为您正在传递环境(开发,测试版...),则可以这样做:

A value of type 'string' cannot be used as a default parameter because there are no standard conversions to type 'char'

BeforeSuite将使用参数执行,您可以在由数据提供者参数化的测试中访问它们。

它可能与多个参数或@BeforeEach一起使用,但我没有尝试过。

答案 2 :(得分:0)

您不能同时使用@DataProvider和@Parameters。通过@DataProvider传递所有参数。

答案 3 :(得分:0)

正如其他人已经指出的那样,接收DataProvider结果以及套件参数是不可能的。这个答案通过逐步完成代码证明了这一点:

  1. Invoker.invokeTestMethods()会致电Parameters.handleParameters()
  2. 会尝试查找DataProvider
  3. 虽然DataProvider可以通过ITestContext接收上下文,但这只会使套件(XML)中的参数可用,而不是通过系统属性指定。