2012-11-27 146 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); 一切正常。