【问题标题】:Assert element no longer present断言元素不再存在
【发布时间】:2014-01-10 22:34:51
【问题描述】:

使用 webdriver 并测试使用 gwt 构建的应用程序。我想首先断言一个元素变得存在。这个元素是动态加载的,测试起来并不简单。但是我需要断言该元素不再存在。因为它不再存在于dom中。我最初的方法是建立一个 ExpectedCondition 然后等待条件,即

 ExpectedCondition e = new ExpectedCondition() {
        公共布尔应用(WebDriver d){
            return d.findElements(By.cssSelector(someCSSpath)).size() == 0;
    }};

    WebDriverWait 等待 = 新的 WebDriverWait(驱动程序, 15);
    等待。直到(e);

我预计会等待 15 秒以使元素从 dom 中消失,我预计它将每 500 英里轮询一次。我希望在每次轮询中,布尔值都会为假,因为元素会被发现,直到它消失并且条件变为真。我在输出中发现的是,它确实每 500 英里轮询一次,但是一旦条件变为真,我实际上会等待一整分钟,然后再进行下一步。这似乎是不正确的行为,我错过了什么吗?有什么建议吗?

【问题讨论】:

  • 根据文档 JavaDoc for WebDriverWait 这个特定的构造函数有 2 个参数,第二个参数是 long 并且以秒为单位。
  • 您是否指定了隐式等待?如果是,您可能需要在这种情况下将其关闭,因为 findElements() 将等待(在隐式等待期间)元素至少存在一次。

标签: webdriver


【解决方案1】:

尝试使用:ExpectedConditions.stalenessOf(..) 来检查元素是否已成功从 DOM 中删除。对我有用。

【讨论】:

    【解决方案2】:

    您是否将“implicitlyWait”设置为 60 秒?

    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    

    当对象消失时,它会在“findElements”方法上等待 60 秒,然后才返回。

    我建议在运行“wait.until(e);”之前将“implicitlyWait”设置为 0;方法,然后将其设置回 60 秒。

    【讨论】:

      【解决方案3】:

      如果您掌握了 WebElement 的句柄,则可以使用它。

      new WebDriverWait(driver, 2).until(ExpectedConditions.stalenessOf( webElement ));

      【讨论】:

        猜你喜欢
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多