使用:
Ruby: ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]
Rails: 3.2.9
Capybara: 2.0.3
我有一个Rails应用程序,其中有一个链接,单击该链接应提交AJAX发布请求并返回JS响应。
链接代码:
link_to("Send Notification", notification_path(user_id: user_id), remote: true, method: :post)
JS响应(.js.haml文件)应在链接存在的页面上切换以下隐藏的div:
js.haml文件内容:
:plain
var notificationStatusContainer = $('#notification_status');
notificationStatusContainer.val("#{@notification_status_msg}");
notificationStatusContainer.show();
我正在测试使用黄瓜发送通知并向用户显示通知状态消息的场景(带有内置Capybara支持的黄瓜导轨宝石)
我试图测试具有ID:notification_status的元素在步骤定义中成功响应时可见,为此,我尝试了以下语句:
page.find('#notification_status').should be_visible
page.should have_selector('#notification_status', visible: true)
page.should have_css('#notification_status', visible: true)
page.find('#notification_status', visible: true)
page.find(:css, 'div#notification_status', visible: true)
以上都不是我的工作,也没有使我成功。以上列出的5个片段中,最后4个片段失败,并出现以下错误:
'expected to find css "#notification_status" but there were no matches. Also found "", which matched the selector but not all filters. (Capybara::ExpectationNotMet)'
这很奇怪,因为以下语句正确传递了:
page.has_selector?('#notification_status')
实际上,我使用
print page.html
出现了
<div style='' id='notification_status'></div>
这是预期的。
最终,我发现此链接的“水豚”断言了元素的属性,从而展示了如何以原始方式检查元素的属性。
我也可以在Capybara文档中找到可见的内容吗?方法(http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#visible%3F-instance_method)以下信息:
Not all drivers support CSS, so the result may be inaccurate.
因此,我得出的结论是,在测试某个元素的可见性时,不依赖于Capybara可见性的结果吗?使用CSS选择器并使用链接Capybara中建议的解决方案时的方法断言元素的属性
我想出了以下几点:
module CustomMatchers
def should_be_visible(css_selector)
find(css_selector)['style'].should_not include('display:none', 'display: none')
end
end
World(CustomMatchers)
用法:
should_be_visible('#notification_status')