Selenium等待页面源包含

时间:2015-05-04 20:46:48

标签: java selenium selenium-webdriver

我只是想知道是否有一种优雅的方式来利用ExpectedConditions或其他东西让我的代码等待页面的源包含给定的字符串,直到给定的超时。我知道如果我想使用特定元素的定位器......我可以使用这样的东西......

WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("foobar")));

但我想在不使用特定元素的定位器的情况下完成此操作,而只是使用整个页面源作为我的参考。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以等待文档readyState成为complete。对正在加载的网页运行javascript return document.readyState").equals("complete")

void waitForLoad(WebDriver driver) {
    ExpectedCondition<Boolean> pageLoadCondition = new
        ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver driver) {
                return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");
            }
        };
    WebDriverWait wait = new WebDriverWait(driver, 30);
    wait.until(pageLoadCondition);
}

然后你可以获得页面来源:

driver.getPageSource();

然后验证pageSource是否包含您要查找的内容:

driver.getPageSource().contains("your element/tag");

我希望这有帮助!

答案 1 :(得分:0)

不依赖于可见性,您可以检查DOM中是否存在元素:

WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.tagName("html")));

如果要引用单个文本,可以实现ExpectedCondition<T>并创建自己的条件类。提到的接口可以访问WebDriver(由于超级接口com.google.common.base.Function<WebDriver,T>)。

在方法apply中,您可以使用WebDriver和调用方法getPageSource()String显示页面来源。检查String是否有您喜欢的内容。