在自动搜索功能时,输入一些搜索关键字并单击“搜索”按钮,结果需要加载到网格中。在fallowing div中加载和显示“Loading ...”文本需要几秒钟的时间。
<div id="loadmask-1027-msgTextEl" class="x-mask-msg-text">Loading...</div>
我怎么能等到这条消息消失。
答案 0 :(得分:3)
Webdriver内置了等待功能,您只需要在等待的条件下构建。
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return (driver.findElements(By.id("xx")).isEmpty());
}
});
您需要替换 By.id(“xx”),但要确定您期望去的元素。
答案 1 :(得分:0)
您可以创建一种方法来识别元素是否存在。将此逻辑放在循环中并等待一秒钟,然后再进行下一次迭代。在完全从循环中断开之前,您可能需要等待10到15秒。如果元素消失,那么它将抛出异常。你可以使用try catch和catch,你可以打破循环。这将确保代码实际等待元素消失或最多10到15秒。
答案 2 :(得分:0)
这适用于selenium 2.4.0所有其他解决方案都有漏洞。 apply方法不能返回布尔值,它必须返回一个WebElement。 API文档也不正确。这是正确的代码。
final public static boolean waitForElToBeRemove(WebDriver driver, final By by) {
try {
driver.manage().timeouts()
.implicitlyWait(0, TimeUnit.SECONDS);
WebDriverWait wait = new WebDriverWait(UITestBase.driver,
DEFAULT_TIMEOUT);
boolean present = wait
.ignoring(StaleElementReferenceException.class)
.ignoring(NoSuchElementException.class)
.until(ExpectedConditions.invisibilityOfElementLocated(by));
return present;
} catch (Exception e) {
return false;
} finally {
driver.manage().timeouts()
.implicitlyWait(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
}
}
答案 3 :(得分:0)
Java中的另一种方法,如果当前的代码示例不适合您,那么没有&#34;等待&#34; -Selenium的方法。 我正在使用WebDriver和JUnit:
public void waitForElementToDisappear() throws InterruptedException{
//try for 5 seconds
for(int i=0;i<=5;++i){
if(driver.findElements(By.xpath(<elementExpectToDisappear>)).isEmpty()){
//here your code, if element finally disappeared
break;
}else{
Thread.sleep(1000);
}
if(i==5)
fail("element not disappeared within 5 seconds");
}
}
答案 4 :(得分:0)
这是我在Kotlin中使用的方法,并且有效:
wait?.until(ExpectedConditions.invisibilityOf(driver.findElement(By.id("progress_bar"))))