【问题标题】:How to test a search page that has more than 20 fields如何测试具有 20 多个字段的搜索页面
【发布时间】:2015-01-28 00:43:47
【问题描述】:

我对 selenium web 驱动程序很陌生,我有一个搜索页面,其中包含 20 多个字段。 我创建了一个 excel 文件,其中包含我想通过我的测试传递的所有数据。我的 excel 文件将包含 20 行,并且每一行都会有20 列。 所以我的问题是我可以使用数据提供者来做类似的事情,还是我只需要创建 20 个测试方法并且对于每个方法我应该读取一行?提前致谢

【问题讨论】:

  • 你想达到什么目的?只想将搜索词从 excel 中逐个传递到您的站点搜索字段?
  • @HelpingHands 我想传递行,所以我需要将所有行保存在列表数组中,然后我会将列表传递给数据提供者

标签: java excel selenium selenium-webdriver testng


【解决方案1】:

请考虑使用 Apache POI 库来完成此操作。

Apache POI 的示例代码:

FileInputStream file = new FileInputStream(new File("C:\\test.xlsx"));                 
//Get the workbook instance for XLS file 
XSSFWorkbook workbook = new XSSFWorkbook (file);     
//Get first sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);  
Row row = sheet.getRow(0);
String data = row.getCell(columnindex).getStringCellValue();

数据提供者: @DataProvider 将方法标记为为测试方法提供数据。带注释的方法必须返回一个 Object[][]。 @Test 方法想要从这个 DataProvider 接收数据,需要使用一个与这个注解名称相同的 dataProvider 名称。

属性

  1. name - 数据提供者的名称。如果未提供,则此数据提供者的名称将自动设置为方法的名称。

  2. parallel - 如果设置为 true,则使用此数据提供程序生成的测试将并行运行。默认值为 false。

@Dataprovider 教程:http://seleniumeasy.com/testng-tutorials/dataprovider-in-testng

Dataprovider 的示例代码:

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataProviderExample{

    //This test method declares that its data should be supplied by the Data Provider
    // "getdata" is the function name which is passing the data
       // Number of columns should match the number of input parameters
    @Test(dataProvider="getData")
    public void setData(String username, String password)
    {
        System.out.println("you have provided username as::"+username);
        System.out.println("you have provided password as::"+password);
    }

    @DataProvider
    public Object[][] getData()
    {
    //Rows - Number of times your test has to be repeated.
    //Columns - Number of parameters in test data.
    Object[][] data = new Object[3][2];

    // 1st row
    data[0][0] ="sampleuser1";
    data[0][1] = "abcdef";

    // 2nd row
    data[1][0] ="testuser2";
    data[1][1] = "zxcvb";

    // 3rd row
    data[2][0] ="guestuser3";
    data[2][1] = "pass123";

    return data;
    }
}

【讨论】:

  • 您可以稍微解释一下 DataProviders 如何支持 TestNG 中的数据驱动测试。
  • 这并不能解决我的问题,因为我想传递行中的所有数据,所以我需要将所有行保存在列表数组中,然后我会将列表传递给数据提供程序,但是数据提供者不读取列表
  • 您可以执行以下操作(不使用 Dataprovider): 1. 使用 Apache POI 读取单元格值 2. 将这些值存储在 ArrayList 3. 调用函数以返回您的 ArrayList
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
相关资源
最近更新 更多