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.



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

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.



278
279
280
# File 'lib/capybara/node/element.rb', line 278

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)


313
314
315
# File 'lib/capybara/node/element.rb', line 313

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

#hoverObject

Hover on the Element



229
230
231
# File 'lib/capybara/node/element.rb', line 229

def hover
  synchronize { base.hover }
end

#inspectObject



329
330
331
332
333
# File 'lib/capybara/node/element.rb', line 329

def inspect
  %(#<Capybara::Node::Element tag="#{tag_name}" path="#{path}">)
rescue NotSupportedByDriverError
  %(#<Capybara::Node::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



288
289
290
# File 'lib/capybara/node/element.rb', line 288

def path
  synchronize { base.path }
end

#reloadObject



317
318
319
320
321
322
323
324
325
326
327
# File 'lib/capybara/node/element.rb', line 317

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.



268
269
270
# File 'lib/capybara/node/element.rb', line 268

def selected?
  synchronize { base.selected? }
end

#send_keys(*args) ⇒ Object

Send Keystrokes to the Element

Examples:

element.send_keys "foo"                     #=> value: 'foo'
element.send_keys "tet", :left, "s"   #=> value: 'test'
element.send_keys [:control, 'a'], :space   #=> value: ' '

Symbols supported for keys :cancel :help :backspace :tab :clear :return :enter :shift :control :alt :pause :escape :space :page_up :page_down :end :home :left :up :right :down :insert :delete :semicolon :equals :numpad0 :numpad1 :numpad2 :numpad3 :numpad4 :numpad5 :numpad6 :numpad7 :numpad8 :numpad9 :multiply - numeric keypad * :add - numeric keypad + :separator - numeric keypad 'separator' key ?? :subtract - numeric keypad - :decimal - numeric keypad . :divide - numeric keypad / :f1 :f2 :f3 :f4 :f5 :f6 :f7 :f8 :f9 :f10 :f11 :f12 :meta :command - alias of :meta



221
222
223
# File 'lib/capybara/node/element.rb', line 221

def send_keys(*args)
  synchronize { base.send_keys(*args) }
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



237
238
239
# File 'lib/capybara/node/element.rb', line 237

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.



299
300
301
# File 'lib/capybara/node/element.rb', line 299

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.



248
249
250
# File 'lib/capybara/node/element.rb', line 248

def visible?
  synchronize { base.visible? }
end