Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium element.isDisplayed()和wait.until(ExpectedConditions.visibilityOf(element))之间的差异;_Selenium - Fatal编程技术网

Selenium element.isDisplayed()和wait.until(ExpectedConditions.visibilityOf(element))之间的差异;

Selenium element.isDisplayed()和wait.until(ExpectedConditions.visibilityOf(element))之间的差异;,selenium,Selenium,我正在尝试使用WebDriver的fluentAPI,对可用的选项有点困惑。我想等待一个元素变得可见。我知道有很多方法可以做到这一点,但我想具体了解以下两种方法之间的区别: (1)new FluentWait<WebElement>(webElement). withTimeout(timeoutSeconds, TimeUnit.SECONDS). pollingEvery(pollingTime, TimeUnit.MILLISE

我正在尝试使用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();
                }
            }
            );
}
(1)新的FluentWait(webElement)。
withTimeout(timeoutSeconds,TimeUnit.SECONDS)。
pollingEvery(pollingTime,TimeUnit.ms)。
直到(元素的预期条件、可视性);
(2) public void WaitForWebElement流畅(WebElement WebElement){
新建FluentWait(webElement)。
withTimeout(timeoutSeconds,TimeUnit.SECONDS)。
pollingEvery(pollingTime,TimeUnit.ms)。
直到(新谓词(){
@凌驾
公共布尔应用(WebElement){
返回元素.isDisplayed();
}
}
);
}

使用isDisplayed和visibilityOf的区别是什么?

isDisplayed

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


visibilityOf

检查页面DOM中已知的元素是否可见的期望。可见性意味着不仅显示图元,而且其高度和宽度都大于0。



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

Amey已经说了大部分要说的内容,但我要补充的是,第一个方法在元素可见时返回您正在轮询的元素,第二个方法返回布尔值。 无论如何,我建议您使用first on,因为如果您查看源代码,它已经解决了过时问题:

  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;
        }
      }
public静态预期条件元素的可见性(
最终(由定位器提供){
返回新的ExpectedCondition(){
@凌驾
公共WebElement应用(WebDriver){
试一试{
返回元素ifvisible(findelelement(定位器、驱动程序));
}捕获(StaleElementReferenceException e){
返回null;
}
}