【问题标题】:Capybara: to find element within page.all nodeCapybara:在 page.all 节点中查找元素
【发布时间】:2023-04-06 15:57:01
【问题描述】:

案例如下:一个页面上有 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 做过同样的事情,但还没有找到决定。简短的谷歌搜索也没有帮助。

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

  • 以后的代码我需要它
  • 点击后可能有超过 1 个子元素,所以看来我必须在 page.all 节点内进行搜索。

【问题讨论】:

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

标签: rspec capybara


【解决方案1】:

从你的描述来看应该是这样的

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多