我们如何使用 selenium 网络驱动程序找到元素的数量

How can we find count of element using selenium web driver

  1. 导航到 http://www.ksrtc.in/
  2. 搜索班格洛尔到蒂鲁帕蒂任何日期的巴士
  3. 在结果页面我没有得到任何公交车的数量。

现在我想从结果页面获取公交车的数量。 我们如何使用 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 次等