element.isDisplayed()和wait.until(ExpectedConditions.visibilityOf(element))之间的区别;

时间:2014-03-06 20:27:03

标签: selenium

我正在尝试使用WebDriver的fluentAPI,并且与可用选项略有混淆。我想等待元素变得可见。我不认为有很多方法可以做到这一点,但我想具体理解以下两种方法之间的区别:

 (1)new FluentWait<WebElement>(webElement).
            withTimeout(timeoutSeconds, TimeUnit.SECONDS).
            pollingEvery(pollingTime, TimeUnit.MILLISECONDS).
            untilwait.until(ExpectedConditions.visibilityOf(element));

(2) public void waitForWebElementFluently(WebElement webElement) {
    new FluentWait<WebElement>(webElement).
            withTimeout(timeoutSeconds, TimeUnit.SECONDS).
            pollingEvery(pollingTime, TimeUnit.MILLISECONDS).
            until(new Predicate<WebElement>() {
                @Override
                public boolean apply(WebElement element) {
                    return element.isDisplayed();
                }
            }
            );
}

使用isDisplayed和visibilityOf?

之间有什么区别?

2 个答案:

答案 0 :(得分:8)

isDisplayed

是否显示此元素?此方法避免了必须解析元素的“样式”属性的问题。 Source


visibilityOf

期望检查已知在页面的DOM上存在的元素是否可见。可见性意味着元素不仅会显示,而且高度和宽度也会大于0。 Source


因此,可见性涵盖了正在显示的元素的条件。

答案 1 :(得分:0)

Amey已经说了最多的话,但是我想补充一点,第一种方法返回你在轮询可见的元素,第二种方法是返回布尔值。 无论如何,我建议使用第一个,因为它已经在处理陈旧,如果你看一下来源:

  public static ExpectedCondition<WebElement> visibilityOfElementLocated(
      final By locator) {
    return new ExpectedCondition<WebElement>() {
      @Override
      public WebElement apply(WebDriver driver) {
        try {
          return elementIfVisible(findElement(locator, driver));
        } catch (StaleElementReferenceException e) {
          return null;
        }
      }