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.
-
#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.
185 186 187 |
# File 'lib/capybara/node/element.rb', line 185 def checked? synchronize { base.checked? } end |
#click ⇒ Object
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_click ⇒ Object
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 |
#hover ⇒ Object
Hover on the Element
156 157 158 |
# File 'lib/capybara/node/element.rb', line 156 def hover synchronize { base.hover } end |
#inspect ⇒ Object
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 |
#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
215 216 217 |
# File 'lib/capybara/node/element.rb', line 215 def path synchronize { base.path } end |
#reload ⇒ Object
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.) @base = reloaded.base if reloaded rescue => e raise e unless catch_error?(e) end end self end |
#right_click ⇒ Object
Right Click the Element
140 141 142 |
# File 'lib/capybara/node/element.rb', line 140 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 |
# 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, ={}) ||= {} = (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.
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_option ⇒ Object
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 |
#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.
175 176 177 |
# File 'lib/capybara/node/element.rb', line 175 def visible? synchronize { base.visible? } end |