【问题标题】:Selenium FluentWait and element not visible exceptionSelenium FluentWait 和元素不可见异常
【发布时间】:2017-03-22 13:02:50
【问题描述】:

我正在尝试使用 FluentWait 而不是 sleep,这是我的第一次练习。首先,最重要的是,我做得对吗?其次,我通过了两个元素,所以我认为它有点工作(PaymentMethod 按钮和 CheckOut 按钮)。在我实施 FluentWait 之前,它找不到它们。最后它找不到第三个(backToDesktop 按钮)元素。尽管我添加了 wait.ignore(ElementNotVisibleExcecption.class),但始终抛出 Element 不可见。

FluentWait<WebDriver> wait = new FluentWait<WebDriver>(login.getDriver());
    wait.withTimeout(5, TimeUnit.SECONDS);
    wait.pollingEvery(250, TimeUnit.MILLISECONDS);
    wait.ignoring(NoSuchElementException.class);
    wait.ignoring(ElementNotVisibleException.class);

    WebElement paymentMethod = wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return login.getDriver().findElement(By.xpath("//*[@id='paymentMethodHolder']/div[1]/div[1]/button"));
        }
    });
    paymentMethod.click();
    System.out.println("FOUND PAYMENTMETHOD BUTTON");

    WebElement checkOut = wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return login.getDriver().findElement(By.xpath("//*[@id='checout-footer-buttons']/button[2]"));
        }
    });
    checkOut .click();
    System.out.println("FOUND KINNITA BUTTON");

    WebElement backToDesktop= wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return login.getDriver().findElement(By.className("modal-button-text"));
        }
    });
    backToDesktop.click();

    System.out.println("FOUND BACKTODESKTOP BUTTON");

【问题讨论】:

  • 元素在 UI 上是否可见?
  • @xyz 它在到达那部分的那一刻就关闭了,但是是的,它应该是可见的。一点补充。这就是我所做的,它似乎正在工作:wait.ignoring(NoSuchElementException.class, ElementNotVisibleException.class); wait.ignoring(WebDriverException.class);这是否意味着我正在以正确的方式做这件事,还是只是一个幸运的巧合?谢谢!
  • 我认为这种方法可能根本行不通。因为现在我得到元素不可见异常,虽然我有 wait.ignoring(ElementNotVisibleException.class)。
  • wait.ignoring(ElementNotVisibleException.class) 表示即使抛出 ElementNotVisibleException,selenium 也会继续寻找元素。如果元素不可见,它将无法获取元素,无论您添加什么异常到忽略列表。
  • @xyz 是的,我知道,但是它在通过它找到的第二个按钮的第一刻抛出这个异常。它不会等待 5 秒 wait.withTimeout(5, TimeUnit.SECONDS);立即抛出此异常。

标签: java selenium testing


【解决方案1】:

FluentWait 是自定义等待。在大多数情况下,您不需要它。您应该始终从WebDriverWaitExpectedConditions 开始,如果这不起作用,那么也许可以调查FluentWait。我的猜测是像下面这样简单的东西会为你工作。这只是一个例子。您应该查看ExpectedConditions 提供的所有可以等待的不同条件。最常见的可能是等待元素可见或可点击。

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("someId")));

【讨论】:

  • 如果您发现这个(或任何)答案有用,请点赞。如果这回答了您的问题,请接受它作为答案。谢谢!
  • 我做到了。尽管“感谢您的反馈!声望低于 15 人的投票会被记录下来,但不要更改公开显示的帖子得分”。
  • 一切都好。我只是想与网站上较新的人(低代表)分享这些信息。
猜你喜欢
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多