2016-11-27 76 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需要一些內容或有維度設置要考慮可見 –