java - 从 Excel 读取数据以提供测试用例

标签 java selenium arraylist selenium-webdriver testng

我有一个 ExcelReader 类,它从 Excel 读取数据并填充相应的列表。

public static List<Address> addressList;
public static List<User> userList;

上面的列表是由 ExcelReader 像这样填充的:

addressList = new ArrayList<Address>();
Address a = new Address();
a.setAddress1(r.getCell(0).getStringCellValue());
a.setCity(r.getCell(1).getStringCellValue());

我想在我的 Selenium 测试用例中使用这些数据。我打算使用 TestNG 的 @DataProvider 标签来提供测试用例,但它只接受 Object[][] 和 Iterator。

有没有办法将这些列表转换为 Object[][] 格式?

如果您更喜欢使用 @DataProvider 以外的任何内容,我也愿意接受任何建议。

提前致谢

最佳答案

有很多方法可以做到这一点,但这里有一个想法。 I wrote an example here就可以了。

这个想法的总体要点是,使用 MetaModel api :

public static Object[][] get2ArgArrayFromRows( List<Row> rows ) {
    Object[][] myArray = new Object[rows.size()][2];
    int i = 0;
    SelectItem[] cols = rows.get(0).getSelectItems();
    for ( Row r : rows ) {
        Object[] data = r.getValues();
        for ( int j = 0; j < cols.length; j++ ) {
            if ( data[j] == null ) data[j] = ""; // force empty string where there are NULL values
        }
        myArray[i][0] = cols;
        myArray[i][1] = data;
        i++;
    }
    logger.info( "Row count: " + rows.size() );
    logger.info( "Column names: " + Arrays.toString( cols ) );
    return myArray;
}

public static Object[][] getCsvData( File csvFile ) 
{   
    CsvConfiguration conf = new CsvConfiguration( 1 );
    DataContext csvContext = DataContextFactory.createCsvDataContext( csvFile, conf );
    Schema schema = csvContext.getDefaultSchema();
    Table[] tables = schema.getTables();
    Table table = tables[0]; // a representation of the csv file name including extension
    DataSet dataSet = csvContext.query()
            .from( table )
            .selectAll()
            .where("run").eq("Y")
            .execute();
    List<Row> rows = dataSet.toRows();
    Object[][] myArray = get2ArgArrayFromRows( rows );
    return myArray;
}

现在,上面的代码只是一个粗略的想法。你真正需要做的是将列和数据合并到Map<String,String>中对象,然后将其作为第一个参数传递回测试,其中包含 CSV 文件中的所有参数,包括浏览器类型。然后,作为第二个参数,将其设置如下:

myArray[i][1] = new WebDriverBuilderHelper();

然后,在 @Test 注解的方法中,实例化驱动程序:

@Test(dataProvider = "dp") 
public void testIt( Map<String,String> map, WebDriverBuilderHelper wdhelper ) {
    wdhelper.instantiateBrowser( map.get("browser") );
    wdhelper.navigateTo(url);
    ....

关于java - 从 Excel 读取数据以提供测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372679/

相关文章:

android - 如何在 Android 中获取列表数据的计数

java - 为什么我们 addAll(Collection) 而不是 Iterable?

java - 为什么我的数组元素不能被正确解析?

java - 将图像复制到剪贴板在 Linux 上不起作用(Java AWT 和 SWT)

google-chrome - 如何在 Chrome 中为 Selenium 设置假地理位置

java - 如何在java中过滤数组列表

Java 迷宫求解器

java - 使用自定义 valueDeserializer 时,如何在 .properties/.yaml 中设置 ack-mode?

java - 如何检查输入字段中的文本

java - 检查类中是否存在 ng-hide