Selenium TestNG从Excel工作表传递参数

时间:2016-01-19 16:24:31

标签: java excel selenium-webdriver testng testng-dataprovider

我正在创建一个功能测试,selenium将作为用户在网站上注册一个帐户,但是,网站注册有16个输入字段要填写。一些Int值和一些String。有没有更简单的方法呢?

 @Test(dataProvider = "Reg")
  public void login(String sUsername, String sPassword, String sMemorableWord)  {

我只传递了3个值,但完成了reg测试,将会有16个字符串或Int参数。这将是一个巨大的列表,还有另一种方法吗?

2 个答案:

答案 0 :(得分:1)

有一种更简单的方法可以做到这一点。如果将测试的所有参数放在单个Excel电子表格行中,则只需将所有参数读入单个对象。然后,在dataprovider中,返回包含所有这些参数的单个对象。

@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模式来构造对象,但是在您使用它之后我会这样做。

答案 1 :(得分:0)

您可以在testng中从DataProvider获取帮助。在DataProvider中,将所有值加载到excel中可以是Hashtable并返回为Object [] []。

在@Test方法中收集该数据提供程序,将Hashtable h作为参数传递给函数方法,然后就可以从哈希表中获取所需的数据。

下面简单的例子可以给你一个好主意..

 static WebDriver driver;

@Test(dataProvider="getdata")
public void myTestCase(Hashtable<String, String> h){

    driver=new FirefoxDriver();
    driver.get(h.get("url"));
}

@DataProvider(name="getdata")
public Object[][] testdata(){

    Hashtable<String, String> h=new Hashtable<>();

    //collect data from excel sheet
    h.put("url", "http://www.google.com");

    Object[][] obj={{h}};

    return obj;


}