2013-08-25 36 views
4

我目前正在爲Rails應用程序中的郵件系統編寫一個Cucumber功能。這是我的一個步驟。水豚have_field沒有發現字段發現的有選擇器

Then(/^they should see the message displayed in their language$/) do 
    id = "message_to_#{@family.id}" 
    expect(page).to have_selector("textarea##{id}") 
    save_and_open_page 
    expect(page).to have_field(id, type: :textarea) 
end 

第一個斷言通過,但第二個斷言失敗。當我檢查由save_and_open_page創建的標記,以下元素存在:

<textarea cols="22" disabled="disabled" id="message_to_13" name="body" placeholder="Hallo, Ich bin sehr interessiert an deinem Profil. Würdest du gerne mit mir in Kontakt treten?" rows="7"></textarea> 

第二次測試顯示錯誤消息是:

expected to find field "message_to_13" but there were no matches. Also found "", which matched the selector but not all filters. (Capybara::ExpectationNotMet) 

我撕我的頭髮在這裏明白爲什麼水豚可以找到這個顯然是使用have_selector存在的元素,但不能與have_field?

回答

8

的問題是,textarea的有disabled="disabled"屬性,這意味着它是一個無效字段。默認情況下,Capybara忽略禁用的字段。水豚2.1中的新功能是look for disabled fields的選項。

添加:disabled => true選項將解決你的問題:

expect(page).to have_field(id, :type => 'textarea', :disabled => true) 

注:

  • 也就是說,當你有:disabled => true,本場必須被禁止。缺省值是:disabled => false,它只匹配未禁用的字段。
  • 即:類型值應該是一個字符串。如上所示,它是:type => 'textarea')。使用符號,:type => :textarea將無法​​使用。
+0

感謝您指出這一點。我看到這種行爲在Capybara 2.1發行說明中有描述,但是在官方文檔中的任何地方都提到過? –

+0

據我所知,該修復更新了代碼,但沒有更新任何文檔。 –

0

有可能你有一些其他元素的ID,名稱或標籤匹配'message_to_13'?

因爲這就是錯誤信息所表明的 - 它找到了'message_to_13'的東西,但它不是textarea。你也可以嘗試通過:textarea作爲字符串不符號。

+0

有問題的textarea的id是文檔中字符串'message_to_13'出現的唯一部分。我試過將:textarea作爲字符串傳遞,而不是,仍然收到相同的錯誤信息。 –

0

您的測試正在尋找類型爲textarea的輸入字段。 Textareas不是輸入字段,它們是textareas。嘗試刪除type: :textarea

在這裏看到:https://github.com/jnicklas/capybara/issues/978

+0

「注意:'textarea'和'select'是有效的類型名稱,匹配關聯的標籤名稱。」 http://rubydoc.info/gems/capybara/2.1.0/frames –

+0

你使用哪種版本的水豚?支持textarea作爲一種類型似乎在版本2.1.0中出現。我上面發佈的鏈接是針對版本2.0.2的。對不起,我直到現在才意識到這已經改變了。 – 2013-08-25 19:43:09

+0

我正在使用版本2.1.0 –