我想检索网络表格中每个单元格的文本。我从方法中获取列索引并将其作为参数传递给此方法:
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断言中使用它来检查我的表是否包含某个值。
答案 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;
}
如果您遇到任何问题,请回复。