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