等待" loading"图标从页面中消失

时间:2014-08-11 09:21:59

标签: selenium selenium-webdriver webdriver

我们正在为Web应用程序进行自动化,大多数情况下加载图标都会出现在页面的中心..我们需要等待dis出现加载图标

<div id="loading" style="display: none; visibility: hidden;">
<div></div>
<div></div> 

示例:我们在大多数情况下都拥有搜索功能,我们正在获取此加载图标。

我们正在使用的selenium webdriver:我们正在加载完成的ID是id =&#34; loading&#34; ..请为上述问题提供解决方案。

我们有不同的功能,例如点击和放大的SendKeys

3 个答案:

答案 0 :(得分:4)

显式等待应该有所帮助:

public static String waitForElementNotVisible(int timeOutInSeconds, WebDriver driver, String elementXPath) {
    if ((driver == null) || (elementXPath == null) || elementXPath.isEmpty()) {

        return "Wrong usage of WaitforElementNotVisible()";
    }
    try {
        (new WebDriverWait(driver, timeOutInSeconds)).until(ExpectedConditions.invisibilityOfElementLocated(By
                .xpath(elementXPath)));
        return null;
    } catch (TimeoutException e) {
        return "Build your own errormessage...";
    }
}

答案 1 :(得分:1)

我最近遇到过这个问题。我的解决方案可能听起来 hacky 但在我的情况下它的效果非常好:

public static void loadingWait(WebDriver driver, WebElement element) {
    WebDriverWait wait = new WebDriverWait(driver, 5000L);
    wait.until(ExpectedConditions.visibilityOf(loader)); // wait for loader to appear
    wait.until(ExpectedConditions.invisibilityOf(loader)); // wait for loader to disappear
}

单击提交按钮后可以调用此方法。您必须将driver和loader web元素传递给此方法。

答案 2 :(得分:0)

您也可以等到ajax呼叫完成。所有ajax调用完成后(在大多数情况下),加载轮消失:

WebDriverWait wait = new WebDriverWait(d, timeOutSeconds);
wait.until(waitForAjaxCalls()); 

public static ExpectedCondition<Boolean> waitForAjaxCalls() {
        return new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                return Boolean.valueOf(((JavascriptExecutor) driver).executeScript("return (window.angular !== undefined) && (angular.element(document).injector() !== undefined) && (angular.element(document).injector().get('$http').pendingRequests.length === 0)").toString());
            }
        };
    }