Class: Capybara::Node::Element

Inherits:
Base
  • Object
show all
Defined in:
lib/capybara/node/element.rb

Overview

A Element represents a single element on the page. It is possible to interact with the contents of this element the same as with a document:

session = Capybara::Session.new(:rack_test, my_app)

bar = session.find('#bar')              # from Capybara::Node::Finders
bar.select('Baz', :from => 'Quox')      # from Capybara::Node::Actions

Element also has access to HTML attributes and other properties of the element:

bar.value
bar.text
bar[:title]

See Also:

Instance Attribute Summary

Attributes inherited from Base

#base, #parent, #session

Instance Method Summary collapse

Methods inherited from Base

#find_css, #find_xpath, #synchronize

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 Actions

#attach_file, #check, #choose, #click_button, #click_link, #click_link_or_button, #fill_in, #select, #uncheck, #unselect

Methods included from Finders

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

Constructor Details

#initialize(session, base, parent, query) ⇒ Element



25
26
27
28
29
# File 'lib/capybara/node/element.rb', line 25

def initialize(session, base, parent, query)
  super(session, base)
  @parent = parent
  @query = query
end

Instance Method Details

#[](attribute) ⇒ String

Retrieve the given attribute

element[:title] # => HTML title attribute


75
76
77
# File 'lib/capybara/node/element.rb', line 75

def [](attribute)
  synchronize { base[attribute] }
end

#allow_reload!Object



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

def allow_reload!
  @allow_reload = true
end

#checked?Boolean

Whether or not the element is checked.



185
186
187
# File 'lib/capybara/node/element.rb', line 185

def checked?
  synchronize { base.checked? }
end

#clickObject

Click the Element



132
133
134
# File 'lib/capybara/node/element.rb', line 132

def click
  synchronize { base.click }
end

#disabled?Boolean

Whether or not the element is disabled.



205
206
207
# File 'lib/capybara/node/element.rb', line 205

def disabled?
  synchronize { base.disabled? }
end

#double_clickObject

Double Click the Element



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

def double_click
  synchronize { base.double_click }
end

#drag_to(node) ⇒ Object

Drag the element to the given other element.

source = page.find('#foo')
target = page.find('#bar')
source.drag_to(target)


240
241
242
# File 'lib/capybara/node/element.rb', line 240

def drag_to(node)
  synchronize { base.drag_to(node.base) }
end

#hoverObject

Hover on the Element



156
157
158
# File 'lib/capybara/node/element.rb', line 156

def hover
  synchronize { base.hover }
end

#inspectObject



256
257
258
259
260
# File 'lib/capybara/node/element.rb', line 256

def inspect
  %(#<Capybara::Element tag="#{tag_name}" path="#{path}">)
rescue NotSupportedByDriverError
  %(#<Capybara::Element tag="#{tag_name}">)
end

#nativeObject



39
40
41
# File 'lib/capybara/node/element.rb', line 39

def native
  synchronize { base.native }
end

#pathString

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



215
216
217
# File 'lib/capybara/node/element.rb', line 215

def path
  synchronize { base.path }
end

#reloadObject



244
245
246
247
248
249
250
251
252
253
254
# File 'lib/capybara/node/element.rb', line 244

def reload
  if @allow_reload
    begin
      reloaded = parent.reload.first(@query.name, @query.locator, @query.options)
      @base = reloaded.base if reloaded
    rescue => e
      raise e unless catch_error?(e)
    end
  end
  self
end

#right_clickObject

Right Click the Element



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

def right_click
  synchronize { base.right_click }
end

#select_optionObject

Select this node if is an option element inside a select tag



116
117
118
# File 'lib/capybara/node/element.rb', line 116

def select_option
  synchronize { base.select_option }
end

#selected?Boolean

Whether or not the element is selected.



195
196
197
# File 'lib/capybara/node/element.rb', line 195

def selected?
  synchronize { base.selected? }
end

#set(value, options = {}) ⇒ Object

Set the value of the form element to the given value.



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/capybara/node/element.rb', line 94

def set(value, options={})
  options ||= {}
  
  driver_supports_options = (base.method(:set).arity != 1)

  unless options.empty? || driver_supports_options 
    warn "Options passed to Capybara::Node#set but the driver doesn't support them"
  end

  synchronize do
    if driver_supports_options
      base.set(value, options)
    else
      base.set(value)
    end
  end
end

#tag_nameString



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

def tag_name
  synchronize { base.tag_name }
end

#text(type = nil) ⇒ String

Retrieve the text of the element. If Capybara.ignore_hidden_elements is true, which it is by default, then this will return only text which is visible. The exact semantics of this may differ between drivers, but generally any text within elements with display:none is ignored. This behaviour can be overridden by passing :all to this method.



55
56
57
58
59
60
61
62
63
64
# File 'lib/capybara/node/element.rb', line 55

def text(type=nil)
  type ||= :all unless Capybara.ignore_hidden_elements or Capybara.visible_text_only
  synchronize do
    if type == :all
      base.all_text
    else
      base.visible_text
    end
  end
end

#trigger(event) ⇒ Object

Trigger any event on the current element, for example mouseover or focus events. Does not work in Selenium.



226
227
228
# File 'lib/capybara/node/element.rb', line 226

def trigger(event)
  synchronize { base.trigger(event) }
end

#unselect_optionObject

Unselect this node if is an option element inside a multiple select tag



124
125
126
# File 'lib/capybara/node/element.rb', line 124

def unselect_option
  synchronize { base.unselect_option }
end

#valueString



83
84
85
# File 'lib/capybara/node/element.rb', line 83

def value
  synchronize { base.value }
end

#visible?Boolean

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



175
176
177
# File 'lib/capybara/node/element.rb', line 175

def visible?
  synchronize { base.visible? }
end