Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用excel或其他方法修改测试参数?_Java_Excel_Selenium_Selenium Webdriver_Apache Poi - Fatal编程技术网

Java 如何使用excel或其他方法修改测试参数?

Java 如何使用excel或其他方法修改测试参数?,java,excel,selenium,selenium-webdriver,apache-poi,Java,Excel,Selenium,Selenium Webdriver,Apache Poi,我想将测试参数从测试脚本中分离出来,以实现数据驱动的自动化测试。我必须在Java1.6环境下,所以我不能使用需要Java1.7+的testNG。因此,我需要使用一些变通方法,如ApachePOI来读取excel文件并配置参数以实现我的目标 我不太明白如何从xls中获取列A中的值行,该行已在B列或其他概念上被切换为“1”,作为正在使用的测试参数。我不知道ApachePOI是否应该像我在这个社区中做的那样做,但似乎没有人以这种方式使用它 | A | B 1| ABC | 1 2| DEF |

我想将测试参数从测试脚本中分离出来,以实现数据驱动的自动化测试。我必须在Java1.6环境下,所以我不能使用需要Java1.7+的testNG。因此,我需要使用一些变通方法,如ApachePOI来读取excel文件并配置参数以实现我的目标

我不太明白如何从xls中获取列A中的值行,该行已在B列或其他概念上被切换为“1”,作为正在使用的测试参数。我不知道ApachePOI是否应该像我在这个社区中做的那样做,但似乎没有人以这种方式使用它

 |  A  | B
1| ABC | 1
2| DEF | 0
3| GHI | 0
4| JKL | 0
B列中的1和0可以是布尔的其他表达式,也可以是多个正结果,但其思想是列出所有参数选项,并将其打开或关闭,以便在测试脚本中使用。就像sql中从B=1的表中选择A的想法一样。但是在使用过程中,我只能得到值“1”而不是“ABC”

脚本应该是getStringCellValue或其他带有“ABC”值内容的东西,作为运行测试的参数,而不是将“ABC”直接放在脚本中,并在每次需要使用不同参数时对其进行更改

顺便说一句,有没有其他方法可以使用sql语法并从文件中获取值?我与使用xls或不使用xls无关。但是,使用testNG的.xml参数对我来说是不可行的,因为我需要在前面提到的Java1.6环境中

谢谢你的阅读

更新:

    HSSFSheet hspsheet = workbook.getSheetAt(0);
    List<HSSFRow> filteredhspRows = new ArrayList<HSSFRow>();
    Iterator<Row> hspritr = hspsheet.iterator();
    while (hspritr.hasNext()) {
    HSSFRow rows = (HSSFRow) hspritr.next();
    Iterator<Cell> hspcitr = rows.cellIterator();
    while (hspcitr.hasNext())
    {
        HSSFCell cell = (HSSFCell) hspcitr.next();
        if (cell.toString().contains("T")) 
        {
            filteredhspRows.add(rows);
            System.out.println(cell.getStringCellValue());
        }
    }
    }
HSSFSheet hspsheet=workbook.getSheetAt(0);
List filteredhspRows=new ArrayList();
迭代器hspritr=hspsheet.Iterator();
while(hspritr.hasNext()){
HSSFRow行=(HSSFRow)hspritr.next();
迭代器hspctor=rows.cellIterator();
while(hspctor.hasNext())
{
HSSFCell单元格=(HSSFCell)hspcitr.next();
if(cell.toString()包含(“T”))
{
添加(行);
System.out.println(cell.getStringCellValue());
}
}
}

通过使用上述代码,我只能获取包含“T”的单元格,但当其在B列中的对应值(同一行)为“T”时,我不仅能够获取A列中的值。

这是为了仅获取第一行中的单元格值

移除条件:
if(cell.toString()包含(“T”)
并移除状态
break

Iterator<Cell> hspcitr = rows.cellIterator();
while (hspcitr.hasNext())
{
    HSSFCell cell = (HSSFCell) hspcitr.next();
    filteredhspRows.add(rows);
    System.out.println(cell.getStringCellValue());
}
Iterator hspctor=rows.cellIterator();
while(hspctor.hasNext())
{
HSSFCell单元格=(HSSFCell)hspcitr.next();
添加(行);
System.out.println(cell.getStringCellValue());
}
但如果要获取每行的所有单元格,请使用:

while (hspritr.hasNext ()){
    HSSFRow rows = (HSSFRow) hspritr.next();
    Iterator<Cell> hspcitr = rows.cellIterator();
    while (hspcitr.hasNext())
    {
        HSSFCell cell = (HSSFCell) hspcitr.next();
        filteredhspRows.add(rows);
        System.out.println(cell.getStringCellValue());
    }
}
while(hspritr.hasNext()){
HSSFRow行=(HSSFRow)hspritr.next();
迭代器hspctor=rows.cellIterator();
while(hspctor.hasNext())
{
HSSFCell单元格=(HSSFCell)hspcitr.next();
添加(行);
System.out.println(cell.getStringCellValue());
}
}

据我所知,通过ApachePOI访问电子表格时没有SQL语法

如果我理解正确,你或多或少对A的值感兴趣,其中B的值为1

您可以使用以下代码,通过简单地迭代工作表的行来查找所有相关的A值:

Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.rowIterator();
Collection<String> relevantValuesFromA = new ArrayList<String>();
while (rowIterator.hasNext()) {
    Row row = rowIterator.next();
    Cell bCellOfRow = row.getCell(1);
    if ("1".equals(bCellOfRow.getStringCellValue())) {
        relevantValuesFromA.add(row.getCell(0).getStringCellValue());
    }
}

//now you can use relevantValuesFromA for your tests
Sheet Sheet=workbook.getSheetAt(0);
迭代器rowIterator=sheet.rowIterator();
集合相关值罗姆=新的ArrayList();
while(roweiterator.hasNext()){
行=行迭代器。下一步();
Cell bCellOfRow=row.getCell(1);
如果(“1”。等于(bCellOfRow.getStringCellValue()){
relevantValuesFromA.add(row.getCell(0.getStringCellValue());
}
}
//现在,您可以在测试中使用相关的ValuesFroma

但是我在使用过程中只能得到值“1”而不是“ABC”
。我认为您在使用Apache Poi时有点问题,请分享您如何读取excel文件的代码。很抱歉,我已经放弃了这些代码,因为它们不起作用,我无法恢复,因为我使用了许多其他方法来编写代码。但我记得我是从这篇文章中借来的:也许这就是线索:我确实参考了这篇文章,但我正在消化它,所以我现在尝试不同的编码。我对我的问题做了一些更新,我成功地重新创建了我提到的代码。也许你能在里面找到什么。非常感谢,它确实显示了正确的结果。但是,我如何将集合分割成字符串值的早午餐?你说的“分割成字符串值的早午餐”是什么意思?也许有你需要的方法…我的意思是,当前的结果将是一组值,而不是多个单独的值,是否可以具体地识别它们中的每一个?将[ABC,DEF]改为“ABC”“DEF”,我可以单独使用它们。这是另一个问题,谢谢你的解决方案。nvm我发现这篇文章将在需要时开始一个新的线程,谢谢你解决我的问题。