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

#synchronize

Methods included from Matchers

#==, #assert_no_selector, #assert_selector, #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

Returns a new instance of 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

Parameters:

  • attribute (Symbol)

    The attribute to retrieve

Returns:

  • (String)

    The value of the 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.

Returns:

  • (Boolean)

    Whether the element is checked



154
155
156
# File 'lib/capybara/node/element.rb', line 154

def checked?
  synchronize { base.checked? }
end

#clickObject

Click the Element



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

def click
  synchronize { base.click }
end

#disabled?Boolean

Whether or not the element is disabled.

Returns:

  • (Boolean)

    Whether the element is disabled



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

def disabled?
  synchronize { base.disabled? }
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)

Parameters:

  • node (Capybara::Element)

    The element to drag to



209
210
211
# File 'lib/capybara/node/element.rb', line 209

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

#hoverObject

Hover on the Element



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

def hover
  synchronize { base.hover }
end

#inspectObject



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

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

#nativeObject

Returns The native element from the driver, this allows access to driver specific methods.

Returns:

  • (Object)

    The native element from the driver, this allows access to driver specific methods



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

Returns:

  • (String)

    An XPath expression



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

def path
  synchronize { base.path }
end

#reloadObject



213
214
215
216
217
218
219
220
221
222
223
# File 'lib/capybara/node/element.rb', line 213

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

#select_optionObject

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



101
102
103
# File 'lib/capybara/node/element.rb', line 101

def select_option
  synchronize { base.select_option }
end

#selected?Boolean

Whether or not the element is selected.

Returns:

  • (Boolean)

    Whether the element is selected



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

def selected?
  synchronize { base.selected? }
end

#set(value) ⇒ Object

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

Parameters:

  • value (String)

    The new value



93
94
95
# File 'lib/capybara/node/element.rb', line 93

def set(value)
  synchronize { base.set(value) }
end

#tag_nameString

Returns The tag name of the element.

Returns:

  • (String)

    The tag name of the element



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

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.

Parameters:

  • type (:all, :visible) (defaults to: nil)

    Whether to return only visible or all text

Returns:

  • (String)

    The text of the element



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.

Parameters:

  • event (String)

    The name of the event to trigger



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

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

#unselect_optionObject

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



109
110
111
# File 'lib/capybara/node/element.rb', line 109

def unselect_option
  synchronize { base.unselect_option }
end

#valueString

Returns The value of the form element.

Returns:

  • (String)

    The value of the form element



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.

Returns:

  • (Boolean)

    Whether the element is visible



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

def visible?
  synchronize { base.visible? }
end