等待司机直到一个元素消失

时间:2014-01-07 11:04:19

标签: java selenium

在自动搜索功能时,输入一些搜索关键字并单击“搜索”按钮,结果需要加载到网格中。在fallowing div中加载和显示“Loading ...”文本需要几秒钟的时间。

<div id="loadmask-1027-msgTextEl" class="x-mask-msg-text">Loading...</div>

我怎么能等到这条消息消失。

5 个答案:

答案 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"))))