所以我的代碼是給我[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
請在代碼中添加。通常'StaleElementException'是一個元素的位置,頁面改變,並嘗試在頁面更改後使用元素。由於頁面中的點擊或訪問其他頁面並返回,頁面可能會更改。很可能這可以通過確保在執行對頁面進行更改的操作之後獲得對元素的新引用來解決。 – Richard 2014-09-22 16:58:57
添加了代碼。我看到發生了什麼(元素正在被更改,因爲即使xpath保持不變,DOM也會被更新)我只是不知道如何解決它,或者確切地知道它何時發生。 – 2014-09-22 17:47:06