Rspec Capybara:在page.all节点中查找元素

Rspec Capybara:在page.all节点中查找元素,rspec,capybara,Rspec,Capybara,情况如下:一个页面上有n个面板。遍历每个面板:单击特定的元素,然后查找其子元素的文本,该文本仅在单击后显示 我可以使用像.has_css?这样的方法,但这对我没有帮助 显然,在这里使用find会很有帮助,但它不适用于Capybara::Node::Element page.all(:css, panelCss).each do |panel| counter+=1 if panel.has_css?(elemCss) Actions.c 'Yay! Found #

情况如下:一个页面上有n个面板。遍历每个面板:单击特定的元素,然后查找其子元素的文本,该文本仅在单击后显示

我可以使用像.has_css?这样的方法,但这对我没有帮助

显然,在这里使用find会很有帮助,但它不适用于Capybara::Node::Element

page.all(:css, panelCss).each do |panel|
    counter+=1
    if panel.has_css?(elemCss)
        Actions.c 'Yay! Found #'+counter.to_s
        res = panel.find(:css, elemCss).text #**should be replaced**
    end
end
就我所记得的,我在过去通过结合capybara和jquery做过同样的事情,但是还没有找到决定。短暂的谷歌搜索也无济于事

当然,我可以直接遍历可点击的元素,单击然后获取子元素的文本,而不是遍历它们的父面板,但有两个原因:

  • 我需要它作为未来的代码
  • 单击后可能有多个子元素,因此我似乎必须在page.all节点中搜索

根据您的描述,它应该是

page.all(:css, panelCss).each do |panel|
  if panel.has_css?(elemToClickCss, wait: false) # assuming panels aren't dynamically loaded
    c = panel.find(:css, elemToClickCss)
    c.click
    res = c.find(:css, clickedObjectsChildCss).text
  end
end

为什么说
find
对Capybara::Node::Element不起作用
find
应该可以在capybara返回的任何元素上调用,并将查找范围限定到该元素。还有,
Actions.c
在做什么?@TomWalpole谢谢,你当然是对的。这只是一个愚蠢的“疲倦的眼睛”错误,与我试图用找到的元素执行的以下操作有关。Actions.c将消息打印到报告中。