如何等到整个页面加载?

时间:2016-05-24 13:12:14

标签: javascript internet-explorer selenium-webdriver

页面上等待元素时出现问题。

页面包含20个项目的列表 我可以设置100代替20并使用JS重新加载页面(子框架正在重新加载)

然后我收到一个错误: 元素不再有效

moveTNVPage.switchToThisPage();
moveTNVPage.selectQuantity();
waitForPageLoad();
moveTNVPage.selectEnabledCheckBox(wait);

waitForPageLoad():

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");
            }
        });
    }
@BeforeTest中的

我已经设定:

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    driver.manage().timeouts().setScriptTimeout(5, TimeUnit.SECONDS);
    driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);

只有很长时间的thread.sleep()可以帮助解决这个问题 但是在不同的测试环境中我需要不同的thread.sleep!

我怎么能避免thread.sleep ???? 我试过用

wait.until(ExpectedConditions ... ...)

这也没有帮助。

B.R。 安东

2 个答案:

答案 0 :(得分:1)

这就是我使用的:

public 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, 60);
    wait.until(pageLoadCondition);
}

从语句中可以清楚地看出,这等待文档状态完成。 目前超时设置为60秒,可以更改。

您只需要在需要等待页面加载的地方使用waitForLoad(driver);来调用它。

答案 1 :(得分:0)

这允许仅在页面加载时执行内部操作:

document.ready(function(){

    // Your code

});

这是一种设置延迟的方法:

delay = 500;    //  <-- This is in milliseconds
setTimeout(function(){

    // Your code to be executed after the delay

},delay);

您可以在setTimeout() ...

中使用document.ready()