2012-11-27 96 views
3

这是我不希望遇到的问题。 我在Ubuntu 11的eclipse上编写了一个在Eclipse中使用JUnit 4的硒Webdriver测试。我一直在使用Selenium IDE与firebug和firepath结合,以确保我在JUnit测试中指定的xpath是正确的。我遇到的问题是硒IDE的命令,Selenium WebDriver无法找到Selenium IDE可以找到的元素

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

每次都通过。然而,当我使用webdriver的下面总是

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

我一直使用硒IDE和硒的webdriver了几个月现在这么写了我的点击命令的份额,并从未遇到这样的失败。任何人都有一个想法可能会导致这种情况?

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

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

+0

什么是隐式等待设置?顺便说一下,如果你遇到困难,你总是可以从'WebDriver'中检索完整的页面源代码。 – biziclop

+0

感谢您的评论!隐式等待设置为30秒。我将研究如何从WebDriver查看页面源代码。 – OrwellHindenberg

+0

它是'WebDriver.getPageSource()',应该与'FirefoxDriver'一起工作 – biziclop

回答

4

由于你得到的例外是StaleElementReferenceException,似乎你仍然太快。说明:

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

你需要等待前一个动作完成,最好是等待行动的一些结果。屏幕上有新的东西吗?等等吧!

+0

是的,有时我把findElement放在try-while循环中直到找到。 – djangofan

2

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

相关问题