# 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