WebDriver - 等到元素不可见

时间:2015-01-29 21:28:24

标签: java selenium-webdriver webdriver

我在页面页面工厂中定义了元素

@FindBy(xpath = "//*[contains(@style,'gxt/images/default/tree/loading.gif')]")
WebElement treeLoading;

我想等待这个元素消失,ExpectedConditions不支持invisiblityOfElementLocated(WebElement),有没有更好的方法来编写自定义等待?

2 个答案:

答案 0 :(得分:1)

所以,最后我使用流利的等待来找到以下解决方案

protected void waitUntilElementDisappear(final WebElement element){
        try{
              new FluentWait<WebDriver>(driver)
              .withTimeout(10,TimeUnit.SECONDS)
              .pollingEvery(10,TimeUnit.SECONDS)
              .ignoring(NoSuchElementException.class)
              .until(new ExpectedCondition<Boolean>(){
                public Boolean apply(WebDriver driver){
                    return (!element.isDisplayed());                             
                }
              }
            );
        }catch(TimeoutException e){
            fail("Time Out On : "+element);
        }
    }

答案 1 :(得分:0)

令人讨厌的是,pagefactory页面对象不适用于ExpectedConditions。

我使用自定义等待方法(C#/ NUnit)它应该很容易转换为Java:

    public void WaitUntilNotVisible(IWebElement pageObject)
    {
        for (int second = 0; ; second++)
        {
            if (second >= 15) Assert.Fail("Error: Element still visible");
            try
            {
                if (!pageObject.Displayed) break;
            }
            catch (Exception)
            { }
            Thread.Sleep(1000);
        }
    }

此方法适用于隐藏Web元素但仍然存在的位置。如果你想等到元素不再存在,那么你需要捕获NoSuchElementException来打破循环。