我们如何使用 selenium 网络驱动程序找到元素的数量
How can we find count of element using selenium web driver
- 导航到 http://www.ksrtc.in/
- 搜索班格洛尔到蒂鲁帕蒂任何日期的巴士
- 在结果页面我没有得到任何公交车的数量。
现在我想从结果页面获取公交车的数量。
我们如何使用 selenium 网络驱动程序找到计数?
这个问题似乎非常局限,但事情是这样的。
首先你需要分析包含数据的 table 的结构,在你的例子中,包含数据的结果 table 没有一个不太好的ID,但是div 包含 table,所以我们必须从那里开始工作。
所以您自然会首先检索 div:
WebElement tableContainer = driver.findElement(By.id("table-container"));
检查 div 的内容后,我们发现它有多个 table,但还有其他内容,所以让我们先解析出 table。
List<WebElement> allTables = tableContainer.findElements(By.tagName("table"));
现在我们有了所有的 table 我们也知道我们需要的 table 没有 ID 而另一个 table 的 ID 为 "table-1" 所以让我们根据这些事实过滤掉它。
WebElement resultTable = null;
for(WebElement table : allTables) {
if("table-1".equalsIgnoreCase(table.getAttribute("id")){
continue;
}
resultTable = table;
break;
}
然后我们可以检索结果的行 table。
List<WebElement> resultRows = resultTable.findElements(By.tagName("tr"));
但稍等! 结果 table 还包含许多实际上不是结果的无用行。因此,让我们锚定结果行中实际存在的内容,例如包含出发时间的 class 名称 "avaiTableHeaderA" 的 TD 元素。
List<WebElement> trueResultRows = new ArrayList<WebElement>();
for(WebElement row : resultRows) {
List<WebElement> rowDataElements = row.findElements(By.tagName("td"));
for(WebElement rowData : rowDataElements) {
if("avaiTableHeaderA".equalsIgnoreCase(rowData.getAttribute("class"))){
trueResultRows.add(row);
break;
}
}
}
现在您已将所有实际结果行放在一个列表中,您可以调用:
trueResultRows.size()
获取返回的结果数量,或对行本身执行各种操作,例如提取特定数据 departure/arrival 次等
- 导航到 http://www.ksrtc.in/
- 搜索班格洛尔到蒂鲁帕蒂任何日期的巴士
- 在结果页面我没有得到任何公交车的数量。
现在我想从结果页面获取公交车的数量。 我们如何使用 selenium 网络驱动程序找到计数?
这个问题似乎非常局限,但事情是这样的。
首先你需要分析包含数据的 table 的结构,在你的例子中,包含数据的结果 table 没有一个不太好的ID,但是div 包含 table,所以我们必须从那里开始工作。
所以您自然会首先检索 div:
WebElement tableContainer = driver.findElement(By.id("table-container"));
检查 div 的内容后,我们发现它有多个 table,但还有其他内容,所以让我们先解析出 table。
List<WebElement> allTables = tableContainer.findElements(By.tagName("table"));
现在我们有了所有的 table 我们也知道我们需要的 table 没有 ID 而另一个 table 的 ID 为 "table-1" 所以让我们根据这些事实过滤掉它。
WebElement resultTable = null;
for(WebElement table : allTables) {
if("table-1".equalsIgnoreCase(table.getAttribute("id")){
continue;
}
resultTable = table;
break;
}
然后我们可以检索结果的行 table。
List<WebElement> resultRows = resultTable.findElements(By.tagName("tr"));
但稍等! 结果 table 还包含许多实际上不是结果的无用行。因此,让我们锚定结果行中实际存在的内容,例如包含出发时间的 class 名称 "avaiTableHeaderA" 的 TD 元素。
List<WebElement> trueResultRows = new ArrayList<WebElement>();
for(WebElement row : resultRows) {
List<WebElement> rowDataElements = row.findElements(By.tagName("td"));
for(WebElement rowData : rowDataElements) {
if("avaiTableHeaderA".equalsIgnoreCase(rowData.getAttribute("class"))){
trueResultRows.add(row);
break;
}
}
}
现在您已将所有实际结果行放在一个列表中,您可以调用:
trueResultRows.size()
获取返回的结果数量,或对行本身执行各种操作,例如提取特定数据 departure/arrival 次等