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

时间:2015-04-09 09:09:54

标签: java selenium-webdriver

  1. 导航至http://www.ksrtc.in/
  2. 从Banglore到Tirupati搜索巴士任何日期
  3. 在结果页面中我没有得到任何公交车计数。
  4. 现在我想从结果页面获取总线数量。 我们如何使用selenium web驱动程序找到计数?

1 个答案:

答案 0 :(得分:1)

这个问题看起来非常本地化,但现在的情况如何。

首先你需要分析包含数据的表的结构,在你的情况下,包含数据的结果表没有一个不太好的ID,但是包含表的div这样做我们必须工作从那起。

很自然地,你首先检索div:

WebElement tableContainer = driver.findElement(By.id("table-container"));

在检查div的内容时,我们看到它有多个表,还有其他东西,所以我们先解析表。

List<WebElement> allTables = tableContainer.findElements(By.tagName("table"));

既然我们已经拥有了所有的表,我们也知道我们需要的表没有ID而另一个表的ID是&#34; table-1&#34;所以,让我们根据这些事实将其过滤掉。

WebElement resultTable = null;
for(WebElement table : allTables) {
    if("table-1".equalsIgnoreCase(table.getAttribute("id")){
        continue;
    }
    resultTable = table;
    break;
}

然后我们可以检索结果表的行。

List<WebElement> resultRows = resultTable.findElements(By.tagName("tr"));

但是等待!结果表还包含许多实际上没有结果的无用行。因此,让我们锚定到结果行中实际存在的内容,例如具有类名&#34; avaiTableHeaderA&#34;的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()

获取返回的结果数量,或者对行本身执行各种操作,例如提取出发/到达时间等特定数据。