我只是想知道是否有一种优雅的方式来利用ExpectedConditions
或其他东西让我的代码等待页面的源包含给定的字符串,直到给定的超时。我知道如果我想使用特定元素的定位器......我可以使用这样的东西......
WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("foobar")));
但我想在不使用特定元素的定位器的情况下完成此操作,而只是使用整个页面源作为我的参考。有什么建议吗?
答案 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
是否有您喜欢的内容。