繁体   English   中英

如何在 Selenium 中使用 JavaScript 等待页面完全加载

[英]How to wait for page to load completely using JavaScript in Selenium

我正在尝试让页面在执行操作之前完全加载。 我不想在浏览器选项卡上的加载圆圈仍在转动时开始操作。 我的等待 ajax 功能在某些情况下不起作用,尤其是对于新页面加载。 我的函数是基于 JQuery 的:

JavascriptExecutor jsDriver = (JavascriptExecutor) webDriver;
boolean stillRunningAjax = (Boolean) jsDriver
        .executeScript("return window.jQuery != undefined && jQuery.active != 0");
return !stillRunningAjax;

如果这是错误的,请再次运行它。

但是对于页面加载,在它返回 true 之后,浏览器仍在加载(加载循环正在转动)几秒钟(有时更多)。

我已经尝试过 implicitlyWait 但它与我的函数同时停止了该函数。

有人说硒没有完整的解决方案。 但应该有。 也许一个包含 JavaScript 的解决方案,任何东西。

使用 javascript 等待页面加载:

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);
}

如果您正在等待 ajax 在页面上显示元素,则可以等待元素本身。

WebElement myDynamicElement = (new WebDriverWait(driver, 10))
 .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM