2016-11-27 75 views
0

我正在尝试编写一些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 

UPDATE1:我使用的是硒的webdriver。

#rails_helper 
... 
require 'selenium-webdriver' 
... 

UPDATE2:更新HTML

我错过了什么吗? 如何检查可见性?

谢谢(礼貌第一)

回答

2

因为它看起来像你开始与水豚,我猜你正在使用的机架测试车手。机架测试驱动程序非常基本,不会处理大多数CSS。只有知名度才会处理的只有hidden属性和内联display: none样式。如果你使用一个更高级的驱动程序(硒,poltergeist,capybara-webkit),那么CSS将得到完全处理。

接下来要注意的是(默认情况下)水豚只会找到可见的元素,所以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选项更改只找到可见元素的默认行为,尽管这通常是非必要的测试,因为从用户的角度来看,如果元素不存在(如果Capybaras默认行为仅发现可见元素),则该元素是否存在并不重要。

expect(page).to have_css('#blah', visible: :hidden) # check but the element exists but is non-visible 
+0

感谢您的帮助。我试过了你的最新建议,但是当我运行它时,我预计会发现css“#blah”,但没有匹配。我也尝试过'Capybara.ignore_hidden_​​elements = false',但我得到了同样的结果。另请参阅UPDATE1。 – macsig

+0

@macsig - 1st - 测试应用程序时不要使用ignore_hidden_​​elements = false,以后您会后悔的。第二 - 仅仅因为你需要selenium-webdriver并不意味着你在使用selenium驱动 - 除非你用'js:true'元数据标记了你的测试,或者设置了'Capybara.default_driver =:selenium'你'仍然使用机架测试。你可以告诉,因为在使用机架测试时浏览器不会打开运行你的测试。 - 3rd - 如果您使用的硒第一个会给出该错误,因为该元素是隐藏的,所以你必须更具体,以你试过哪个建议 –

+0

另外一个div需要一些内容或有维度设置要考虑可见 –