代码之家  ›  专栏  ›  技术社区  ›  thisisdude

我想使用fluent wait基于元素存在返回true或false,怎么做?

  •  1
  • thisisdude  · 技术社区  · 5 年前

    我正在使用fluent wait,我看到函数的返回值是webelement。但是,我想根据元素的存在重新运行true或false。我该怎么做?我参考了这一页- https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html

    代码截图在这里-

    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.findElement(By.id("foo"));
         }
       });
    

    我试着换到下面,但它给了我错误-

    类型中的until(函数)方法 wait不适用于参数(new 函数(){}

    这是我改变的-

    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(retryCount, TimeUnit.SECONDS)
                    .pollingEvery(1, TimeUnit.SECONDS).ignoring(NoSuchElementException.class);
    
            Boolean foo = wait.until(new Function<WebElement, Boolean>() {
                public Boolean apply(WebElement by) {
                    return true;
                }
            });
    

    我使用的是番石榴23,硒3,爪哇1.8。

    2 回复  |  直到 5 年前
        1
  •  0
  •   vaibhavc    5 年前

    如果只有元素可见性很重要,请尝试以下操作:

    FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver);
        wait.withTimeout(Duration.ofSeconds(20));
        wait.pollingEvery(Duration.ofSeconds(5));
        wait.ignoring(NoSuchElementException.class);
    
         boolean status = wait.until(new Function<WebDriver, Boolean>() {
            public Boolean apply(WebDriver driver) {
                return driver.findElement(By.name("q")).isDisplayed();
            }
        });
    
        2
  •  0
  •   SKYLINE    5 年前

    findElements()是检查元素存在的一种简单方法

    if(driver.findelements(By.id("foo")).size()>0) {
      //true
    }