无法使用 Capybara 遍历链接数组

Can't iterate over links' array with Capybara

我正在尝试使用 Capybara 遍历 links' 数组。这是 Yahoo 主页,我正在尝试依次检查左侧栏中的所有 link('Mail'、'News'、'Sports' 等)。这是 html('Mail') 的片段:

<a class="ell fz-s " href="http://hsrd.yahoo.com/_ylt=A2KLtiE7CQZVoV8AGBmbvZx4/RV=1/RE=1427668539/RH=aHNyZC55YWhvby5jb20-/RO=2/RU=aHR0cDovL3Nwb3J0cy55YWhvby5jb20v/RS=^ADA0Gc4IcWXarglWyV.UMCa7fh5TLA-"> <i id="nav-sports" class="img-sprite"></i><span>Sports</span></a>

我正在尝试将所有 links 元素推送到一个数组,然后访问它们中的每一个:

page.all('.ell.fz-s').each { |el|
    link = el[:href]
    visit(link)
  }

但它只对第一个 link 起作用,然后就停止了。我做错了什么?

对..所以问题是在您访问第一个 link 之后......您现在位于具有不同 link 的不同页面上,因此指的是 link之后的 s 就中断了(对旧 links 的引用是陈旧的)

您可能需要先取出所有 link - 然后开始访问它们,例如尝试类似的操作:

# pull them out of the page and stuff the actual links away in a separate array
links = page.all('.ell.fz-s').map { |el| el[:href] }

puts links.inspect

links.each do |link|
  visit link
 end

您应该按照 Taryn East 的建议存储 href。

但是您不能只访问 link,还必须访问完整的 url。

links.each do |link|
  visit(url + link)
end

希望对大家有所帮助。