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_matches_selector, #assert_no_selector, #assert_no_text, #assert_not_matches_selector, #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?, #matches_selector?, #not_matches_selector?
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.
26 27 28 29 30 |
# File 'lib/capybara/node/element.rb', line 26 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
76 77 78 |
# File 'lib/capybara/node/element.rb', line 76 def [](attribute) synchronize { base[attribute] } end |
#allow_reload! ⇒ Object
32 33 34 |
# File 'lib/capybara/node/element.rb', line 32 def allow_reload! @allow_reload = true end |
#checked? ⇒ Boolean
Whether or not the element is checked.
261 262 263 |
# File 'lib/capybara/node/element.rb', line 261 def checked? synchronize { base.checked? } end |
#click ⇒ Object
Click the Element
134 135 136 |
# File 'lib/capybara/node/element.rb', line 134 def click synchronize { base.click } end |
#disabled? ⇒ Boolean
Whether or not the element is disabled.
281 282 283 |
# File 'lib/capybara/node/element.rb', line 281 def disabled? synchronize { base.disabled? } end |
#double_click ⇒ Object
Double Click the Element
150 151 152 |
# File 'lib/capybara/node/element.rb', line 150 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)
316 317 318 |
# File 'lib/capybara/node/element.rb', line 316 def drag_to(node) synchronize { base.drag_to(node.base) } end |
#hover ⇒ Object
Hover on the Element
232 233 234 |
# File 'lib/capybara/node/element.rb', line 232 def hover synchronize { base.hover } end |
#inspect ⇒ Object
332 333 334 335 336 |
# File 'lib/capybara/node/element.rb', line 332 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.
40 41 42 |
# File 'lib/capybara/node/element.rb', line 40 def native synchronize { base.native } end |
#path ⇒ String
An XPath expression describing where on the page the element can be found
291 292 293 |
# File 'lib/capybara/node/element.rb', line 291 def path synchronize { base.path } end |
#reload ⇒ Object
320 321 322 323 324 325 326 327 328 329 330 |
# File 'lib/capybara/node/element.rb', line 320 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
142 143 144 |
# File 'lib/capybara/node/element.rb', line 142 def right_click synchronize { base.right_click } end |
#select_option ⇒ Object
Select this node if is an option element inside a select tag
117 118 119 120 |
# File 'lib/capybara/node/element.rb', line 117 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.
271 272 273 |
# File 'lib/capybara/node/element.rb', line 271 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
224 225 226 |
# File 'lib/capybara/node/element.rb', line 224 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.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/capybara/node/element.rb', line 95 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.
240 241 242 |
# File 'lib/capybara/node/element.rb', line 240 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.
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/capybara/node/element.rb', line 56 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.
302 303 304 |
# File 'lib/capybara/node/element.rb', line 302 def trigger(event) synchronize { base.trigger(event) } end |
#unselect_option ⇒ Object
Unselect this node if is an option element inside a multiple select tag
126 127 128 |
# File 'lib/capybara/node/element.rb', line 126 def unselect_option synchronize { base.unselect_option } end |
#value ⇒ String
Returns The value of the form element.
84 85 86 |
# File 'lib/capybara/node/element.rb', line 84 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.
251 252 253 |
# File 'lib/capybara/node/element.rb', line 251 def visible? synchronize { base.visible? } end |