0

我想等待页面完全加载。我知道我可以通过等待页面元素加载来做到这一点。

但我想要更通用的东西,我假设 Favicon 可用于确定页面是否已完全加载。

如何确定 FavIcon 是否已使用 Selenium Webdriver 加载到页面中?

“我知道这只是您的 HTML 源代码中的另一个元素。但是如果您查看任何网页上的页面加载,Favicon 将是最后一个加载的。如果有办法等到 Favicon 加载到网页,我们可以将其用作等待页面加载来测试整个应用程序(Web 应用程序的所有网页上的 Favicon 都相同)。”

4

1 回答 1

1

我不确定等待 favicon 是否是个好主意。不同的应用程序使用不同的技术,而且IMO 不可能有一个通用的等待可以适用于所有 Web 应用程序。以下是我用于“我的”应用程序的内容。这给了你一个想法。您需要构建适合“您的”应用程序的内容。

public void my_generic_wait_for_page_load() {
 final WebDriverWait wait = new WebDriverWait(this.getDriver(), 300);
 final JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
 final ExpectedCondition<Boolean> jQueryActive_toBeZero = new ExpectedCondition<Boolean>() {
    @Override
    public Boolean apply(WebDriver driver) {
        try {
             return ((Long) jsExecutor
                            .executeScript("return jQuery.active") == 0) ? true
                            : false;
        } catch (final WebDriverException e) {
        log.warn("It looks like jQuery is not available on the page, skipping the jQuery wait, check stack trace for details",e);
            return true; //skip the wait
        }
    }
};
   final ExpectedCondition<Boolean> document_readyState_toBeComplete = new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                return jsExecutor.executeScript("return document.readyState")
                        .toString().equals("complete") ? true : false;
            }
        };
        wait.until(jQueryActive_toBeZero);
        wait.until(document_readyState_toBeComplete);

 }
于 2013-03-10T23:02:01.977 回答