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 = ::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
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
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
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 .ignore_hidden_elements or .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
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 |