Class: Capybara::Node::Simple

Inherits:
Object
  • Object
show all
Includes:
DocumentMatchers, Finders, Matchers
Defined in:
lib/capybara/node/simple.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 DocumentMatchers

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

Methods included from Matchers

#==, #assert_no_selector, #assert_no_text, #assert_selector, #assert_text, #has_button?, #has_checked_field?, #has_css?, #has_field?, #has_link?, #has_no_button?, #has_no_checked_field?, #has_no_css?, #has_no_field?, #has_no_link?, #has_no_select?, #has_no_selector?, #has_no_table?, #has_no_text?, #has_no_unchecked_field?, #has_no_xpath?, #has_select?, #has_selector?, #has_table?, #has_text?, #has_unchecked_field?, #has_xpath?

Methods included from Finders

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

Constructor Details

- (Simple) initialize(native)



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

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

Instance Attribute Details

- (Object) native (readonly)

Returns the value of attribute native



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

def native
  @native
end

Instance Method Details

- (String) [](name)

Retrieve the given attribute

element[:title] # => HTML title attribute


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

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

- (Object) allow_reload!



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

def allow_reload!
  # no op
end

- (Boolean) checked?

Whether or not the element is checked.



117
118
119
# File 'lib/capybara/node/simple.rb', line 117

def checked?
  native[:checked]
end

- (Boolean) disabled?

Whether or not the element is disabled.



126
127
128
# File 'lib/capybara/node/simple.rb', line 126

def disabled?
  native[:disabled]
end

- (Object) find_css(css)

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.



157
158
159
# File 'lib/capybara/node/simple.rb', line 157

def find_css(css)
  native.css(css)
end

- (Object) find_xpath(xpath)

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.



162
163
164
# File 'lib/capybara/node/simple.rb', line 162

def find_xpath(xpath)
  native.xpath(xpath)
end

- (Object) inspect



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

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

- (String) path

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



68
69
70
# File 'lib/capybara/node/simple.rb', line 68

def path
  native.path
end

- (Boolean) selected?

Whether or not the element is selected.



136
137
138
# File 'lib/capybara/node/simple.rb', line 136

def selected?
  native[:selected]
end

- (Object) synchronize(seconds = nil)



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

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

- (String) tag_name



58
59
60
# File 'lib/capybara/node/simple.rb', line 58

def tag_name
  native.node_name
end

- (String) text(type = nil)



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

def text(type=nil)
  native.text
end

- (Object) title



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

def title
  native.xpath("//title").first.text
end

- (String) value



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

def value
  if tag_name == 'textarea'
    native.content
  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

- (Boolean) visible?(check_ancestors = true)

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



101
102
103
104
105
106
107
108
109
# File 'lib/capybara/node/simple.rb', line 101

def visible?(check_ancestors = true)
  if check_ancestors
    #check size because oldest supported nokogiri doesnt support xpath boolean() function
    native.xpath("./ancestor-or-self::*[contains(@style, 'display:none') or contains(@style, 'display: none') or @hidden or name()='script' or name()='head']").size() == 0
  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