Selenium WebDriver,Java:如何通过比较两个元素来确定页面是否完全加载?

时间:2014-10-09 11:36:58

标签: java regex selenium xpath

背景

我正在使用Selenium WebDriver / Java来抓一张桌子。我感兴趣的表分为许多单独的页面(=一个必须单击链接才能看到下一页)。在表的底部是一个不完整的数字索引(整个表是170多页。当你在前20页之一,索引包含第1-20页的链接,当你在第21-40页时, index包含指向第21-40页的链接等)您可以在其中单击特定数字以加载该页面。整个索引位于一个单元格中,例如1 2 ... 20。还有 First Previous 页面, Next Last 页面的链接。

当前页面的/链接数具有特定的类( CurrentPage )。我通过单击 Next 浏览每个页面,这就是问题:当我进入下一页时,如何验证表格是否已完成加载?

通常在这个项目中,为了在Selenium继续之前验证页面是否已完全加载,我使用类似这样的代码:

webDriverBackedSelenium.click(xpathToSomeLink);
new WebDriverWait(driver, normalTimeout).until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpathToSomeElemen)));

现在我的问题/问题:我无法编写可以在上面的代码中使用的XPath。我想我需要的是,在Selenium点击链接后,查看A - 具有 CurrentPage 类的标记的内容,并验证它是否已更改(+1)与点击前相比。

我发现看起来像是一个很好的例子,说明如何编写定位标记内容的XPath http://manual.calibre-ebook.com/xpath.html#selecting-by-tag-content但是当我在Firebug / Firepath中运行他们的示例//h:h2[re:test(., 'chapter|section', 'i')]时,我收到一条错误消息XPath无效。为什么?他们的例子出了什么问题?我如何编写一个可以区分这两种情况的XPath(第一种情况我在第21页,第二种情况是我在第22页):

<table>
    <tr>
        <td>
            <a class="CurrentPage" href="javascript:doPostBack('XXX')">21</a>
            <a class="OtherPage" href="javascript:doPostBack('XXX')">22</a>

<table>
    <tr>
        <td>
            <a class="OtherPage" href="javascript:doPostBack('XXX')">21</a>
            <a class="CurrentPage" href="javascript:doPostBack('XXX')">22</a>

最后一点:我正在使用Selenium从网站上抓取数据,也就是说,重新设计它以使上述更容易,不是一种选择。

3 个答案:

答案 0 :(得分:0)

如果这些只是两个标签,那么请使用css选择器,这样更容易。孩子的数量可以通过一个简单的循环来控制

td a:nth-​​child(2)

答案 1 :(得分:0)

所以你似乎有两个问题:

  1. 我需要一个xpath元素。
  2. 如何确保页面已加载
  3. A1。 xpath将是:

    //a[@class='CurrentPage']
    

    A2。等待页面上的元素可见,例如:

    WebDriverWait wait = new WebDriverWait(driver, 10); //wait however long to ensure it should be loaded
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("CurrentPage")));
    

答案 2 :(得分:0)

我最终使用了这个XPath构造//a[.='17']和类似下面的代码(略微简化):

int nextPageNumber = Integer.parseInt(driver.findElement(By.xpath(linkActivePage)).getText()) + 1)
String xpathToNextPage = "xPathPrefix + "a[.='" + nextPageNumber + "']";
webDriverBackedSelenium.click(linkNextPage);
new WebDriverWait(driver, normalTimeout).until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpathToNextPage)));

似乎工作正常,但我欢迎评论如何改进它!