Class: Capybara::RackTest::Form
- Inherits:
-
Node
- Object
- Driver::Node
- Node
- Capybara::RackTest::Form
- Defined in:
- lib/capybara/rack_test/form.rb
Defined Under Namespace
Classes: NilUploadedFile
Instance Attribute Summary
Attributes inherited from Driver::Node
Instance Method Summary (collapse)
Methods inherited from Node
#==, #[], #all_text, #checked?, #click, #disabled?, #find_css, #find_xpath, #path, #select_option, #selected?, #set, #tag_name, #unselect_option, #value, #visible?, #visible_text
Methods inherited from Driver::Node
#==, #[], #all_text, #checked?, #click, #disabled?, #drag_to, #hover, #initialize, #inspect, #path, #select_option, #selected?, #set, #tag_name, #trigger, #unselect_option, #value, #visible?, #visible_text
Constructor Details
This class inherits a constructor from Capybara::Driver::Node
Instance Method Details
- (Boolean) multipart?
74 75 76 |
# File 'lib/capybara/rack_test/form.rb', line 74 def multipart? self[:enctype] == "multipart/form-data" end |
- (Object) params(button)
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/capybara/rack_test/form.rb', line 17 def params() params = {} form_element_types=[:input, :select, :textarea] form_elements_xpath=XPath.generate do |x| xpath=x.descendant(*form_element_types).where(~x.attr(:form)) xpath=xpath.union(x.anywhere(*form_element_types).where(x.attr(:form) == native[:id])) if native[:id] xpath.where(~x.attr(:disabled)) end.to_s native.xpath(form_elements_xpath).map do |field| case field.name when 'input' if %w(radio checkbox).include? field['type'] merge_param!(params, field['name'].to_s, field['value'].to_s) if field['checked'] elsif %w(submit image).include? field['type'] # TO DO identify the click button here (in document order, rather # than leaving until the end of the params) elsif field['type'] =='file' if multipart? file = \ if (value = field['value']).to_s.empty? NilUploadedFile.new else content_type = MIME::Types.type_for(value).first.to_s Rack::Test::UploadedFile.new(value, content_type) end merge_param!(params, field['name'].to_s, file) else merge_param!(params, field['name'].to_s, File.basename(field['value'].to_s)) end else merge_param!(params, field['name'].to_s, field['value'].to_s) end when 'select' if field['multiple'] == 'multiple' = field.xpath(".//option[@selected]") .each do |option| merge_param!(params, field['name'].to_s, (option['value'] || option.text).to_s) end else option = field.xpath(".//option[@selected]").first option ||= field.xpath('.//option').first merge_param!(params, field['name'].to_s, (option['value'] || option.text).to_s) if option end when 'textarea' merge_param!(params, field['name'].to_s, field.text.to_s) end end merge_param!(params, [:name], [:value] || "") if [:name] params end |
- (Object) submit(button)
70 71 72 |
# File 'lib/capybara/rack_test/form.rb', line 70 def submit() driver.submit(method, native['action'].to_s, params()) end |