我们正在为Web应用程序进行自动化,大多数情况下加载图标都会出现在页面的中心..我们需要等待dis出现加载图标
<div id="loading" style="display: none; visibility: hidden;">
<div></div>
<div></div>
示例:我们在大多数情况下都拥有搜索功能,我们正在获取此加载图标。
我们正在使用的selenium webdriver:我们正在加载完成的ID是id =&#34; loading&#34; ..请为上述问题提供解决方案。
我们有不同的功能,例如点击和放大的SendKeys
答案 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());
}
};
}