检查Capybara的可见度

时间:2016-11-27 02:30:39

标签: rspec capybara

我试图写一些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

我在这里遗漏了什么? 如何查看可见性?

谢谢(礼貌第一)

1 个答案:

答案 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