使用selenium获取Web表的列单元格值

时间:2014-07-11 18:32:30

标签: selenium-webdriver webdriver

我想检索网络表格中每个单元格的文本。我从方法中获取列索引并将其作为参数传递给此方法:

    public List<String> getColumnValues(int colIndex) {
        WebElement colElement;
        List<String> colValues = new ArrayList<String>();
        List<WebElement> rows = getRows();
        System.out.println("Rows count: " + rows.size());
        Iterator<WebElement> i = rows.iterator();
        while (i.hasNext()) {
            WebElement row = i.next();
            System.out.println("Row data: " + row.getText());
            // How to avoid this check for the header row for each row
            // iteration?
            if (row.findElements(By.tagName("th")).size() > 0) {
                colElement = row.findElement(By.xpath(".//th[" + colIndex + "]"));
            } else {
                colElement = row.findElement(By.xpath(".//td[" + colIndex + "]"));
            }
            colValues.add(colElement.getText().trim());
        }
        return colValues;
    }

这是我的网络表:

<table id = "webtable">
<thead>
<tr>
  <th>Header Column 1</th>
  <th>Header Column 2</th>
  <th>Header Column 3</th>
  <th>Header Column 4</th>
  <th>Header Column 5</th>
</tr>
</thead>
<tbody>
<tr> 
<td>Row 1 Col 1</td>
<td>Row 1 Col 2</td>
<td>Row 1 Col 3</td>
<td>Row 1 Col 4</td>
<td>Row 1 Col 5</td>
</tr>
</tbody>
<tbody>
<tr> 
<td>Row 2 Col 1</td>
<td>Row 2 Col 2</td>
<td>Row 2 Col 3</td>
<td>Row 2 Col 4</td>
<td>Row 2 Col 5</td>
</tr>
</tbody>
</table>

问题1.在第5行,我得到了正确的行数。但是,在第9行,它没有获取行(单元格)值。它的印刷空白。我期待第1行Col 1,第1行第2行,第1行Col 3等。

问题2.在第12行,带有标记&#34; th&#34;的元素数量。返回只有3,而应该有5。

问题3.在第15行,我得到一个没有这样的元素异常,试图找到.//td [3],即使我可以获取// td [5]

问题4.如评论中所述,如何避免在行元素的每次迭代中检查标题行?

任何人都可以解释一下我可能做错了什么,或者是否有更好的方法将列值作为List返回。我需要带有列值的集合,以便我可以使用hasitem(item)在我的Hamcrest Matcher断言中使用它来检查我的表是否包含某个值。

1 个答案:

答案 0 :(得分:1)

使用此功能。它将返回包含您已将索引作为参数 -

的列中的值的列表
public List<String> getColumnValues(int colIndex) {
WebElement colElement;
List<String> colValues = new ArrayList<String>();

colValues = driver.findElements(By.cssSelector("#webtable>tbody>tr>td:nth-child("+colIndex+")"));

return colValues;
    }

如果您遇到任何问题,请回复。