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 style visible obscured exact exact_text normalize_ws 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 readonly private
- #locator ⇒ Object readonly private
- #options ⇒ Object readonly private
- #selector ⇒ Object readonly private
Attributes inherited from BaseQuery
Instance Method Summary collapse
- #applied_description ⇒ Object private
- #css ⇒ Object private
- #description(only_applied = false) ⇒ Object private
- #exact? ⇒ Boolean private
- #failure_message ⇒ Object private
-
#initialize(*args, session_options:, enable_aria_label: session_options.enable_aria_label, test_id: session_options.test_id, selector_format: nil, **options, &filter_block) ⇒ SelectorQuery
constructor
private
A new instance of SelectorQuery.
- #label ⇒ Object private
- #match ⇒ Object private
- #matches_filters?(node, node_filter_errors = []) ⇒ Boolean private
- #name ⇒ Object private
- #negative_failure_message ⇒ 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?, #matches_count?, wait, #wait
Constructor Details
#initialize(*args, session_options:, enable_aria_label: session_options.enable_aria_label, test_id: session_options.test_id, selector_format: nil, **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 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/capybara/queries/selector_query.rb', line 11 def initialize(*args, session_options:, enable_aria_label: .enable_aria_label, test_id: .test_id, selector_format: nil, **, &filter_block) @resolved_node = nil @resolved_count = 0 @options = .dup super(@options) self. = @selector = Selector.new( find_selector(args[0].is_a?(Symbol) ? args.shift : args[0]), config: { enable_aria_label: enable_aria_label, test_id: test_id }, format: selector_format ) @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) warn_exact_usage assert_valid_keys end |
Instance Attribute Details
#expression ⇒ Object (readonly)
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 |
#locator ⇒ Object (readonly)
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 |
#options ⇒ Object (readonly)
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 (readonly)
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
#applied_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.
81 82 83 |
# File 'lib/capybara/queries/selector_query.rb', line 81 def applied_description description(true) end |
#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.
121 122 123 |
# File 'lib/capybara/queries/selector_query.rb', line 121 def css filtered_expression(apply_expression_filters(@expression)) end |
#description(only_applied = false) ⇒ 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.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/capybara/queries/selector_query.rb', line 45 def description(only_applied = false) desc = +'' show_for = show_for_stage(only_applied) if show_for[:any] desc << 'visible ' if visible == :visible desc << 'non-visible ' if visible == :hidden end desc << "#{label} #{locator.inspect}" if show_for[:any] desc << " with#{' exact' if exact_text == true} text #{[:text].inspect}" if [:text] desc << " with exact text #{exact_text}" if exact_text.is_a?(String) end desc << " with id #{[:id]}" if [:id] desc << " with classes [#{Array([:class]).join(',')}]" if [:class] desc << case [:style] when String " with style attribute #{[:style].inspect}" when Regexp " with style attribute matching #{[:style].inspect}" when Hash " with styles #{[:style].inspect}" else '' end desc << selector.description(node_filters: show_for[:node], **) desc << ' that also matches the custom filter block' if @filter_block && show_for[:node] desc << " within #{@resolved_node.inspect}" if describe_within? if locator.is_a?(String) && locator.start_with?('#', './/', '//') unless selector.raw_locator? desc << "\nNote: It appears you may be passing a CSS selector or XPath expression rather than a locator. " \ "Please see the documentation for acceptable locator values.\n\n" end end desc 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.
104 105 106 |
# File 'lib/capybara/queries/selector_query.rb', line 104 def exact? supports_exact? ? .fetch(:exact, .exact) : false end |
#failure_message ⇒ 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.
143 144 145 |
# File 'lib/capybara/queries/selector_query.rb', line 143 def +"expected to find #{applied_description}" << 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.
43 |
# File 'lib/capybara/queries/selector_query.rb', line 43 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.
108 109 110 |
# File 'lib/capybara/queries/selector_query.rb', line 108 def match .fetch(:match, .match) end |
#matches_filters?(node, node_filter_errors = []) ⇒ 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.
85 86 87 88 89 90 91 92 93 94 |
# File 'lib/capybara/queries/selector_query.rb', line 85 def matches_filters?(node, node_filter_errors = []) return true if (@resolved_node&.== node) && [:allow_self] matches_locator_filter?(node) && matches_system_filters?(node) && matches_node_filters?(node, node_filter_errors) && 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.
42 |
# File 'lib/capybara/queries/selector_query.rb', line 42 def name; selector.name; end |
#negative_failure_message ⇒ 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.
147 148 149 |
# File 'lib/capybara/queries/selector_query.rb', line 147 def +"expected not to find #{applied_description}" << 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.
126 127 128 129 130 131 132 133 134 |
# File 'lib/capybara/queries/selector_query.rb', line 126 def resolve_for(node, exact = nil) applied_filters.clear @resolved_node = node @resolved_count += 1 node.synchronize do children = find_nodes_by_selector_format(node, exact).map(&method(:to_element)) 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.
137 138 139 140 141 |
# File 'lib/capybara/queries/selector_query.rb', line 137 def supports_exact? return @expression.respond_to? :to_xpath if @selector.supports_exact?.nil? @selector.supports_exact? 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.
96 97 98 99 100 101 102 |
# File 'lib/capybara/queries/selector_query.rb', line 96 def visible case (vis = .fetch(:visible) { default_visibility }) 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.
112 113 114 115 116 117 118 119 |
# File 'lib/capybara/queries/selector_query.rb', line 112 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) expr = filtered_expression(expr) expr = "(#{expr})[#{xpath_text_conditions}]" if try_text_match_in_expression? expr end |