Class: Capybara::Node::Element
- 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)
= session.find('#bar') # from Capybara::Node::Finders
.select('Baz', :from => 'Quox') # from Capybara::Node::Actions
Element also has access to HTML attributes and other properties of the element:
.value
.text
[:title]
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#[](attribute) ⇒ String
Retrieve the given attribute.
- #allow_reload! ⇒ Object
-
#checked? ⇒ Boolean
Whether or not the element is checked.
-
#click ⇒ Object
Click the Element.
-
#disabled? ⇒ Boolean
Whether or not the element is disabled.
-
#double_click ⇒ Object
Double Click the Element.
-
#drag_to(node) ⇒ Object
Drag the element to the given other element.
-
#hover ⇒ Object
Hover on the Element.
-
#initialize(session, base, parent, query) ⇒ Element
constructor
A new instance of Element.
- #inspect ⇒ Object
-
#native ⇒ Object
The native element from the driver, this allows access to driver specific methods.
-
#path ⇒ String
An XPath expression describing where on the page the element can be found.
- #reload ⇒ Object
-
#right_click ⇒ Object
Right Click the Element.
-
#select_option ⇒ Object
Select this node if is an option element inside a select tag.
-
#selected? ⇒ Boolean
Whether or not the element is selected.
-
#send_keys(keys, ...) ⇒ Object
Send Keystrokes to the Element.
-
#set(value, options = {}) ⇒ Object
Set the value of the form element to the given value.
-
#tag_name ⇒ String
The tag name of the element.
-
#text(type = nil) ⇒ String
Retrieve the text of the element.
-
#trigger(event) ⇒ Object
Trigger any event on the current element, for example mouseover or focus events.
-
#unselect_option ⇒ Object
Unselect this node if is an option element inside a multiple select tag.
-
#value ⇒ String
The value of the form element.
-
#visible? ⇒ Boolean
Whether or not the element is visible.
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
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
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.
260 261 262 |
# File 'lib/capybara/node/element.rb', line 260 def checked? synchronize { base.checked? } end |
#click ⇒ Object
Click the Element
133 134 135 |
# File 'lib/capybara/node/element.rb', line 133 def click synchronize { base.click } end |
#disabled? ⇒ Boolean
Whether or not the element is disabled.
280 281 282 |
# File 'lib/capybara/node/element.rb', line 280 def disabled? synchronize { base.disabled? } end |
#double_click ⇒ Object
Double Click the Element
149 150 151 |
# File 'lib/capybara/node/element.rb', line 149 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)
315 316 317 |
# File 'lib/capybara/node/element.rb', line 315 def drag_to(node) synchronize { base.drag_to(node.base) } end |
#hover ⇒ Object
Hover on the Element
231 232 233 |
# File 'lib/capybara/node/element.rb', line 231 def hover synchronize { base.hover } end |
#inspect ⇒ Object
331 332 333 334 335 |
# File 'lib/capybara/node/element.rb', line 331 def inspect %(#<Capybara::Node::Element tag="#{tag_name}" path="#{path}">) rescue NotSupportedByDriverError %(#<Capybara::Node::Element tag="#{tag_name}">) end |
#native ⇒ Object
Returns 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 |
#path ⇒ String
An XPath expression describing where on the page the element can be found
290 291 292 |
# File 'lib/capybara/node/element.rb', line 290 def path synchronize { base.path } end |
#reload ⇒ Object
319 320 321 322 323 324 325 326 327 328 329 |
# File 'lib/capybara/node/element.rb', line 319 def reload if @allow_reload begin reloaded = parent.reload.first(@query.name, @query.locator, @query.) @base = reloaded.base if reloaded rescue => e raise e unless catch_error?(e) end end self end |
#right_click ⇒ Object
Right Click the Element
141 142 143 |
# File 'lib/capybara/node/element.rb', line 141 def right_click synchronize { base.right_click } end |
#select_option ⇒ Object
Select this node if is an option element inside a select tag
116 117 118 119 |
# File 'lib/capybara/node/element.rb', line 116 def select_option warn "Attempt to select disabled option: #{value || text}" if disabled? synchronize { base.select_option } end |
#selected? ⇒ Boolean
Whether or not the element is selected.
270 271 272 |
# File 'lib/capybara/node/element.rb', line 270 def selected? synchronize { base.selected? } end |
#send_keys(keys, ...) ⇒ 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: ' ' - assuming ctrl-a selects all contents
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
223 224 225 |
# File 'lib/capybara/node/element.rb', line 223 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, ={}) ||= {} = (base.method(:set).arity != 1) unless .empty? || warn "Options passed to Capybara::Node#set but the driver doesn't support them" end synchronize do if base.set(value, ) else base.set(value) end end end |
#tag_name ⇒ String
Returns The tag name of the element.
239 240 241 |
# File 'lib/capybara/node/element.rb', line 239 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.
301 302 303 |
# File 'lib/capybara/node/element.rb', line 301 def trigger(event) synchronize { base.trigger(event) } end |
#unselect_option ⇒ Object
Unselect this node if is an option element inside a multiple select tag
125 126 127 |
# File 'lib/capybara/node/element.rb', line 125 def unselect_option synchronize { base.unselect_option } end |
#value ⇒ String
Returns 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.
250 251 252 |
# File 'lib/capybara/node/element.rb', line 250 def visible? synchronize { base.visible? } end |