3

这是我没想到会遇到的问题。我正在 Ubuntu 11 上的 Eclipse 中使用 JUnit 4 编写 selenium Webdriver 测试。我一直在使用 Selenium IDE 结合 firebug 和 firepath 来确保我在 JUnit 测试中指定的 xpath 是正确的。我遇到的是 selenium IDE 命令的问题,

command 'click' at target '//span[contains(text(),'MyTarget')]/PATHTOTARGET'

每次都经过。但是,当我在 webdriver 中使用以下内容时,它总是失败

driver.findElement(By.xpath("//span[contains(text(),'MyTarget')]/PATHTOTARGET")).click();

我已经使用 Selenium IDE 和 Selenium Webdriver 几个月了,所以我写了一些点击命令,从来没有遇到过这个问题。任何人都知道可能导致这种情况的原因是什么?

xpath 在刷新时不会更改,每次都有效。我也尝试过等待页面上的所有内容加载而没有运气。

edit1:这是由我们应用程序的 extJS 上下文菜单的工作方式引起的问题。如果您从上下文菜单中选择了一项,我们的应用程序将执行一些导致上下文菜单脱离 selenium 焦点的工作。在选择新菜单项之前添加刷新然后延长等待效果最好。

4

2 回答 2

4

由于您得到的异常是 a StaleElementReferenceException,因此您似乎仍然太快了。解释:

  1. 该元素位于您正在使用的页面上。
  2. 您单击某些东西,页面开始重新加载。
  3. 但是在它重新加载之前,WebDriver 已经找到了你的错误元素(由于某种原因它没有等待上一个操作完成)。
  4. 然后页面最终重新加载,WebDriver 尝试单击先前找到的元素......现在不存在,因为它在前一页上(即使它现在也在那里)。

您需要等待上一个动作完成,最好等待动作的一些结果。屏幕上有什么新东西吗?等待它!

于 2012-11-27T21:12:02.890 回答
3

该帖子很旧,但我在寻找相同问题的答案时遇到了它。所以我的解决方案可能会对某人有所帮助。事实证明,我在页面中有一个框架,并且所需的元素在该框架内。不仅如此,当页面加载时,它不包含任何元素,只链接到框架源。当我添加行 driver.switchTo.frame(0); 一切正常。

于 2014-05-20T16:18:04.293 回答