Rspec 用水豚检查能见度

Rspec 用水豚检查能见度,rspec,capybara,Rspec,Capybara,我试图编写一些RSpec来验证div是否在定义的环境下可见,但我很难做到这一点 为了弄清楚如何使它工作(在真实的代码中,我有一段添加CSS类的JS),我硬编码了所有内容,但可见性检查仍然不起作用 代码看起来像 #CSS .hidden { display: none; } .visible { display: block; } #HTML <div id="blah" class="hidden">blah</div> #RSpec scenario

我试图编写一些RSpec来验证
div
是否在定义的环境下可见,但我很难做到这一点

为了弄清楚如何使它工作(在真实的代码中,我有一段添加CSS类的JS),我硬编码了所有内容,但可见性检查仍然不起作用

代码看起来像

#CSS
.hidden {
  display: none;
}

.visible {
  display: block;
}


#HTML
<div id="blah" class="hidden">blah</div>


#RSpec
scenario 'blah blah' do
  expect(find('#blah').visible?).to be false
end
更新1:我正在使用SeleniumWebDriver

#rails_helper
...
require 'selenium-webdriver'
...
更新2:更新的HTML

我有什么遗漏吗? 如何检查可见性


谢谢(礼貌第一)

既然您是从水豚开始的,我猜您是在使用机架测试驱动程序。机架测试驱动程序非常基本,不处理大多数CSS。就可视性而言,它只会处理
hidden
属性和内联
display:none
样式。如果您使用一种更高级的驱动程序(selenium、poltergeist、capybara webkit),那么CSS将得到完全处理

接下来要注意的是(默认情况下)Capybara将只查找可见元素,因此
find(“#blah')
将返回可见元素或引发Capybara::ElementNotFound异常。如果需要断言页面上某个元素的存在/不存在,可以执行以下操作

expect(page).to have_css('#blah') #check the element exists and is visible
expect(page).not_to have_css('#blah') #check element doesn't exist or is non-visible
另一个选项是使用
visible
选项来更改仅查找可见元素的默认行为,尽管这通常是一个不必要的测试,因为从用户的角度来看,如果元素不可见,它是否存在并不重要(因此水豚的默认行为是只查找可见元素)


谢谢你的帮助。我尝试了你的最新建议,但当我运行它时,我得到了
期望找到css“#废话”但是没有匹配项。
。我也尝试过使用
Capybara.ignore\u hidden\u elements=false
,但我得到了相同的结果。另请参阅UPDATE1。@macsig-1st-在测试应用程序时不要使用ignore\u hidden\u elements=false,你会后悔的。2nd-仅仅因为你需要selenium webdriver并不意味着你正在使用selenium driver-除非你已经用
js:true
元数据标记了你的测试,或者设置了
Capybara.default\u driver=:selenium
你仍然在使用rack test。你可以知道,因为在使用rack test时,不会打开运行你的测试的浏览器。-3-如果你正在使用selenium,第一个会给出错误,因为元素是隐藏,因此您必须更具体地了解您尝试的建议。传统上,div需要一些内容,或者将维度设置为可见
expect(page).to have_css('#blah') #check the element exists and is visible
expect(page).not_to have_css('#blah') #check element doesn't exist or is non-visible
expect(page).to have_css('#blah', visible: :hidden) # check but the element exists but is non-visible