Module: Capybara::Node::Actions
- Included in:
- Base
- Defined in:
- lib/capybara/node/actions.rb
Instance Method Summary collapse
-
#attach_file(locator, path, options = {}) ⇒ Object
Find a file field on the page and attach a file given its path.
-
#check([locator], options) ⇒ Object
Find a check box and mark it as checked.
-
#choose([locator], options) ⇒ Object
Find a radio button and mark it as checked.
-
#click_button([locator], options) ⇒ Object
Finds a button on the page and clicks it.
-
#click_link([locator], options) ⇒ Object
Finds a link by id, text or title and clicks it.
-
#click_link_or_button([locator], options) ⇒ Object
(also: #click_on)
Finds a button or link by id, text or value and clicks it.
-
#fill_in(locator, options = {}) ⇒ Object
Locate a text field or text area and fill it in with the given text The field can be found via its name, id or label text.
-
#select(value, options = {}) ⇒ Object
If ‘:from` option is present, `select` finds a select box on the page and selects a particular option from it.
-
#uncheck([locator], options) ⇒ Object
Find a check box and mark uncheck it.
-
#unselect(value, options = {}) ⇒ Object
Find a select box on the page and unselect a particular option from it.
Instance Method Details
#attach_file(locator, path, options = {}) ⇒ Object
Find a file field on the page and attach a file given its path. The file field can be found via its name, id or label text.
page.attach_file(locator, '/path/to/file.png')
If the driver is capable of executing JavaScript, attach_file
will wait for a set amount of time and continuously retry finding the element until either the element is found or the time expires. The length of time find
will wait is controlled through Capybara.default_max_wait_time
257 258 259 260 261 262 263 |
# File 'lib/capybara/node/actions.rb', line 257 def attach_file(locator, path, ={}) locator, path, = nil, locator, path if path.is_a? Hash Array(path).each do |p| raise Capybara::FileNotFound, "cannot attach file, #{p} does not exist" unless File.exist?(p.to_s) end find(:file_field, locator, ).set(path) end |
#check([locator], options) ⇒ Object
Find a check box and mark it as checked. The check box can be found via name, id or label text.
page.check('German')
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/capybara/node/actions.rb', line 139 def check(locator, ={}) locator, = nil, locator if locator.is_a? Hash allow_label_click = .delete(:allow_label_click) { Capybara.automatic_label_click } begin find(:checkbox, locator, ).set(true) rescue Capybara::ElementNotFound => e raise unless allow_label_click begin cbox = find(:checkbox, locator, .merge({wait: 0, visible: :hidden})) label = find(:label, for: cbox, wait: 0, visible: true) label.click unless cbox.checked? rescue raise e end end end |
#choose([locator], options) ⇒ Object
Find a radio button and mark it as checked. The radio button can be found via name, id or label text.
page.choose('Male')
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/capybara/node/actions.rb', line 104 def choose(locator, ={}) locator, = nil, locator if locator.is_a? Hash allow_label_click = .delete(:allow_label_click) { Capybara.automatic_label_click } begin find(:radio_button, locator, ).set(true) rescue Capybara::ElementNotFound => e raise unless allow_label_click begin radio = find(:radio_button, locator, .merge({wait: 0, visible: :hidden})) label = find(:label, for: radio, wait: 0, visible: true) label.click unless radio.checked? rescue raise e end end end |
#click_button([locator], options) ⇒ Object
Finds a button on the page and clicks it. This can be any <input> element of type submit, reset, image, button or it can be a <button> element. All buttons can be found by their id, value, or title. <button> elements can also be found by their text content, and image <input> elements by their alt attribute
If the driver is capable of executing JavaScript, click_button
will wait for a set amount of time and continuously retry finding the element until either the element is found or the time expires. The length of time find
will wait is controlled through Capybara.default_max_wait_time
55 56 57 58 |
# File 'lib/capybara/node/actions.rb', line 55 def (locator=nil, ={}) locator, = nil, locator if locator.is_a? Hash find(:button, locator, ).click end |
#click_link([locator], options) ⇒ Object
Finds a link by id, text or title and clicks it. Also looks at image alt text inside the link.
If the driver is capable of executing JavaScript, click_link
will wait for a set amount of time and continuously retry finding the element until either the element is found or the time expires. The length of time find
will wait is controlled through Capybara.default_max_wait_time
38 39 40 41 |
# File 'lib/capybara/node/actions.rb', line 38 def click_link(locator=nil, ={}) locator, = nil, locator if locator.is_a? Hash find(:link, locator, ).click end |
#click_link_or_button([locator], options) ⇒ Object Also known as: click_on
Finds a button or link by id, text or value and clicks it. Also looks at image alt text inside the link. If the driver is capable of executing JavaScript, click_link_or_button
will wait for a set amount of time and continuously retry finding the element until either the element is found or the time expires. The length of time find
will wait is controlled through Capybara.default_max_wait_time
21 22 23 24 |
# File 'lib/capybara/node/actions.rb', line 21 def (locator=nil, ={}) locator, = nil, locator if locator.is_a? Hash find(:link_or_button, locator, ).click end |
#fill_in(locator, options = {}) ⇒ Object
Locate a text field or text area and fill it in with the given text The field can be found via its name, id or label text.
page.fill_in 'Name', :with => 'Bob'
If the driver is capable of executing JavaScript, fill_in
will wait for a set amount of time and continuously retry finding the element until either the element is found or the time expires. The length of time find
will wait is controlled through Capybara.default_max_wait_time
78 79 80 81 82 83 84 |
# File 'lib/capybara/node/actions.rb', line 78 def fill_in(locator, ={}) locator, = nil, locator if locator.is_a? Hash raise "Must pass a hash containing 'with'" if not .is_a?(Hash) or not .has_key?(:with) with = .delete(:with) = .delete(:fill_options) find(:fillable_field, locator, ).set(with, ) end |
#select(value, options = {}) ⇒ Object
If ‘:from` option is present, `select` finds a select box on the page and selects a particular option from it. Otherwise it finds an option inside current scope and selects it. If the select box is a multiple select, select
can be called multiple times to select more than one option. The select box can be found via its name, id or label text. The option can be found by its text.
page.select 'March', :from => 'Month'
If the driver is capable of executing JavaScript, select
will wait for a set amount of time and continuously retry finding the element until either the element is found or the time expires. The length of time find
will wait is controlled through Capybara.default_max_wait_time
208 209 210 211 212 213 214 215 |
# File 'lib/capybara/node/actions.rb', line 208 def select(value, ={}) if .has_key?(:from) from = .delete(:from) find(:select, from, ).find(:option, value, ).select_option else find(:option, value, ).select_option end end |
#uncheck([locator], options) ⇒ Object
Find a check box and mark uncheck it. The check box can be found via name, id or label text.
page.uncheck('German')
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/capybara/node/actions.rb', line 174 def uncheck(locator, ={}) locator, = nil, locator if locator.is_a? Hash allow_label_click = .delete(:allow_label_click) { Capybara.automatic_label_click } begin find(:checkbox, locator, ).set(false) rescue Capybara::ElementNotFound => e raise unless allow_label_click begin cbox = find(:checkbox, locator, .merge({wait: 0, visible: :hidden})) label = find(:label, for: cbox, wait: 0, visible: true) label.click if cbox.checked? rescue raise e end end end |
#unselect(value, options = {}) ⇒ Object
Find a select box on the page and unselect a particular option from it. If the select box is a multiple select, unselect
can be called multiple times to unselect more than one option. The select box can be found via its name, id or label text.
page.unselect 'March', :from => 'Month'
If the driver is capable of executing JavaScript, unselect
will wait for a set amount of time and continuously retry finding the element until either the element is found or the time expires. The length of time find
will wait is controlled through Capybara.default_max_wait_time
230 231 232 233 234 235 236 237 |
# File 'lib/capybara/node/actions.rb', line 230 def unselect(value, ={}) if .has_key?(:from) from = .delete(:from) find(:select, from, ).find(:option, value, ).unselect_option else find(:option, value, ).unselect_option end end |