gpt4 book ai didi

ruby - 在缓存中找不到元素 - 页面可能在查找后发生了变化(Selenium::WebDriver::Error::StaleElementReferenceError)

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:59 24 4
gpt4 key购买 nike

我正在尝试单击 stackoveflow 水平菜单上的所有链接(问题、标签、用户、徽章、未回答)。我有这段代码,但它点击了第一个链接(这个链接是问题),然后打印 1,然后出现错误。这可能有什么问题?

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

最佳答案

StaleElementReferenceError 通常发生在存储元素然后在转到另一个页面后尝试访问它们时。在这种情况下,在您单击链接并导航到新页面后,对列表的引用将变得陈旧。

您必须先存储关闭属性或列表的索引。这将允许您在单击链接后获得对每个 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

关于ruby - 在缓存中找不到元素 - 页面可能在查找后发生了变化(Selenium::WebDriver::Error::StaleElementReferenceError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11787539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com