2014-08-29 101 views
0

我已經有方法,爲我填充水豚的形式。水豚檢查輸入類型(fill_in vs檢查與選擇)

FactoryGirl得到一些默認PARAMS之後,我的那朵循環方式:

form_attributes.each do |field, value| 
    if value == false 
     value == true ? check("#{model}_#{field}") : uncheck("#{model}_#{field}") 
    elsif try(:select,value, from: "#{model}_#{field}") 
     select value, from: "#{model}_#{field}" 
    elsif try(:fill_in, "#{model}_#{field}", with: value) 
     fill_in "#{model}_#{field}", with: value 
    else 
     raise Capybara::ElementNotFound 
    end 
end 

不幸的是try(:select,value, from: "#{model}_#{field}")會引發錯誤Capybara::ElementNotFound: Unable to find select box ...

如何判斷水豚,以check當元素是checkbot和選擇當元素是<select>

這裏是form_attributes一些示例:

{:attitude=>"happy", 
:feedback_date=>2014-08-19 15:35:14 +0200, 
:feedback_action=>"Refund", 
:feedback_details=>"....", 
:approved=>"true"} 

回答

0

我會建議你在ELSIF使用has_selector?方法。它返回一個布爾值,指示它是否在頁面中可見。這裏是a link該頁面的文檔。

TL; DR:

page.has_selector?('p#foo') 
page.has_selector?('li', :text => 'Horse', :visible => true) 
+0

問題是它始終可見,但您無法填充複選框或選擇text_field ... – 2014-08-29 14:33:51

+0

啊。我認爲提出的錯誤是在if(statement)elsif(聲明)中,而不是在方法體內。 @FilipBartuzi,你也可以嘗試採取救援措施。 – Hectron 2014-08-29 14:54:24

1

假設#{model}_#{field}是永遠不變的性質(即ID,名稱或標籤),你可以:

  1. 查找元素
  2. 檢查元素確定其類型
  3. 調用相應的方法輸入該字段

以下代碼假定#{model}_#{field}是一個元素的id:

form_attributes.each do |field, value| 
    e = find("##{model}_#{field}") 
    if e.tag_name == 'select' 
    e.select(value) 
    elsif e.tag_name == 'input' && e['type'] == 'checkbox' 
    # Assumes that value is true or false (not a String) 
    e.set(value) 
    else 
    # Assumes e is a text field 
    e.set(value) 
    end 
end 

在該代碼中,我們檢查元件的TAG_NAME和類型屬性如果需要的話。由於輸入標籤有很多種方式可以作爲文本字段,因此假定任何不屬於選擇列表或複選框的內容都必須是文本字段。您需要展開if-else語句,如果您還想處理單選按鈕等。