我试图写一些RSpec来验证div
在定义的情况下是否可见,但我很难这样做。
为了弄清楚如何使它工作(在实际代码中我有一块JS添加了CSS类)我已经对所有内容进行了硬编码,但仍然无法查看可见性检查。
代码看起来像
#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
我得到了
Failure/Error: expect(find('#blah').visible?).to be false
expected false
got true
更新1:我正在使用Selenium webdriver。
#rails_helper
...
require 'selenium-webdriver'
...
UPDATE2:更新HTML
我在这里遗漏了什么? 如何查看可见性?
谢谢(礼貌第一)
答案 0 :(得分:3)
由于您似乎已经开始使用Capybara,我猜测您正在使用机架测试驱动程序。机架测试驱动程序非常基础,并且不处理大多数CSS。就可见性而言,它将处理的唯一事情是RAILS_ENV=production rake db:drop
RAILS_ENV=production rake db:create
属性和内联hidden
样式。如果你使用一个更高级的驱动程序(selenium,poltergeist,capybara-webkit),那么CSS将被完全处理。
接下来要注意的是(默认情况下)Capybara只会找到可见元素,因此display: none
将返回可见元素或引发Capybara :: ElementNotFound异常。如果你需要声明页面上元素的存在/不存在,你可以做类似
find('#blah')
另一种选择是使用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
选项来更改仅查找可见元素的默认行为,尽管这通常是非必要的测试,因为从用户的角度来看,它是否无关紧要如果元素不可见,则该元素是否存在(因此Capybaras仅发现可见元素的默认行为)。
visible