class Capybara::Queries::SelectorQuery
Constants
- VALID_KEYS
- VALID_MATCH
Attributes
expression[RW]
find[RW]
locator[RW]
negative[RW]
options[RW]
selector[RW]
Public Class Methods
new(*args)
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 10 def initialize(*args) @options = if args.last.is_a?(Hash) then args.pop.dup else {} end if args[0].is_a?(Symbol) @selector = Selector.all[args.shift] @locator = args.shift else @selector = Selector.all.values.find { |s| s.match?(args[0]) } @locator = args.shift end @selector ||= Selector.all[Capybara.default_selector] warn "Unused parameters passed to #{self.class.name} : #{args.to_s}" unless args.empty? # for compatibility with Capybara 2.0 if Capybara.exact_options and @selector == Selector.all[:option] @options[:exact] = true end @expression = @selector.call(@locator) assert_valid_keys end
Public Instance Methods
css()
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 102 def css @expression end
description()
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 36 def description @description = String.new("#{label} #{locator.inspect}") @description << " with text #{options[:text].inspect}" if options[:text] @description << selector.description(options) @description end
exact?()
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 77 def exact? if options.has_key?(:exact) @options[:exact] else Capybara.exact end end
label()
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 34 def label; selector.label or selector.name; end
match()
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 85 def match if options.has_key?(:match) @options[:match] else Capybara.match end end
matches_filters?(node)
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 43 def matches_filters?(node) if options[:text] regexp = options[:text].is_a?(Regexp) ? options[:text] : Regexp.escape(options[:text].to_s) return false if not node.text(visible).match(regexp) end case visible when :visible then return false unless node.visible? when :hidden then return false if node.visible? end selector.custom_filters.each do |name, filter| if options.has_key?(name) return false unless filter.matches?(node, options[name]) elsif filter.default? return false unless filter.matches?(node, filter.default) end end end
name()
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 33 def name; selector.name; end
resolve_for(node, exact = nil)
click to toggle source
@api private
# File lib/capybara/queries/selector_query.rb, line 107 def resolve_for(node, exact = nil) node.synchronize do children = if selector.format == :css node.find_css(self.css) else node.find_xpath(self.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
visible()
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 61 def visible if options.has_key?(:visible) case @options[:visible] when true then :visible when false then :all else @options[:visible] end else if Capybara.ignore_hidden_elements :visible else :all end end end
xpath(exact=nil)
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 93 def xpath(exact=nil) exact = self.exact? if exact == nil if @expression.respond_to?(:to_xpath) and exact @expression.to_xpath(:exact) else @expression.to_s end end
Private Instance Methods
assert_valid_keys()
click to toggle source
Calls superclass method
Capybara::Queries::BaseQuery#assert_valid_keys
# File lib/capybara/queries/selector_query.rb, line 130 def assert_valid_keys super unless VALID_MATCH.include?(match) raise ArgumentError, "invalid option #{match.inspect} for :match, should be one of #{VALID_MATCH.map(&:inspect).join(", ")}" end end
valid_keys()
click to toggle source
# File lib/capybara/queries/selector_query.rb, line 126 def valid_keys COUNT_KEYS + [:text, :visible, :exact, :match, :wait] + @selector.custom_filters.keys end