2013-07-10 36 views
0

我將查找頁面上的所有li元素,它們在其herf元素中都有唯一的id,其中一些元素被隱藏並且點擊頁面上的更多按鈕可以使它們可見。這裏是代碼:ruby​​ webdriver錯誤:找不到緩存中的元素 - 可能頁面在查找後發生了變化

def open_template id=0 
     sleep 1 
     #try to get all the li elements that has class named like "test..." and put them into a list 
     box_list=browser.lis.find_all { |div| div.class_name =~ /^test/ } 
     sleep 2 
     #go though the list 
     box_list.each do |each| 
     str=each.a.attribute_value("href") 
     #the tid number of the element should match to id 
     if /\?tid=\d+/.match(str)[0].gsub!("?tid=", "").to_i==id 
      # if the element is hidden, should click the "more" button and get into another page 
      if each.attribute_value("style")=="display: none;" 
       each.parent.parent.div(class: "title_me_h").a(class: "more").click 
       sleep 2 
       # begin the same thing on the new page 
       open_template(id) 
      end 
      begin 
       #if the element matchs and isn't hidden, do a click   
       each.a(class: "li_box_cj").wait_until_present 
       each.a(class: "li_box_cj").click 
      rescue Exception => e 
       puts "ERROR: #{e.message}"    
      end 
      break 
     end 
     end 
    end 

當我試圖找到一個隱藏的li元素,執行後,我得到了高速緩存錯誤未找到元素的代碼,但最後的動作「點擊」被處決。我不明白爲什麼,有誰能給我一些提示?我已閱讀所有有關stackoverflow的相關問題,但沒有得到答案。謝謝你的提前。

+1

單擊之後,DOM會更改(使li可見),但您嘗試循環的列表在單擊之前生成,因此異常是拋出。 –

+0

非常感謝您的回覆,我的代碼中存在邏輯錯誤,需要一個「其他」才能跳出循環,非常感謝您 – user2256777

回答

0
def open_template id=0 
    sleep 1 
    box_list=browser.lis.find_all { |div| div.class_name =~ /^test/ } 
    sleep 2 
    box_list.each do |each| 
    str=each.a.attribute_value("href") 
    if /\?tid=\d+/.match(str)[0].gsub!("?tid=", "").to_i==id 
     if each.attribute_value("style")=="display: none;" 
      each.parent.parent.div(class: "title_me_h").a(class: "more").click 
      sleep 2 
      open_template(id) 
     #add else here to break out of the loop 
     else 
     begin 
      #if the element matchs and isn't hidden, do a click   
      each.a(class: "li_box_cj").wait_until_present 
      each.a(class: "li_box_cj").click 
     rescue Exception => e 
      puts "ERROR: #{e.message}"    
     end 
     end 
     break 
    end 
    end 
end 
相關問題