class Capybara::RackTest::Form

Public Instance Methods

multipart?() click to toggle source
# File lib/capybara/rack_test/form.rb, line 67
def multipart?
  self[:enctype] == "multipart/form-data"
end
params(button) click to toggle source
# File lib/capybara/rack_test/form.rb, line 17
def params(button)
  params = {}

  native.xpath("(.//input|.//select|.//textarea)[not(@disabled)]").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'
        options = field.xpath(".//option[@selected]")
        options.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, button[:name], button[:value] || "") if button[:name]
  params
end
submit(button) click to toggle source
# File lib/capybara/rack_test/form.rb, line 63
def submit(button)
  driver.submit(method, native['action'].to_s, params(button))
end

Private Instance Methods

merge_param!(params, key, value) click to toggle source
# File lib/capybara/rack_test/form.rb, line 77
def merge_param!(params, key, value)
  Rack::Utils.normalize_params(params, key, value)
end
method() click to toggle source
# File lib/capybara/rack_test/form.rb, line 73
def method
  self[:method] =~ /post/ ? :post : :get
end