webdriver中显式等待和流畅等待有什么区别?

时间:2015-03-04 11:24:37

标签: java selenium selenium-webdriver webdriver

以下是我的代码

public boolean waitForElementToBeClickable(String xpathValue){

        Boolean flag = false;
        WebElement myDynamicElement = (new WebDriverWait(Base.base.getDriver(), 30))
                  .until(ExpectedConditions.elementToBeClickable(By.xpath(xpathValue)));
        flag = true;
        return flag;

    }

此等待元素出现30秒,如果元素在30秒之前就绪,则执行下一个命令。

但是当我使用下面的代码进行流畅的等待时

public Boolean waitForElementToAppear(final WebElement e){

         Wait<WebElement> wait = new FluentWait<WebElement>(e)
                 .withTimeout(30, TimeUnit.SECONDS)              
                 .pollingEvery(2, TimeUnit.SECONDS)
                 ;

         Boolean foo = wait.until(new Function<WebElement, Boolean>() {
             public Boolean apply( WebElement element) {

               return element.isDisplayed();
             }
           });
        return foo;
         }

它说没有这样的元素异常,它甚至不等待30秒,它会立即抛出异常。

有人可以告诉它有什么问题吗?

1 个答案:

答案 0 :(得分:0)

通常当您使用FluentWait时,您必须在等待期间至少忽略NoSuchElementException

像这样:

Wait<WebElement> wait = new FluentWait<WebElement>(e)
             .withTimeout(30, TimeUnit.SECONDS)              
             .pollingEvery(2, TimeUnit.SECONDS)
             .ignoring(NoSuchElementException.class);