10.10 Selenium 中的等待页面加载 | Java Debug 笔记

288 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:如何使Selenium 可以等待页面加载?

您如何使Selenium 2.0等待页面加载?

回答1:

您可以使用以下代码检查页面加载

IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));

 wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

评论区指正:这真的一直都有效吗?也许我在您的代码中遗漏了一些东西,但是您的dom正在等待处于就绪状态。请考虑一下,如果您的代码执行得太快,则前一页可能尚未卸载,即使您仍在旧页面上,它也将返回true。您需要做的是等待当前页面卸载,然后调用上面的代码。

回答2:

使用类WebDriverWait

您可以期望显示一些元素。类似于C#:

WebDriver _driver = new WebDriver();
WebDriverWait _wait = new WebDriverWait(_driver, new TimeSpan(0, 1, 0));

_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));

回答3:

您可以删除我写的那些System.out行。它是为调试目的而添加的。

WebDriver driver_;

public void waitForPageLoad() {

    Wait<WebDriver> wait = new WebDriverWait(driver_, 30);
    wait.until(new Function<WebDriver, Boolean>() {
        public Boolean apply(WebDriver driver) {
            System.out.println("Current Window State       : "
                + String.valueOf(((JavascriptExecutor) driver).executeScript("return document.readyState")));
            return String
                .valueOf(((JavascriptExecutor) driver).executeScript("return document.readyState"))
                .equals("complete");
        }
    });
}

回答4:

通常,对于Selenium 2.0,Web驱动程序仅在确定页面已加载后才应将控制权返回给调用代码。如果没有,您可以调用waitforelemement,它会循环调用,直到findelement找到它或超时(可以设置超时)为止。