Class: Capybara::Node::Simple

Inherits:
Object
  • Object
show all
Includes:
Minitest::Expectations, DocumentMatchers, Finders, Matchers
Defined in:
lib/capybara/node/simple.rb,
lib/capybara/minitest/spec.rb

Overview

A Simple is a simpler version of Base which includes only Finders and Matchers and does not include 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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Minitest::Expectations

#must_have_style

Methods included from DocumentMatchers

#assert_no_title, #assert_title, #has_no_title?, #has_title?

Methods included from Matchers

#==, #assert_all_of_selectors, #assert_ancestor, #assert_any_of_selectors, #assert_matches_selector, #assert_matches_style, #assert_no_ancestor, #assert_no_selector, #assert_no_sibling, #assert_no_text, #assert_none_of_selectors, #assert_not_matches_selector, #assert_selector, #assert_sibling, #assert_style, #assert_text, #has_ancestor?, #has_button?, #has_checked_field?, #has_css?, #has_field?, #has_link?, #has_no_ancestor?, #has_no_button?, #has_no_checked_field?, #has_no_css?, #has_no_field?, #has_no_link?, #has_no_select?, #has_no_selector?, #has_no_sibling?, #has_no_table?, #has_no_text?, #has_no_unchecked_field?, #has_no_xpath?, #has_select?, #has_selector?, #has_sibling?, #has_style?, #has_table?, #has_text?, #has_unchecked_field?, #has_xpath?, #matches_css?, #matches_selector?, #matches_style?, #matches_xpath?, #not_matches_css?, #not_matches_selector?, #not_matches_xpath?

Methods included from Finders

#all, #ancestor, #find, #find_button, #find_by_id, #find_field, #find_link, #first, #sibling

Constructor Details

#initialize(native) ⇒ Simple


22
23
24
25
# File 'lib/capybara/node/simple.rb', line 22

def initialize(native)
  native = Capybara::HTML(native) if native.is_a?(String)
  @native = native
end

Instance Attribute Details

#nativeObject (readonly)

Returns the value of attribute native


20
21
22
# File 'lib/capybara/node/simple.rb', line 20

def native
  @native
end

Instance Method Details

#[](name) ⇒ String

Retrieve the given attribute

element[:title] # => HTML title attribute

45
46
47
48
49
50
51
52
53
54
# File 'lib/capybara/node/simple.rb', line 45

def [](name)
  attr_name = name.to_s
  if attr_name == 'value'
    value
  elsif (tag_name == 'input') && (native[:type] == 'checkbox') && (attr_name == 'checked')
    native['checked'] == 'checked'
  else
    native[attr_name]
  end
end

#allow_reload!Object


153
154
155
# File 'lib/capybara/node/simple.rb', line 153

def allow_reload!
  # no op
end

#checked?Boolean

Whether or not the element is checked.


121
122
123
# File 'lib/capybara/node/simple.rb', line 121

def checked?
  native.has_attribute?('checked')
end

#disabled?Boolean

Whether or not the element is disabled.


130
131
132
133
# File 'lib/capybara/node/simple.rb', line 130

def disabled?
  native.has_attribute?('disabled') &&
    %w[button input select textarea optgroup option menuitem fieldset].include?(tag_name)
end

#find_css(css, **_options) ⇒ 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.


169
170
171
# File 'lib/capybara/node/simple.rb', line 169

def find_css(css, **_options)
  native.css(css)
end

#find_xpath(xpath, **_options) ⇒ 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.


174
175
176
# File 'lib/capybara/node/simple.rb', line 174

def find_xpath(xpath, **_options)
  native.xpath(xpath)
end

#initial_cacheObject

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.


184
185
186
# File 'lib/capybara/node/simple.rb', line 184

def initial_cache
  {}
end

#inspectObject


164
165
166
# File 'lib/capybara/node/simple.rb', line 164

def inspect
  %(#<Capybara::Node::Simple tag="#{tag_name}" path="#{path}">)
end

#multiple?Boolean


145
146
147
# File 'lib/capybara/node/simple.rb', line 145

def multiple?
  native.has_attribute?('multiple')
end

#pathString

An XPath expression describing where on the page the element can be found


70
71
72
# File 'lib/capybara/node/simple.rb', line 70

def path
  native.path
end

#selected?Boolean

Whether or not the element is selected.


141
142
143
# File 'lib/capybara/node/simple.rb', line 141

def selected?
  native.has_attribute?('selected')
end

#session_optionsObject

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.


179
180
181
# File 'lib/capybara/node/simple.rb', line 179

def session_options
  Capybara.session_options
end

#synchronize(_seconds = nil) ⇒ Object


149
150
151
# File 'lib/capybara/node/simple.rb', line 149

def synchronize(_seconds = nil)
  yield # simple nodes don't need to wait
end

#tag_nameString


60
61
62
# File 'lib/capybara/node/simple.rb', line 60

def tag_name
  native.node_name
end

#text(_type = nil, normalize_ws: false) ⇒ String


31
32
33
34
# File 'lib/capybara/node/simple.rb', line 31

def text(_type = nil, normalize_ws: false)
  txt = native.text
  normalize_ws ? txt.gsub(/[[:space:]]+/, ' ').strip : txt
end

#titleString


160
161
162
# File 'lib/capybara/node/simple.rb', line 160

def title
  native.title
end

#valueString


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/capybara/node/simple.rb', line 78

def value
  if tag_name == 'textarea'
    native['_capybara_raw_value']
  elsif tag_name == 'select'
    selected_options = find_xpath('.//option[@selected]')
    if multiple?
      selected_options.map(&method(:option_value))
    else
      option_value(selected_options.first || find_xpath('.//option').first)
    end
  elsif tag_name == 'input' && %w[radio checkbox].include?(native[:type])
    native[:value] || 'on'
  else
    native[:value]
  end
end

#visible?(check_ancestors = true) ⇒ Boolean

Whether or not the element is visible. Does not support CSS, so the result may be inaccurate.


103
104
105
106
107
108
109
110
111
112
113
# File 'lib/capybara/node/simple.rb', line 103

def visible?(check_ancestors = true)
  return false if (tag_name == 'input') && (native[:type] == 'hidden')
  return false if tag_name == 'template'

  if check_ancestors
    !find_xpath(VISIBILITY_XPATH)
  else
    # No need for an xpath if only checking the current element
    !(native.key?('hidden') || (/display:\s?none/.match? native[:style]) || %w[script head].include?(tag_name))
  end
end