A {Capybara::Node::Simple} is a simpler version of {Capybara::Node::Base} which includes only {Capybara::Node::Finders} and {Capybara::Node::Matchers} and does not include {Capybara::Node::Actions}. This type of node is returned when using {Capybara.string}.
It is useful in that it does not require a session, an application or a driver, but can still use Capybara's finders and matchers on any string that contains HTML.
# File lib/capybara/node/simple.rb, line 20 def initialize(native) native = Nokogiri::HTML(native) if native.is_a?(String) @native = native end
Retrieve the given attribute
element[:title] # => HTML title attribute
@param [Symbol] name The attribute name to retrieve @return [String] The value of the attribute
# File lib/capybara/node/simple.rb, line 42 def [](name) attr_name = name.to_s if attr_name == 'value' value elsif 'input' == tag_name and 'checkbox' == native[:type] and 'checked' == attr_name native['checked'] == 'checked' else native[attr_name] end end
# File lib/capybara/node/simple.rb, line 134 def allow_reload! # no op end
Whether or not the element is checked.
@return [Boolean] Whether the element is checked
# File lib/capybara/node/simple.rb, line 107 def checked? native[:checked] end
Whether or not the element is disabled.
@return [Boolean] Whether the element is disabled
# File lib/capybara/node/simple.rb, line 116 def disabled? native[:disabled] end
# File lib/capybara/node/simple.rb, line 146 def has_no_title?(content) not has_title?(content) end
# File lib/capybara/node/simple.rb, line 142 def has_title?(content) title.match(Capybara::Helpers.to_regexp(content)) end
Whether or not the element is selected.
@return [Boolean] Whether the element is selected
# File lib/capybara/node/simple.rb, line 126 def selected? native[:selected] end
# File lib/capybara/node/simple.rb, line 130 def synchronize(seconds=nil) yield # simple nodes don't need to wait end
@return [String] The tag name of the element
# File lib/capybara/node/simple.rb, line 57 def tag_name native.node_name end
@return [String] The text of the element
# File lib/capybara/node/simple.rb, line 29 def text(type=nil) native.text end
# File lib/capybara/node/simple.rb, line 138 def title native.xpath("//title").first.text end
@return [String] The value of the form element
# File lib/capybara/node/simple.rb, line 75 def value if tag_name == 'textarea' native.content.sub(/\A\n/, '') elsif tag_name == 'select' if native['multiple'] == 'multiple' native.xpath(".//option[@selected='selected']").map { |option| option[:value] || option.content } else option = native.xpath(".//option[@selected='selected']").first || native.xpath(".//option").first option[:value] || option.content if option end else native[:value] end end
Whether or not the element is visible. Does not support CSS, so the result may be inaccurate.
@return [Boolean] Whether the element is visible
# File lib/capybara/node/simple.rb, line 97 def visible? native.xpath("./ancestor-or-self::*[contains(@style, 'display:none') or contains(@style, 'display: none') or name()='script' or name()='head']").size == 0 end
# File lib/capybara/node/simple.rb, line 152 def resolve_query(query, exact=nil) elements = if query.selector.format == :css native.css(query.css) else native.xpath(query.xpath(exact)) end.map do |node| self.class.new(node) end Capybara::Result.new(elements, query) end