2011-11-26 83 views
4

我使用以下规格与MiniTest::SpecCapybara水豚field.has_css?匹配器

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

检查,如果所谓的“电子邮件”现场有autofocus属性。该doc说以下内容:?

has_css(路径,选择= {})

检查,如果给定的CSS选择器的页面或当前节点上。

据我所知,字段'电子邮件'是一个节点,因此调用must_have_css应该肯定工作!我做错了什么?

回答

7

通过Jonas Nicklas得到了一个答案:

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

您可以试试:

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

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


我的解决办法:

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

虽然我理解@jnicklas的论点,认为'''has_css?'''应该只适用于后代,那么拥有'''''''''匹配器(类似于[jQuery.is()] http://api.jquery.com/is/))适用于当前元素。 – gmcnaughton

+1

请参阅https://gist.github.com/3976287了解添加'''match_selector?''和'''match_css?'''matcher的猴子补丁。原始代码可以写成'''find_field('Email')。must_match_css('[autofocus]')'''(未经测试...) – gmcnaughton

+0

不错!谢谢:) –

0

关闭我的头顶。你可以使用has_selector?()。使用Rspec的机智CAPY:

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

还要检查水豚匹配器http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers

+0

看起来前途无量,但遗憾的是没有在所有的工作。 ( –

+0

)您是否为此电子邮件字段声明了具有'autofocus'设置的CSS类?如果是这样,您可以使用此类来检查“email”字段,例如:'page.should have_selector('email.autofocused ')。'autofocused'是你的CSS类。 ' –

+0

自动对焦是**不是** CSS,它是HTML标准。 –

0

我没有用之前MINITEST但是你用于检查属性语法看起来是正确的。

我担心你使用find_field。该文档说:

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

它看起来像你试图找到基于标签的字段。如果是的话,我会检查你是否有for属性,并且它有你正在寻找的表单字段的正确ID。为了排除这个问题,你可以暂时把你的表单字段标记为id并明确地查找。