【问题标题】:Iterating through items in Capybara遍历 Capybara 中的项目
【发布时间】:2012-09-07 19:39:24
【问题描述】:

我有一个包含多个.block 类元素的页面。在 Capybara 中,我希望能够在完成一个动作之前循环并引用这个类的每个元素。

但是,到目前为止,我尝试过的所有代码都没有奏效。这是我尝试过的:

within('.block:nth-child(1)') do
  find('.Button').click
end

page.find('.block').all.first.find('Button').click

page.find('.block').all[1].find('Button').click

有什么想法吗?

【问题讨论】:

    标签: loops iteration capybara


    【解决方案1】:

    您想使用all 方法(请参阅http://rubydoc.info/github/jnicklas/capybara/Capybara/Node/Finders#all-instance_method)。

    使用类'block'输出每个元素的文本(即迭代)的示例是:

    page.all(:css, '.block').each do |el|
        puts el.text
    end
    

    page.all 返回匹配元素的数组。所以如果你只想要第二个匹配元素,你可以这样做:

    page.all(:css, '.block')[1]  #Note that it is 0-based index
    

    【讨论】:

    • 谢谢。我将如何使用它来仅引用第二个元素?我可以看到如何引用第一个,但之后不能引用任何其他
    • page.all 将返回匹配元素的数组,因此您可以使用标准数组方法。示例添加到答案。
    • 嗨贾斯汀,我是一个不同的人,有同样的问题。尝试使用puts el.text 解释的第一种方法,但得到#<Enumerator:0x2aee5c0>。你知道为什么会这样吗?
    • 嗨@mickael。我无法重现您的问题。您能否打开一个新问题并包含一个示例 html 和重现您的问题的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 2015-06-16
    相关资源
    最近更新 更多