2012-08-03 40 views
9

我想單擊stackoveflow水平菜單上的所有鏈接(問題,標籤,用戶,徽章,未答覆)。我有這個代碼,但是這點擊第一個鏈接(這個鏈接是問題),然後打印1,然後引發錯誤。這可能是什麼問題?高速緩存中找不到元素 - 可能頁面已被更改,因爲它被查找(Selenium :: WebDriver :: Error :: StaleElementReferenceError)

require 'watir-webdriver' 

class Stackoverflow 
    def click_all_nav_links 
    b = Watir::Browser.new 
    b.goto "http://stackoverflow.com" 

    counter = 0 
    b.div(:id => 'hmenus').div(:class => 'nav mainnavs').ul.lis.each do |li| 
     li.a.click 
     puts counter += 1 
    end 
    end 
end 

stackoverflow = Stackoverflow.new 
stackoverflow.click_all_nav_links 

錯誤消息:存儲的元素,然後試圖去到另一頁面後進行訪問時經常發生 https://gist.github.com/3242300

回答

15

的StaleElementReferenceError。在這種情況下,單擊鏈接並導航到新頁面後,對lis的引用將變爲陳舊。

您必須首先存儲lis的屬性或索引。這將允許您在點擊鏈接後獲得每個li的新參考。

試試這個:

class Stackoverflow 
    def click_all_nav_links 
     b = Watir::Browser.new 
     b.goto "http://stackoverflow.com" 

     #Store the text of each locate so that it can be located later 
     tabs = b.div(:id => 'hmenus').div(:class => 'nav mainnavs').ul.lis.collect{ |x| x.text } 

     #Iterate through the tabs, using a fresh reference each time 
     tabs.each do |x| 
      b.div(:id => 'hmenus').div(:class => 'nav mainnavs').ul.li(:text, x).a.click 
     end 
    end 
end 

stackoverflow = Stackoverflow.new 
stackoverflow.click_all_nav_links 
相關問題