gpt4 book ai didi

java - Selenium 使用 JavascriptExecutor 等待页面完全加载

转载 作者:行者123 更新时间:2023-12-02 11:29:15 24 4
gpt4 key购买 nike

给定一个网站,页面上有 AJAX 组件,我需要等到整个页面完全加载。

这是我使用 JavascriptExecutor 检查 document.readyState 的等待方法:

public void waitForLoading2() {
WebDriverWait wait = new WebDriverWait(driver, timeOut);
if(!driver.findElements(By.xpath("//*[@id='wait'][contains(@style, 'display: block')]")).isEmpty()) {
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='wait'][contains(@style, 'display: none')]")));
}

ExpectedCondition<Boolean> expectation = new
ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equalsIgnoreCase("complete");
}
};
wait.until(expectation);

}

有时会失败并显示以下错误消息:

org.openqa.selenium.JavascriptException: JavaScript error (WARNING: The server did not provide any stacktrace information)

我在这里错过了什么?我的假设是 document.readyState 很常见并且始终可以检查。

谢谢

最佳答案

还有更多complex options ,比如这个

public static void waitForAjax(WebDriver driver, String action) {
driver.manage().timeouts().setScriptTimeout(5, TimeUnit.SECONDS);
((JavascriptExecutor) driver).executeAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"var xhr = new XMLHttpRequest();" +
"xhr.open('POST', '/" + action + "', true);" +
"xhr.onreadystatechange = function() {" +
" if (xhr.readyState == 4) {" +
" callback(xhr.responseText);" +
" }" +
"};" +
"xhr.send();");
}

按顺序

to wait till the whole page is fully loaded

但是下面的方法对我有用 - 我检查是否有正在进行的 AJAX 调用并等待这些调用完成:

JavascriptExecutor js = (JavascriptExecutor) driverjs;
js.executeScript("return((window.jQuery != null) && (jQuery.active === 0))").equals("true");

关于java - Selenium 使用 JavascriptExecutor 等待页面完全加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com