Class: Capybara::RackTest::Form

Inherits:
Node show all
Defined in:
lib/capybara/rack_test/form.rb

Defined Under Namespace

Classes: NilUploadedFile, ParamsHash

Constant Summary

Constants inherited from Node

Node::BLOCK_ELEMENTS

Instance Attribute Summary

Attributes inherited from Driver::Node

#driver, #initial_cache, #native

Instance Method Summary collapse

Methods inherited from Node

#==, #[], #all_text, #checked?, #click, #disabled?, #find_css, #find_xpath, #path, #select_option, #selected?, #set, #style, #tag_name, #unselect_option, #value, #visible?, #visible_text

Methods inherited from Driver::Node

#==, #[], #all_text, #checked?, #click, #disabled?, #double_click, #drag_to, #drop, #hover, #initialize, #inspect, #multiple?, #obscured?, #path, #readonly?, #rect, #right_click, #scroll_by, #scroll_to, #select_option, #selected?, #send_keys, #set, #style, #tag_name, #trigger, #unselect_option, #value, #visible?, #visible_text

Constructor Details

This class inherits a constructor from Capybara::Driver::Node

Instance Method Details

#multipart?Boolean

Returns:

  • (Boolean)

46
47
48
# File 'lib/capybara/rack_test/form.rb', line 46

def multipart?
  self[:enctype] == 'multipart/form-data'
end

#params(button) ⇒ Object


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/capybara/rack_test/form.rb', line 21

def params(button)
  form_element_types = %i[input select textarea button]
  form_elements_xpath = XPath.generate do |xp|
    xpath = xp.descendant(*form_element_types).where(!xp.attr(:form))
    xpath += xp.anywhere(*form_element_types).where(xp.attr(:form) == native[:id]) if native[:id]
    xpath.where(!xp.attr(:disabled))
  end.to_s

  form_elements = native.xpath(form_elements_xpath).reject { |el| submitter?(el) && (el != button.native) }

  form_elements.each_with_object(make_params) do |field, params|
    case field.name
    when 'input', 'button' then add_input_param(field, params)
    when 'select' then add_select_param(field, params)
    when 'textarea' then add_textarea_param(field, params)
    end
  end.to_params_hash
end

#submit(button) ⇒ Object


40
41
42
43
44
# File 'lib/capybara/rack_test/form.rb', line 40

def submit(button)
  action = button&.[]('formaction') || native['action']
  method = button&.[]('formmethod') || request_method
  driver.submit(method, action.to_s, params(button))
end