instance method
css_select
Ruby on Rails 4.0.13
Since v3.0.20 Last seen in v4.1.16Signature
css_select(*args)
Select and return all matching elements.
If called with a single argument, uses that argument as a selector to match all elements of the current page. Returns an empty array if no match is found.
If called with two arguments, uses the first argument as the base element and the second argument as the selector. Attempts to match the base element and any of its children. Returns an empty array if no match is found.
The selector may be a CSS selector expression (String), an expression with substitution values (Array) or an HTML::Selector object.
# Selects all div tags
divs = css_select("div")
# Selects all paragraph tags and does something interesting
pars = css_select("p")
pars.each do |par|
# Do something fun with paragraphs here...
end
# Selects all list items in unordered lists
items = css_select("ul>li")
# Selects all form tags and then all inputs inside the form
forms = css_select("form")
forms.each do |form|
inputs = css_select(form, "input")
...
end
Parameters
-
argsrest
Source
# File actionpack/lib/action_dispatch/testing/assertions/selector.rb, line 60
def css_select(*args)
# See assert_select to understand what's going on here.
arg = args.shift
if arg.is_a?(HTML::Node)
root = arg
arg = args.shift
elsif arg == nil
raise ArgumentError, "First argument is either selector or element to select, but nil found. Perhaps you called assert_select with an element that does not exist?"
elsif defined?(@selected) && @selected
matches = []
@selected.each do |selected|
subset = css_select(selected, HTML::Selector.new(arg.dup, args.dup))
subset.each do |match|
matches << match unless matches.any? { |m| m.equal?(match) }
end
end
return matches
else
root = response_from_page
end
case arg
when String
selector = HTML::Selector.new(arg, args)
when Array
selector = HTML::Selector.new(*arg)
when HTML::Selector
selector = arg
else raise ArgumentError, "Expecting a selector as the first argument"
end
selector.select(root)
end
Defined in actionpack/lib/action_dispatch/testing/assertions/selector.rb line 60
· View on GitHub
· Improve this page
· Find usages on GitHub