等待页面加载 HtmlUnitDriver



我有几个使用Selenium和HtmlUnitDriver运行的测试。有时当我运行它们并想单击元素或阅读文本时,找不到元素。每次抛出异常时,我都会保存页面代码以进行调试。但是当我检查代码时,元素就在那里,当我重新运行测试时,一切正常。 我的猜测是,当我尝试访问该元素时,该页面未完全加载。 所以我想等到Selenium完成页面加载后再尝试访问元素。

我喜欢两种实现它的方法:

  1. 执行Javascript(例如window.initComplete)并等待结果为真。问题:在Selenium中,我必须有一个JavascriptExecuter的实例,但HtmlUnitDriver不是从该类派生的,我无法切换到FirefoxDriver(实现JavascriptExecuter接口),因为我们正在运行无头测试。

  2. 等待页面上的最后一个元素加载 这种方法的问题在于页面是基于我们的框架的,如果它发生变化并且页面底部突然有不同的元素,我必须调整每个测试。

关于如何处理这个问题的任何建议?

您可以创建自定义预期条件:

public static ExpectedCondition<Boolean> waitForLoad() {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
}
};
}

最新更新