Class: Capybara::Queries::SelectorQuery Private
- Defined in:
- lib/capybara/queries/selector_query.rb
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Direct Known Subclasses
Constant Summary collapse
- VALID_KEYS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
COUNT_KEYS + %i[text id class visible exact exact_text match wait filter_set]
- VALID_MATCH =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
%i[first smart prefer_exact one].freeze
Constants inherited from BaseQuery
Instance Attribute Summary collapse
- #expression ⇒ Object private
- #find ⇒ Object private
- #locator ⇒ Object private
- #negative ⇒ Object private
- #options ⇒ Object private
- #selector ⇒ Object private
Attributes inherited from BaseQuery
Instance Method Summary collapse
- #css ⇒ Object private
- #description ⇒ Object private
- #exact? ⇒ Boolean private
-
#initialize(*args, session_options:, **options, &filter_block) ⇒ SelectorQuery
constructor
private
A new instance of SelectorQuery.
- #label ⇒ Object private
- #match ⇒ Object private
- #matches_filters?(node) ⇒ Boolean private
- #name ⇒ Object private
- #resolve_for(node, exact = nil) ⇒ Object private
- #supports_exact? ⇒ Boolean private
- #visible ⇒ Object private
- #xpath(exact = nil) ⇒ Object private
Methods inherited from BaseQuery
#expects_none?, #failure_message, #matches_count?, #negative_failure_message, wait, #wait
Constructor Details
#initialize(*args, session_options:, **options, &filter_block) ⇒ SelectorQuery
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of SelectorQuery.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/capybara/queries/selector_query.rb', line 11 def initialize(*args, session_options:, **, &filter_block) @resolved_node = nil @options = .dup super(@options) self. = @selector = find_selector(args[0].is_a?(Symbol) ? args.shift : args[0]) @locator = args.shift @filter_block = filter_block raise ArgumentError, "Unused parameters passed to #{self.class.name} : #{args}" unless args.empty? @expression = @selector.call(@locator, @options.merge(enable_aria_label: .enable_aria_label)) warn_exact_usage assert_valid_keys end |
Instance Attribute Details
#expression ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
6 7 8 |
# File 'lib/capybara/queries/selector_query.rb', line 6 def expression @expression end |
#find ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
6 7 8 |
# File 'lib/capybara/queries/selector_query.rb', line 6 def find @find end |
#locator ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
6 7 8 |
# File 'lib/capybara/queries/selector_query.rb', line 6 def locator @locator end |
#negative ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
6 7 8 |
# File 'lib/capybara/queries/selector_query.rb', line 6 def negative @negative end |
#options ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
6 7 8 |
# File 'lib/capybara/queries/selector_query.rb', line 6 def @options end |
#selector ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
6 7 8 |
# File 'lib/capybara/queries/selector_query.rb', line 6 def selector @selector end |
Instance Method Details
#css ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
85 86 87 |
# File 'lib/capybara/queries/selector_query.rb', line 85 def css filtered_css(apply_expression_filters(@expression)) end |
#description ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/capybara/queries/selector_query.rb', line 33 def description @description = +"" @description << "visible " if visible == :visible @description << "non-visible " if visible == :hidden @description << "#{label} #{locator.inspect}" @description << " with#{' exact' if exact_text == true} text #{[:text].inspect}" if [:text] @description << " with exact text #{exact_text}" if exact_text.is_a?(String) @description << " with id #{[:id]}" if [:id] @description << " with classes [#{Array([:class]).join(',')}]" if [:class] @description << selector.description() @description << " that also matches the custom filter block" if @filter_block @description << " within #{@resolved_node.inspect}" if describe_within? @description end |
#exact? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
70 71 72 |
# File 'lib/capybara/queries/selector_query.rb', line 70 def exact? supports_exact? ? .fetch(:exact, .exact) : false end |
#label ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
31 |
# File 'lib/capybara/queries/selector_query.rb', line 31 def label; selector.label || selector.name; end |
#match ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
74 75 76 |
# File 'lib/capybara/queries/selector_query.rb', line 74 def match .fetch(:match, .match) end |
#matches_filters?(node) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/capybara/queries/selector_query.rb', line 48 def matches_filters?(node) return false if [:text] && !matches_text_filter(node, [:text]) return false if exact_text.is_a?(String) && !matches_exact_text_filter(node, exact_text) case visible when :visible then return false unless node.visible? when :hidden then return false if node.visible? end matches_node_filters?(node) && matches_filter_block?(node) rescue *(node.respond_to?(:session) ? node.session.driver.invalid_element_errors : []) false end |
#name ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
30 |
# File 'lib/capybara/queries/selector_query.rb', line 30 def name; selector.name; end |
#resolve_for(node, exact = nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/capybara/queries/selector_query.rb', line 90 def resolve_for(node, exact = nil) @resolved_node = node node.synchronize do children = if selector.format == :css node.find_css(css) else node.find_xpath(xpath(exact)) end.map do |child| if node.is_a?(Capybara::Node::Base) Capybara::Node::Element.new(node.session, child, node, self) else Capybara::Node::Simple.new(child) end end Capybara::Result.new(children, self) end end |
#supports_exact? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
109 110 111 |
# File 'lib/capybara/queries/selector_query.rb', line 109 def supports_exact? @expression.respond_to? :to_xpath end |
#visible ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
62 63 64 65 66 67 68 |
# File 'lib/capybara/queries/selector_query.rb', line 62 def visible case (vis = .fetch(:visible) { @selector.default_visibility(.ignore_hidden_elements) }) when true then :visible when false then :all else vis end end |
#xpath(exact = nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
78 79 80 81 82 83 |
# File 'lib/capybara/queries/selector_query.rb', line 78 def xpath(exact = nil) exact = exact? if exact.nil? expr = apply_expression_filters(@expression) expr = exact ? expr.to_xpath(:exact) : expr.to_s if expr.respond_to?(:to_xpath) filtered_xpath(expr) end |