"过时的元素参考"发现" wait.until(ExpectedConditions.visibilityOfElementLocated"

时间:2015-12-21 18:26:22

标签: java selenium selenium-webdriver

我正在使用Selenium和Java来编写测试。 要查找我使用的网页元素:

wait = new WebDriverWait(driverChrome, 5);
WebElement element= wait.until(ExpectedConditions.visibilityOfElementLocated(By
                .xpath("//td[@class='bla bla']")));

和之后我使用下面的代码双击元素:

action.doubleClick(element).build().perform();

但是会引发stale element reference错误。

当我将visibilityOfElementLocated更改为elementToBeClickable时,它正常工作,

当我在双击之前看到元素时,怎么会发生错误?

1 个答案:

答案 0 :(得分:0)

根据用于构建Web应用程序的框架,完全可以将应用程序重新重绘。我自己遇到的Here is one example。所以你在案件中看到的是:

  1. 您正在等待元素可见。
  2. 绘制了页面,元素可见,您的测试继续进行。
  3. 在计算页面的其他组件后,页面将刷新。来自#2的所有元素都变得陈旧。
  4. 您的测试试图操纵#2中的元素。
  5. 当然,如果永远无法点击,则无法使用ExpectedConditions.elementToBeClickable()ExpectedConditions有许多条件,您需要根据具体情况使用不同的条件。你也可以写custom conditions;谷歌"流利的等待"找到各种例子。

    如果您使用Page Object model,则可以为每个元素干净地封装所有这些内容。