Class: Capybara::Cuprite::Node
- Inherits:
-
Driver::Node
- Object
- Driver::Node
- Capybara::Cuprite::Node
- Defined in:
- lib/capybara/cuprite/node.rb
Instance Attribute Summary collapse
-
#node ⇒ Object
readonly
Returns the value of attribute node.
-
#target_id ⇒ Object
readonly
Returns the value of attribute target_id.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #[](name) ⇒ Object
- #all_text ⇒ Object
- #as_json ⇒ Object private
- #attributes ⇒ Object
- #browser ⇒ Object
- #checked? ⇒ Boolean
- #click(keys = [], offset = {}) ⇒ Object
- #command(name, *args) ⇒ Object
- #disabled? ⇒ Boolean
- #double_click(keys = [], offset = {}) ⇒ Object
- #drag_by(x, y) ⇒ Object
- #drag_to(other) ⇒ Object
- #find(method, selector) ⇒ Object
- #find_css(selector) ⇒ Object
- #find_xpath(selector) ⇒ Object
- #hover ⇒ Object
-
#initialize(driver, target_id, node) ⇒ Node
constructor
A new instance of Node.
- #inspect ⇒ Object
- #parents ⇒ Object
- #path ⇒ Object
- #property(name) ⇒ Object
- #right_click(keys = [], offset = {}) ⇒ Object
- #scroll_by(x, y) ⇒ Object
- #scroll_to(element, location, position = nil) ⇒ Object
- #select_option ⇒ Object
- #selected? ⇒ Boolean
- #send_keys(*keys) ⇒ Object (also: #send_key)
- #set(value, options = {}) ⇒ Object
- #tag_name ⇒ Object
- #to_json ⇒ Object private
- #trigger(event) ⇒ Object
- #unselect_option ⇒ Object
- #value ⇒ Object
- #visible? ⇒ Boolean
- #visible_text ⇒ Object
Constructor Details
#initialize(driver, target_id, node) ⇒ Node
Returns a new instance of Node.
7 8 9 10 |
# File 'lib/capybara/cuprite/node.rb', line 7 def initialize(driver, target_id, node) super(driver, self) @target_id, @node = target_id, node end |
Instance Attribute Details
#node ⇒ Object (readonly)
Returns the value of attribute node.
5 6 7 |
# File 'lib/capybara/cuprite/node.rb', line 5 def node @node end |
#target_id ⇒ Object (readonly)
Returns the value of attribute target_id.
5 6 7 |
# File 'lib/capybara/cuprite/node.rb', line 5 def target_id @target_id end |
Instance Method Details
#==(other) ⇒ Object
194 195 196 197 198 199 |
# File 'lib/capybara/cuprite/node.rb', line 194 def ==(other) # We compare backendNodeId because once nodeId is sent to frontend backend # never returns same nodeId sending 0. In other words frontend is # responsible for keeping track of node ids. @target_id == other.target_id && @node["backendNodeId"] == other.node["backendNodeId"] end |
#[](name) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/capybara/cuprite/node.rb', line 69 def [](name) # Although the attribute matters, the property is consistent. Return that in # preference to the attribute for links and images. if ((tag_name == "img") && (name == "src")) || ((tag_name == "a") && (name == "href")) # if attribute exists get the property return command(:attribute, name) && command(:property, name) end value = property(name) value = command(:attribute, name) if value.nil? || value.is_a?(Hash) value end |
#all_text ⇒ Object
49 50 51 |
# File 'lib/capybara/cuprite/node.rb', line 49 def all_text filter_text(command(:all_text)) end |
#as_json ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
220 221 222 223 |
# File 'lib/capybara/cuprite/node.rb', line 220 def as_json(*) # FIXME: Where this method is used and why attr is called id? { ELEMENT: { target_id: @target_id, id: @node } } end |
#attributes ⇒ Object
83 84 85 |
# File 'lib/capybara/cuprite/node.rb', line 83 def attributes command(:attributes) end |
#browser ⇒ Object
12 13 14 |
# File 'lib/capybara/cuprite/node.rb', line 12 def browser driver.browser end |
#checked? ⇒ Boolean
131 132 133 |
# File 'lib/capybara/cuprite/node.rb', line 131 def checked? self[:checked] end |
#click(keys = [], offset = {}) ⇒ Object
143 144 145 |
# File 'lib/capybara/cuprite/node.rb', line 143 def click(keys = [], offset = {}) command(:click, keys, offset) end |
#command(name, *args) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/capybara/cuprite/node.rb', line 16 def command(name, *args) browser.send(name, @node, *args) rescue BrowserError => e case e. when "No node with given id found" raise ObsoleteNode.new(self, e.response) when "Cuprite.MouseEventFailed" raise MouseEventFailed.new(self, e.response) else raise end end |
#disabled? ⇒ Boolean
139 140 141 |
# File 'lib/capybara/cuprite/node.rb', line 139 def disabled? command(:disabled?) end |
#double_click(keys = [], offset = {}) ⇒ Object
151 152 153 |
# File 'lib/capybara/cuprite/node.rb', line 151 def double_click(keys = [], offset = {}) command(:double_click, keys, offset) end |
#drag_by(x, y) ⇒ Object
163 164 165 |
# File 'lib/capybara/cuprite/node.rb', line 163 def drag_by(x, y) command(:drag_by, x, y) end |
#drag_to(other) ⇒ Object
159 160 161 |
# File 'lib/capybara/cuprite/node.rb', line 159 def drag_to(other) command(:drag, other.node) end |
#find(method, selector) ⇒ Object
35 36 37 38 39 |
# File 'lib/capybara/cuprite/node.rb', line 35 def find(method, selector) command(:find_within, method, selector).map do |node| self.class.new(driver, @target_id, node) end end |
#find_css(selector) ⇒ Object
45 46 47 |
# File 'lib/capybara/cuprite/node.rb', line 45 def find_css(selector) find(:css, selector) end |
#find_xpath(selector) ⇒ Object
41 42 43 |
# File 'lib/capybara/cuprite/node.rb', line 41 def find_xpath(selector) find(:xpath, selector) end |
#hover ⇒ Object
155 156 157 |
# File 'lib/capybara/cuprite/node.rb', line 155 def hover command(:hover) end |
#inspect ⇒ Object
210 211 212 |
# File 'lib/capybara/cuprite/node.rb', line 210 def inspect %(#<#{self.class} @target_id=#{@target_id.inspect} @node=#{@node.inspect}>) end |
#parents ⇒ Object
29 30 31 32 33 |
# File 'lib/capybara/cuprite/node.rb', line 29 def parents command(:parents).map do |parent| self.class.new(driver, parent["target_id"], parent["node"]) end end |
#path ⇒ Object
206 207 208 |
# File 'lib/capybara/cuprite/node.rb', line 206 def path command(:path) end |
#property(name) ⇒ Object
65 66 67 |
# File 'lib/capybara/cuprite/node.rb', line 65 def property(name) command(:property, name) end |
#right_click(keys = [], offset = {}) ⇒ Object
147 148 149 |
# File 'lib/capybara/cuprite/node.rb', line 147 def right_click(keys = [], offset = {}) command(:right_click, keys, offset) end |
#scroll_by(x, y) ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/capybara/cuprite/node.rb', line 182 def scroll_by(x, y) driver.execute_script <<~JS, self, x, y var el = arguments[0]; if (el.scrollBy){ el.scrollBy(arguments[1], arguments[2]); } else { el.scrollTop = el.scrollTop + arguments[2]; el.scrollLeft = el.scrollLeft + arguments[1]; } JS end |
#scroll_to(element, location, position = nil) ⇒ Object
171 172 173 174 175 176 177 178 179 180 |
# File 'lib/capybara/cuprite/node.rb', line 171 def scroll_to(element, location, position = nil) if element.is_a?(Node) scroll_element_to_location(element, location) elsif location.is_a?(Symbol) scroll_to_location(location) else scroll_to_coords(*position) end self end |
#select_option ⇒ Object
114 115 116 |
# File 'lib/capybara/cuprite/node.rb', line 114 def select_option command(:select, true) end |
#selected? ⇒ Boolean
135 136 137 |
# File 'lib/capybara/cuprite/node.rb', line 135 def selected? !!self[:selected] end |
#send_keys(*keys) ⇒ Object Also known as: send_key
201 202 203 |
# File 'lib/capybara/cuprite/node.rb', line 201 def send_keys(*keys) command(:send_keys, keys) end |
#set(value, options = {}) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/capybara/cuprite/node.rb', line 91 def set(value, = {}) warn "Options passed to Node#set but Cuprite doesn't currently support any - ignoring" unless .empty? if tag_name == "input" case self[:type] when "radio" click when "checkbox" click if value != checked? when "file" files = value.respond_to?(:to_ary) ? value.to_ary.map(&:to_s) : value.to_s command(:select_file, files) else command(:set, value.to_s) end elsif tag_name == "textarea" command(:set, value.to_s) elsif self[:isContentEditable] command(:delete_text) send_keys(value.to_s) end end |
#tag_name ⇒ Object
123 124 125 |
# File 'lib/capybara/cuprite/node.rb', line 123 def tag_name @tag_name ||= @node["nodeName"].downcase end |
#to_json ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
215 216 217 |
# File 'lib/capybara/cuprite/node.rb', line 215 def to_json(*) JSON.generate(as_json) end |
#trigger(event) ⇒ Object
167 168 169 |
# File 'lib/capybara/cuprite/node.rb', line 167 def trigger(event) command(:trigger, event) end |
#unselect_option ⇒ Object
118 119 120 121 |
# File 'lib/capybara/cuprite/node.rb', line 118 def unselect_option command(:select, false) || raise(Capybara::UnselectNotAllowed, "Cannot unselect option from single select box.") end |
#value ⇒ Object
87 88 89 |
# File 'lib/capybara/cuprite/node.rb', line 87 def value command(:value) end |
#visible? ⇒ Boolean
127 128 129 |
# File 'lib/capybara/cuprite/node.rb', line 127 def visible? command(:visible?) end |
#visible_text ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/capybara/cuprite/node.rb', line 53 def visible_text if Capybara::VERSION.to_f < 3.0 filter_text(command(:visible_text)) else command(:visible_text).to_s .gsub(/\A[[:space:]&&[^\u00a0]]+/, "") .gsub(/[[:space:]&&[^\u00a0]]+\z/, "") .gsub(/\n+/, "\n") .tr("\u00a0", " ") end end |