2017-06-23 66 views
0

注:這個問題是關於使用水豚1.1.2,而不是最新版本。如何用水豚測試野外可見度?

我有一個隱藏的文本字段和一個使其可見的按鈕。

隱藏的文本字段:

<input type="text" name="Franchise Name" id="new_franchise_name" placeholder="Franchise Name" style="display:none;" /> 

按鈕和js事件處理這使得上述領域可見:

<button class="btn btn-medium" id="create_franchise" data-remote="true" >Create New Franchise</button> 

$('#create_franchise').click(function(){ 
    $('#new_franchise_name').css('display', 'inline-block'); 
} 

在我的測試中,我有以下幾點:

page.all('#new_franchise_name') #=> returns array with text input 
Capybara.ignore_hidden_elements = true 
page.all('#new_franchise_name') #=> returns empty array as expected 
page.find_button('Create New Franchise').click #=> sets the input css "display:inline-block" 
page.all('#new_franchise_name') #=> still returns empty array. Should include the text field 

我已經探索了其他一些方法,但這似乎是最直接的...除了它不起作用。有什麼建議麼?

回答

1

注意:這個答案適用於目前(2.14.3當前版本)水豚的版本。它纔出來討論後,該OP使用水豚1.1.2當行爲是顯著不同

幾件事情

  1. 如果您正在測試的應用程序,永遠不會改變Capybara.ignore_hidden_​​elements(只需將其保留爲默認值true),在想要Capybara「查看」不可見元素的查詢上使用visible選項。 page.find('#new_franchise_name', visible: :all)

  2. 遠離all支持find當你想要一個單一的元素(任何具有ID的應該是)。 all有一些缺點,其中最重要的是它不會等待元素出現,除非您通過一個計數選項。 (first具有相同的缺點)

  3. 當測試使用的斷言/預期而不是find當你不需要的元素爲別的

考慮到這些測試應該寫成

expect(page).not_to have_css('#new_franchise_name') # or .to have_no_css(...) 
page.click_button('Create New Franchise') 
expect(page).to have_css('#new_franchise_name') 

如果由於某種原因,你已經改變了默認設置的Capybara.ignore_hidden_elements爲假,則測試可以寫成

expect(page).not_to have_css('#new_franchise_name', visible: true) # or .to have_no_css(...) 
page.click_button('Create New Franchise') 
expect(page).to have_css('#new_franchise_name', visible: true) 
+0

感謝您的提示!確實非常有用的建議。問題是這不會解決我遇到的問題,因爲這些預期不會測試元素的可見性。 'input#new_franchise_name'存在與否點擊按鈕。我也遇到以下錯誤:'RSpec :: Expectations :: ExpectationNotMetError:expected css「#new_franchise_name」當這些方法應該返回一個布爾值時不返回任何東西'。任何建議 –

+0

@JesseNovotny期望不返回布爾值 - 它們要麼成功要麼提出錯誤,這通常是測試中需要的。聽起來你已經在某處寫了'Capybara.ignore_hidden_​​elements = false',這在編寫測試時是一個很糟糕的想法(雖然自動化是可以的),因爲這意味着你不再測試用戶能夠看到/做什麼。我將更新答案以指定所需的可見性,但更好的解決方案是停止更改ignore_hidden_​​elements的默認值 –

+0

謝謝!那個石頭。我的理解是'Capybara.ignore_hidden_​​elements'默認爲false。它目前正在返回false,並且我只設置它在pry中嘗試。 –