module Capybara::Node::Finders
def all(*args, **options, &optional_filter_block)
-
(Capybara::ExpectationNotMet)
- The number of elements found doesn't match the specified conditions
Returns:
-
(Capybara::Result)
- A collection of found elements
Other tags:
- Yieldreturn: - Should the element be considered in the results?
Other tags:
- Yieldparam: element - The element being considered for inclusion in the results
Overloads:
-
all([kind = Capybara.default_selector], locator = nil, **options, &filter_block)
-
all([kind = Capybara.default_selector], locator = nil, **options)
Options Hash:
(**options)
-
wait
(Integer, false
) -- The time to wait for matching elements to become available -
exact
(Boolean
) -- Control whether `is` expressions in the given XPath match exactly or partially -
between
(Range
) -- Number of matches found must be within the given range -
minimum
(Integer
) -- Minimum number of matches that are expected to be found -
maximum
(Integer
) -- Maximum number of matches that are expected to be found -
count
(Integer
) -- Exact number of matches that are expected to be found -
visible
(Boolean, Symbol
) -- Only find elements with the specified visibility: -
normalize_ws
(Boolean
) -- Whether the `text`/`exact_text` options are compared against elment text with whitespace normalized or as returned by the driver -
exact_text
(String, Boolean
) -- When String the elements contained text must match exactly, when Boolean controls whether the :text option must match exactly -
text
(String, Regexp
) -- Only find elements which contain this text or match this regexp
Parameters:
-
locator
(String
) -- The locator for the specified selector -
kind
(Symbol
) -- Optional selector type (:css, :xpath, :field, etc.) - Defaults to Capybara.default_selector
def all(*args, **options, &optional_filter_block) minimum_specified = options_include_minimum?(options) options = { minimum: 1 }.merge(options) unless minimum_specified options[:session_options] = session_options query = Capybara::Queries::SelectorQuery.new(*args, options, &optional_filter_block) result = nil begin synchronize(query.wait) do result = query.resolve_for(self) raise Capybara::ExpectationNotMet, result.failure_message unless result.matches_count? result end rescue Capybara::ExpectationNotMet raise if minimum_specified || (result.compare_count == 1) Result.new([], nil) end end
def ambiguous?(query, result)
def ambiguous?(query, result) %i[one smart].include?(query.match) && (result.size > 1) end
def ancestor(*args, **options, &optional_filter_block)
-
(Capybara::ElementNotFound)
- If the element can't be found before time expires
Returns:
-
(Capybara::Node::Element)
- The found element
Options Hash:
(**options)
-
match
(Boolean
) -- The matching strategy to use.
Parameters:
-
(
) --
def ancestor(*args, **options, &optional_filter_block) options[:session_options] = session_options synced_resolve Capybara::Queries::AncestorQuery.new(*args, options, &optional_filter_block) end
def find(*args, **options, &optional_filter_block)
-
(Capybara::ElementNotFound)
- If the element can't be found before time expires
Returns:
-
(Capybara::Node::Element)
- The found element
Options Hash:
(**options)
-
match
(Boolean
) -- The matching strategy to use. -
wait
(false, Numeric
) -- Maximum time to wait for matching element to appear.
Parameters:
-
(
) --
def find(*args, **options, &optional_filter_block) options[:session_options] = session_options synced_resolve Capybara::Queries::SelectorQuery.new(*args, options, &optional_filter_block) end
def find_button(locator = nil, **options, &optional_filter_block)
-
(Capybara::Node::Element)
- The found element
Options Hash:
(**options)
-
class
(String, Array
) -- Match buttons that match the class(es) provided -
value
(String
) -- Match buttons with the value provided -
title
(String
) -- Match buttons with the title provided -
id
(String
) -- Match buttons with the id provided -
disabled
(Boolean, Symbol
) -- Match disabled button?
Overloads:
-
find_button(**options)
-
find_button([locator], **options)
Parameters:
-
locator
(String
) -- id, Capybara.test_id attribute, value, title, text content, alt of image
def find_button(locator = nil, **options, &optional_filter_block) find(:button, locator, options, &optional_filter_block) end
def find_by_id(id, **options, &optional_filter_block)
-
(Capybara::Node::Element)
- The found element
Parameters:
-
id
(String
) -- id of element
def find_by_id(id, **options, &optional_filter_block) find(:id, id, options, &optional_filter_block) end
def find_field(locator = nil, **options, &optional_filter_block)
def find_field(locator = nil, **options, &optional_filter_block) find(:field, locator, options, &optional_filter_block) end
def find_link(locator = nil, **options, &optional_filter_block)
-
(Capybara::Node::Element)
- The found element
Options Hash:
(**options)
-
class
(String, Array
) -- Match links that match the class(es) provided -
alt
(String
) -- Match links with a contained img element whose alt matches -
title
(String
) -- Match links with the title provided -
id
(String
) -- Match links with the id provided -
href
(String, Regexp, nil
) -- Value to match against the links href, if nil finds link placeholders ( elements with no href attribute)
Parameters:
-
locator
(String
) -- id, Capybara.test_id attribute, title, text, or alt of enclosed img element
Overloads:
-
find_link([locator], **options)
def find_link(locator = nil, **options, &optional_filter_block) find(:link, locator, options, &optional_filter_block) end
def first(*args, **options, &optional_filter_block)
-
(Capybara::ElementNotFound)
- If element(s) matching the provided options can't be found before time expires
Returns:
-
(Capybara::Node::Element)
- The found element or nil
Parameters:
-
options
(Hash
) -- Additional options; see {#all} -
locator
(String
) -- The selector -
kind
(:css, :xpath
) -- The type of selector
Overloads:
-
first([kind], locator, options)
def first(*args, **options, &optional_filter_block) options = { minimum: 1 }.merge(options) unless options_include_minimum?(options) all(*args, options, &optional_filter_block).first end
def options_include_minimum?(opts)
def options_include_minimum?(opts) %i[count minimum between].any? { |key| opts.key?(key) } end
def parent
def parent first(:xpath, './parent::*', minimum: 0) end
def prefer_exact?(query)
def prefer_exact?(query) %i[smart prefer_exact].include?(query.match) end
def sibling(*args, **options, &optional_filter_block)
-
(Capybara::ElementNotFound)
- If the element can't be found before time expires
Returns:
-
(Capybara::Node::Element)
- The found element
Options Hash:
(**options)
-
match
(Boolean
) -- The matching strategy to use.
Parameters:
-
(
) --
def sibling(*args, **options, &optional_filter_block) options[:session_options] = session_options synced_resolve Capybara::Queries::SiblingQuery.new(*args, options, &optional_filter_block) end
def synced_resolve(query)
def synced_resolve(query) synchronize(query.wait) do if prefer_exact?(query) result = query.resolve_for(self, true) result = query.resolve_for(self, false) if result.empty? && query.supports_exact? && !query.exact? else result = query.resolve_for(self) end raise Capybara::Ambiguous, "Ambiguous match, found #{result.size} elements matching #{query.applied_description}" if ambiguous?(query, result) raise Capybara::ElementNotFound, "Unable to find #{query.applied_description}" if result.empty? result.first end.tap(&:allow_reload!) end