lib/capybara/node/actions.rb in capybara-3.20.2 vs lib/capybara/node/actions.rb in capybara-3.21.0
- old
+ new
@@ -4,66 +4,67 @@
module Node
module Actions
# @!macro waiting_behavior
# If the driver is capable of executing JavaScript, this method 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}
+ # expires. The length of time this method will wait is controlled through {Capybara.configure default_max_wait_time}.
#
- # @option options [false, true, Numeric] wait (Capybara.default_max_wait_time) Maximum time to wait for matching element to appear.
+ # @option options [false, true, Numeric] wait
+ # Maximum time to wait for matching element to appear. Defaults to {Capybara.configure default_max_wait_time}.
##
#
- # Finds a button or link and clicks it. See {Capybara::Node::Actions#click_button} and
- # {Capybara::Node::Actions#click_link} for what locator will match against for each type of element
+ # Finds a button or link and clicks it. See {#click_button} and
+ # {#click_link} for what locator will match against for each type of element.
#
# @overload click_link_or_button([locator], **options)
# @macro waiting_behavior
- # @param [String] locator See {Capybara::Node::Actions#click_button} and {Capybara::Node::Actions#click_link}
+ # @param [String] locator See {#click_button} and {#click_link}
#
# @return [Capybara::Node::Element] The element clicked
#
def click_link_or_button(locator = nil, **options)
find(:link_or_button, locator, options).click
end
alias_method :click_on, :click_link_or_button
##
#
- # Finds a link by id, Capybara.test_id attribute, text or title and clicks it. Also looks at image
+ # Finds a link by id, {Capybara.configure test_id} attribute, text or title and clicks it. Also looks at image
# alt text inside the link.
#
# @overload click_link([locator], **options)
# @macro waiting_behavior
- # @param [String] locator text, id, Capybara.test_id attribute, title or nested image's alt attribute
- # @param options See {Capybara::Node::Finders#find_link}
+ # @param [String] locator text, id, {Capybara.configure test_id} attribute, title or nested image's alt attribute
+ # @param [Hash] options See {Capybara::Node::Finders#find_link}
#
# @return [Capybara::Node::Element] The element clicked
def click_link(locator = nil, **options)
find(:link, locator, options).click
end
##
#
# 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, name, Capybara.test_id attribute, value, or title. \<button> elements can also be found
- # by their text content, and image \<input> elements by their alt attribute
+ # 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, name, {Capybara.configure test_id} attribute, value, or title. `<button>` elements can also be found
+ # by their text content, and image `<input>` elements by their alt attribute.
#
# @overload click_button([locator], **options)
# @macro waiting_behavior
# @param [String] locator Which button to find
- # @param options See {Capybara::Node::Finders#find_button}
+ # @param [Hash] options See {Capybara::Node::Finders#find_button}
# @return [Capybara::Node::Element] The element clicked
def click_button(locator = nil, **options)
find(:button, locator, options).click
end
##
#
- # Locate a text field or text area and fill it in with the given text
- # The field can be found via its name, id, Capybara.test_id attribute, or label text.
- # If no locator is provided will operate on self or a descendant
+ # Locate a text field or text area and fill it in with the given text.
+ # The field can be found via its name, id, {Capybara.configure test_id} attribute, or label text.
+ # If no locator is provided this will operate on self or a descendant.
#
# # will fill in a descendant fillable field with name, id, or label text matching 'Name'
# page.fill_in 'Name', with: 'Bob'
#
# # will fill in `el` if it's a fillable field
@@ -71,29 +72,30 @@
#
#
# @overload fill_in([locator], with:, **options)
# @param [String] locator Which field to fill in
# @param [Hash] options
- # @param with: [String] The value to fill_in
+ # @param with: [String] The value to fill in
# @macro waiting_behavior
# @option options [String] currently_with The current value property of the field to fill in
# @option options [Boolean] multiple Match fields that can have multiple values?
# @option options [String, Regexp] id Match fields that match the id attribute
# @option options [String] name Match fields that match the name attribute
# @option options [String] placeholder Match fields that match the placeholder attribute
# @option options [String, Array<String>, Regexp] class Match fields that match the class(es) provided
- # @option options [Hash] fill_options Driver specific options regarding how to fill fields (Defaults come from Capybara.default_set_options)
+ # @option options [Hash] fill_options Driver specific options regarding how to fill fields (Defaults come from {Capybara.configure default_set_options})
#
- # @return [Capybara::Node::Element] The element filled_in
+ # @return [Capybara::Node::Element] The element filled in
def fill_in(locator = nil, with:, currently_with: nil, fill_options: {}, **find_options)
find_options[:with] = currently_with if currently_with
find_options[:allow_self] = true if locator.nil?
find(:fillable_field, locator, find_options).set(with, fill_options)
end
# @!macro label_click
- # @option options [Boolean] allow_label_click (Capybara.automatic_label_click) Attempt to click the label to toggle state if element is non-visible.
+ # @option options [Boolean] allow_label_click
+ # Attempt to click the label to toggle state if element is non-visible. Defaults to {Capybara.configure automatic_label_click}.
##
#
# Find a descendant radio button and mark it as checked. The radio button can be found
# via name, id or label text. If no locator is provided this will match against self or
@@ -176,24 +178,24 @@
_check_with_label(:checkbox, false, locator, options)
end
##
#
- # If `:from` option is present, `select` finds a select box, or text input with associated datalist,
+ # If `from` option is present, {#select} finds a select box, or text input with associated datalist,
# 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
+ # 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'
#
# @overload select(value = nil, from: nil, **options)
# @macro waiting_behavior
#
# @param value [String] Which option to select
- # @param from [String] The id, Capybara.test_id attribute, name or label of the select box
+ # @param from [String] The id, {Capybara.configure test_id} attribute, name or label of the select box
#
# @return [Capybara::Node::Element] The option element selected
def select(value = nil, from: nil, **options)
raise ArgumentError, 'The :from option does not take an element' if from.is_a? Capybara::Node::Element
@@ -207,20 +209,20 @@
end
##
#
# 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
+ # 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'
#
# @overload unselect(value = nil, from: nil, **options)
# @macro waiting_behavior
#
# @param value [String] Which option to unselect
- # @param from [String] The id, Capybara.test_id attribute, name or label of the select box
+ # @param from [String] The id, {Capybara.configure test_id} attribute, name or label of the select box
#
#
# @return [Capybara::Node::Element] The option element unselected
def unselect(value = nil, from: nil, **options)
raise ArgumentError, 'The :from option does not take an element' if from.is_a? Capybara::Node::Element
@@ -230,11 +232,11 @@
end
##
#
# Find a descendant file field on the page and attach a file given its path. There are two ways to use
- # `attach_file`, in the first method the file field can be found via its name, id or label text.
+ # {#attach_file}, in the first method the file field can be found via its name, id or label text.
# In the case of the file field being hidden for
# styling reasons the `make_visible` option can be used to temporarily change the CSS of
# the file field, attach the file, and then revert the CSS back to original. If no locator is
# passed this will match self or a descendant.
# The second method, which is currently in beta and may be changed/removed, involves passing a block
@@ -255,17 +257,20 @@
# @macro waiting_behavior
#
# @param [String] locator Which field to attach the file to
# @param [String, Array<String>] paths The path(s) of the file(s) that will be attached
#
- # @option options [Symbol] match (Capybara.match) The matching strategy to use (:one, :first, :prefer_exact, :smart).
- # @option options [Boolean] exact (Capybara.exact) Match the exact label name/contents or accept a partial match.
+ # @option options [Symbol] match
+ # The matching strategy to use (:one, :first, :prefer_exact, :smart). Defaults to {Capybara.configure match}.
+ # @option options [Boolean] exact
+ # Match the exact label name/contents or accept a partial match. Defaults to {Capybara.configure exact}.
# @option options [Boolean] multiple Match field which allows multiple file selection
# @option options [String, Regexp] id Match fields that match the id attribute
# @option options [String] name Match fields that match the name attribute
# @option options [String, Array<String>, Regexp] class Match fields that match the class(es) provided
- # @option options [true, Hash] make_visible A Hash of CSS styles to change before attempting to attach the file, if `true` { opacity: 1, display: 'block', visibility: 'visible' } is used (may not be supported by all drivers)
+ # @option options [true, Hash] make_visible
+ # A Hash of CSS styles to change before attempting to attach the file, if `true`, `{ opacity: 1, display: 'block', visibility: 'visible' }` is used (may not be supported by all drivers).
# @overload attach_file(paths, &blk)
# @param [String, Array<String>] paths The path(s) of the file(s) that will be attached
# @yield Block whose actions will trigger the system file chooser to be shown
# @return [Capybara::Node::Element] The file field element
def attach_file(locator = nil, paths, make_visible: nil, **options) # rubocop:disable Style/OptionalArguments
@@ -324,10 +329,12 @@
option = datalist.find(:datalist_option, value, disabled: false)
input.set(option.value)
end
def while_visible(element, visible_css)
- visible_css = { opacity: 1, display: 'block', visibility: 'visible' } if visible_css == true
+ if visible_css == true
+ visible_css = { opacity: 1, display: 'block', visibility: 'visible', width: 'auto', height: 'auto' }
+ end
_update_style(element, visible_css)
raise ExpectationNotMet, 'The style changes in :make_visible did not make the file input visible' unless element.visible?
begin
yield element