这是我没想到会遇到的问题。 我正在 Ubuntu 11 上的 eclipse 中使用 JUnit 4 编写 selenium Webdriver 测试。我一直在使用 Selenium IDE 结合 firebug 和 firepath 来确保我在 JUnit 测试中指定的 xpaths 是正确的。我遇到的问题是 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 的焦点。在选择新菜单项之前添加刷新并长时间等待效果最好。
最佳答案
因为您得到的异常是 StaleElementReferenceException
,看来你还是太快了。说明:
- 该元素位于您正在使用的页面上。
- 点击某处,页面开始重新加载。
- 但在重新加载之前,WebDriver 已经找到了您的错误元素(由于某种原因它没有等待上一个操作完成)。
- 然后页面最终重新加载,WebDriver 尝试点击之前找到的元素......但现在不存在了,因为它在上一页上(即使它现在也在那里)。
您需要等待前一个 Action 完成,最好是等待 Action 的某些结果。屏幕上有什么新东西吗?等等!
关于java - Selenium WebDriver 无法定位 Selenium IDE 可以定位的 Element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591933/