【问题标题】:Capybara, finding within a css elementCapybara,在 CSS 元素中查找
【发布时间】:2011-11-16 20:38:26
【问题描述】:

我正在使用 Ruby on Rails 3、Cucumber 和 Capybara

我已经搜索了很长时间,但我不知道如何在 css 标记中找到特定的页面元素。就我而言,我需要确保在表格中找到名称,而不是在“欢迎 [名称]”中。

我尝试了类似的方法:

within('table') do
  page.body.index("[Name]")
end

我有一张桌子,上面有id='table'

但我想知道如何对任何 css 元素执行此操作,例如:

within('h2') do
  page.body.should have_content ('stuff')
end

我认为我的问题与 page.body 有关,但我不确定如何将其包含到特定的 css 标记中。

提前致谢!

【问题讨论】:

    标签: ruby-on-rails testing cucumber capybara


    【解决方案1】:

    Capybara 的within 匹配器只匹配第一个结果,所以如果你有多个h2 标签,它只会查找第一个。

    请尝试使用 have_css:text 选项。

    page.should have_css("#table", :text => "[Name]")
    page.should have_css('h2', :text => 'stuff')
    

    【讨论】:

    • 这行得通,有没有一种好方法可以获取找到的元素的索引?所以如果我想比较一个表中两个元素的顺序,我认为最好的方法是找到每个元素的索引,然后比较它们。
    【解决方案2】:

    要查找特定元素:

    page.find('#table').should have_text('stuff')
    

    【讨论】:

    • have_text 不再受支持。请改用 page.find("#table").should have_content('stuff')。
    【解决方案3】:

    我想所有答案都应该有效,但现在 Capybara 不再使用应该使用 expect

    expect(page).to have_css("#table", :text => "[Name]")
    expect(page).to have_css('h2', :text => 'stuff')
    

    【讨论】:

      【解决方案4】:

      我做过这样的事情: page.all(:css, 'button.btn-primary.days.active').size.should == 1

      检查是否有任何元素包含一组特定的类。
      不过,我不需要查找元素的特定文本值。 我只是想确保元素的存在,以及它们有多少。

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 2019-01-03
        • 1970-01-01
        相关资源
        最近更新 更多