2014-09-22 26 views
0

所以我的代碼是給我[remote server] resource://fxdriver/modules/web-element-cache.js:8325:24:in `fxdriver.cache.getElementAt': Element is no longer attached to the DOM (Selenium::WebDriver::Error::StaleElementReferenceError)哪個元素給StaleElementReferenceError?

有在代碼中使用了多種元素,我想看看哪些元素是給我這個錯誤,所以我可以確保有是它的一個wait

編輯 下面是代碼:

path = [".//*[@id='sub_nav_content']/table/tbody/tr[2]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[3]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[4]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[5]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[6]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[7]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[8]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[9]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[10]/td[3]/a", ".//*[@id='sub_nav_content']/table/tbody/tr[11]/td[3]/a"] 
path.each do |path| 
    begin 
     wait.until { 
      element = browser.find_element(:xpath => path) 
      element if element.displayed? 
     } 
     browser.find_element(:xpath => path).click 
     table = wait.until { 
      element = browser.find_element(id: "possible_matched") 
      element if element.displayed? 
     } 
     if table 
      puts "Table Found" 
     else 
      puts "Table Error" 
     end 
     #creates an 2D array containing patient name, admit date and prints to screen 
     names = browser.find_elements(:xpath => ".//*[@id='possible_matched']/table/tbody/tr/td[1]") 
     name_array = [] 
     names.each { |name| name_array << name.text} 
     admits = browser.find_elements(:xpath => ".//*[@id='possible_matched']/table/tbody/tr/td[5]") 
     admit_array = [] 
     admits.each { |date| admit_array << date.text } 
     name_admit_array = name_array.zip(admit_array) 
     name_admit_array.each do |name, date| 
      puts "#{name}: #{date}" 
     end 
     #finds the location of the sub-array containing patient name and collection associated admit date 
     patient_name = browser.find_element(:xpath => ".//*[@id='dialog-modal-cancel-hl7-preview']/table/tbody/tr[2]/td[1]").text 
     collected_date = browser.find_element(:xpath => ".//*[@id='dialog-modal-cancel-hl7-preview']/table/tbody/tr[2]/td[4]").text 
     puts patient_name 
     puts collected_date 
     mo, da, yr = collected_date.split('/').map(&:to_i) 
     cd = [yr, mo, da] 
     bl = name_admit_array.each_with_index.select { |(name, date), i| 
      m, d, y = date.split('/').map(&:to_i) 
      dt = [y, m, d] 
      name.downcase == patient_name.downcase and (dt <=> cd)<0 
     }.map {|x, i| i } 

     blf = name_admit_array.values_at(*bl) 
     if bl.any? 
      bf = blf.rindex(blf.max) + 2 
      wait.until { 
       element = browser.find_element(:xpath => ".//*[@id='possible_matched']/table/tbody/tr[#{bf}]/td[6]/div/a") 
       element if element.displayed? 
      } 
      browser.find_element(:xpath => ".//*[@id='possible_matched']/table/tbody/tr[#{bf}]/td[6]/div/a").click 
     else 
      browser.find_element(:xpath => "html/body/div[6]/div[1]/a/span").click 
     end 
    end while bl.any? 
end 
+0

請在代碼中添加。通常'StaleElementException'是一個元素的位置,頁面改變,並嘗試在頁面更改後使用元素。由於頁面中的點擊或訪問其他頁面並返回,頁面可能會更改。很可能這可以通過確保在執行對​​頁面進行更改的操作之後獲得對元素的新引用來解決。 – Richard 2014-09-22 16:58:57

+0

添加了代碼。我看到發生了什麼(元素正在被更改,因爲即使xpath保持不變,DOM也會被更新)我只是不知道如何解決它,或者確切地知道它何時發生。 – 2014-09-22 17:47:06

回答

0

檢查錯誤的完整堆棧跟蹤,這將指向引發異常的確切行。

+0

對不起,我在這一切都是全新的。我如何檢查堆棧跟蹤? – 2014-09-23 14:42:48