class Capybara::Node::Simple
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.
Attributes
Public Class Methods
# File lib/capybara/node/simple.rb, line 22 def initialize(native) native = Capybara::HTML(native) if native.is_a?(String) @native = native end
Public Instance Methods
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 44 def [](name) attr_name = name.to_s if attr_name == 'value' value elsif tag_name == 'input' and native[:type] == 'checkbox' and attr_name == 'checked' native['checked'] == 'checked' else native[attr_name] end end
# File lib/capybara/node/simple.rb, line 146 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 119 def checked? native.has_attribute?('checked') end
Whether or not the element is disabled.
@return [Boolean] Whether the element is disabled
# File lib/capybara/node/simple.rb, line 128 def disabled? native.has_attribute?('disabled') end
@api private
# File lib/capybara/node/simple.rb, line 162 def find_css(css) native.css(css) end
@api private
# File lib/capybara/node/simple.rb, line 167 def find_xpath(xpath) native.xpath(xpath) end
# File lib/capybara/node/simple.rb, line 157 def inspect %(#<Capybara::Node::Simple tag="#{tag_name}" path="#{path}">) end
Whether or not the element is selected.
@return [Boolean] Whether the element is selected
# File lib/capybara/node/simple.rb, line 138 def selected? native.has_attribute?('selected') end
@api private
# File lib/capybara/node/simple.rb, line 172 def session_options Capybara.session_options end
# File lib/capybara/node/simple.rb, line 142 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 59 def tag_name native.node_name end
@return [String] The text of the element
# File lib/capybara/node/simple.rb, line 31 def text(_type = nil) native.text end
@return [String] The title of the document
# File lib/capybara/node/simple.rb, line 153 def title native.title end
@return [String] The value of the form element
# File lib/capybara/node/simple.rb, line 77 def value if tag_name == 'textarea' native['_capybara_raw_value'] 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 elsif tag_name == 'input' && %w[radio checkbox].include?(native[:type]) native[:value] || 'on' else native[:value] end end
Whether or not the element is visible. Does not support CSS, so the result may be inaccurate.
@param [Boolean] check_ancestors Whether to inherit visibility from ancestors @return [Boolean] Whether the element is visible
# File lib/capybara/node/simple.rb, line 102 def visible?(check_ancestors = true) return false if (tag_name == 'input') && (native[:type] == "hidden") if check_ancestors !native.xpath("boolean(./ancestor-or-self::*[contains(@style, 'display:none') or contains(@style, 'display: none') or @hidden or name()='script' or name()='head'])") else # No need for an xpath if only checking the current element !(native.has_attribute?('hidden') || (native[:style] =~ /display:\s?none/) || %w[script head].include?(tag_name)) end end