我有以下代码:
WebElement table = a_chromeWebDriver.findElement(By.className("stats-table"));
List<WebElement> allRows = table.findElements(By.tagName("tr"));
system.out.println(allRows.size());
for (WebElement row : allRows) {
ArrayList<WebElement> cells = (ArrayList<WebElement>) row.findElements(By.tagName("td"));
...
我正在类似这样的html上执行此代码:
<table id="table-type-1" class="stats-table stats-main table-1">
<thead>
<tr class="main">
<th class="aaaa" data-type="rank" title="Rank">
</th>
A number of headers here...
</tr>
</thead>
<tbody title="">
<tr bla bla bla>
<td class="bla bla bla" title="bla bla bla>1.</td>
<td class="bla bla bla"></td>
<td class="bla bla bla">36</td>
<td class="bla bla bla">28</td>
<td class="bla bla bla">3</td>
</tr>
<td class="bla bla bla" title="bla bla bla>1.</td>
<td class="bla bla bla"></td>
<td class="bla bla bla">45</td>
<td class="bla bla bla">fnf</td>
<td class="bla bla bla">kfkfk</td>
</tr>
.
.
.
allRows大小为我提供了正确的行数。 出于某种原因,我得到 cells = null 。 我也试过By.xpath(“td”),但没有用。
你能告诉我吗?
谢谢!
答案 0 :(得分:2)
使用此代码循环时:
for (WebElement row : allRows) {
ArrayList<WebElement> cells = (ArrayList<WebElement>) row.findElements(By.tagName("td"));
System.out.println("CellCount " + cells.size());
}
您会看到输出为:
CellCount 0
CellCount 4
CellCount 4
这是因为您的代码选择的第一行来自<thead>
部分,其中没有<td>
个元素,其工作正常;所以你必须为第一个<tr>
您可以将allRows元素更改为以下内容:
List<WebElement> allRows = table.findElements(By.xpath("tbody//tr"));
答案 1 :(得分:2)
首先,查找所有行,然后迭代它们:
List<WebElement> allRows = driver.findElements(By.cssSelector("#table-type-1 > tbody > tr"));
for(WebElement row : allRows){
List<WebElement> cells = row.findElements(By.tagName("td"));
System.out.println("Cell count: " + cells.size());//cell count for a row
}
答案 2 :(得分:2)
HTML <table>
包含3个部分:<thead>
,<tbody>
和<tfoot>
。
通常,您只会看到<thead>
和<tbody>
。
正确的方法是首先确定每个部分,然后逐步完成子元素。
// Get the table
WebElement table = a_chromeWebDriver.findElement(By.id("table-type-1"));
// Get the thead in table
WebElement thead = table.findElement(By.tagName("thead"));
// Get the tbody in table
WebElement tbody = table.findElement(By.tagName("tbody"));
// Get all headers in thead
List<WebElement> allHeaders = thead.findElements(By.tagName("th"));
// Get all rows in tbody
List<WebElement> allRows = tbody.findElements(By.tagName("tr"));
// Get all cells for each row in allRows
for(WebElement row : allRows) {
List<WebElement> allCells = row.findElements(By.tagName("td"));
int rowNum = allRows.indexOf(row) + 1;
System.out.println("Row no. " + rowNum + " has " + allCells.size() +" cells.");
}