Capybara field.has_css?匹配

时间:2011-11-26 23:21:45

标签: ruby ruby-on-rails-3 capybara minitest

我在MiniTest::SpecCapybara使用以下规范:

find_field('Email').must_have_css('[autofocus]')

检查名为“电子邮件”的字段是否具有autofocus属性。 doc表示以下内容:

  

has_css?(path,options = {})

     

检查给定的CSS选择器是否在页面或当前节点上。

据我了解,字段'Email'是一个节点,因此调用must_have_css绝对可以正常工作!我做错了什么?

3 个答案:

答案 0 :(得分:8)

通过Jonas Nicklas得到答案:

  

不,它应该不起作用。 has_css?将检查是否有任何后代   元素的匹配与给定的CSS匹配。它不会检查元素   本身。由于自动对焦属性可能在电子邮件字段中   has_css?在这种情况下,它总是会返回false。

     

您可以尝试:

find_field('Email')[:autofocus].should be_present
     

这也可以用XPath完成,但我不记得语法了   我的头顶。


我的解决方案:

find_field('Email')[:autofocus].must_equal('autofocus')

答案 1 :(得分:0)

脱离我的头顶。你能用has_selector?()吗?将Rspec与Capy一起使用:

page.should have_selector('email', autofocus: true)

同时检查Capybara匹配器http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers

答案 2 :(得分:0)

之前我没有使用过MiniTest,但检查属性的语法看起来是正确的。

我关心的是你使用find_field。文档说:

  

在页面上查找表单字段。该字段可以通过其名称,标识或标签文本找到。

看起来您正在尝试根据标签查找字段。如果是这样,我会检查你有for属性,并且它具有你正在寻找的表单字段的正确id。为了排除这个问题,你可以暂时为你的表单字段打一个id并明确地查找它。