Class: Capybara::Cuprite::Browser
- Inherits:
-
Ferrum::Browser
- Object
- Ferrum::Browser
- Capybara::Cuprite::Browser
- Extended by:
- Forwardable
- Defined in:
- lib/capybara/cuprite/browser.rb
Constant Summary collapse
- DRAG_HTML5_JS =
File.read(File.("javascripts/drag.js", __dir__))
Instance Method Summary collapse
- #active_element ⇒ Object
- #all_text(node) ⇒ Object
- #attribute(node, name) ⇒ Object
- #attributes(node) ⇒ Object
- #browser_error ⇒ Object
- #close_window(target_id) ⇒ Object
- #command ⇒ Object
- #delete_text(node) ⇒ Object
- #disabled?(node) ⇒ Boolean
- #drag(node, other, drop_modifiers, options = {}) ⇒ Object
- #drag_by(node, dx, dy, steps, delay = nil, scroll = true) ⇒ Object
- #drag_html5(node, other, drop_modifiers, delay) ⇒ Object
- #drop(node, *args) ⇒ Object
- #find(method, selector) ⇒ Object
- #find_within(node, method, selector) ⇒ Object
-
#initialize(options = nil) ⇒ Browser
constructor
A new instance of Browser.
- #obscured?(node) ⇒ Boolean
- #page ⇒ Object
- #parents(node) ⇒ Object
- #path(node) ⇒ Object
- #property(node, name) ⇒ Object
- #quit ⇒ Object
- #raise_on_unhandled_modal ⇒ Object
- #raise_on_unhandled_modal=(value) ⇒ Object
- #reset ⇒ Object
- #resize(**options) ⇒ Object
- #select_file(node, value) ⇒ Object
- #source ⇒ Object
- #status_code ⇒ Object
- #switch_to_window(target_id) ⇒ Object
- #url_blacklist ⇒ Object (also: #url_blocklist)
- #url_blacklist=(patterns) ⇒ Object (also: #url_blocklist=)
- #url_whitelist ⇒ Object (also: #url_allowlist)
- #url_whitelist=(patterns) ⇒ Object (also: #url_allowlist=)
- #value(node) ⇒ Object
- #visible?(node) ⇒ Boolean
- #visible_text(node) ⇒ Object
- #visit(*args) ⇒ Object
- #window_handle ⇒ Object
- #window_handles ⇒ Object
- #within_window(locator = nil) ⇒ Object
Constructor Details
#initialize(options = nil) ⇒ Browser
Returns a new instance of Browser.
16 17 18 19 20 21 22 23 24 |
# File 'lib/capybara/cuprite/browser.rb', line 16 def initialize( = nil) super @options.raise_on_unhandled_modal = &.dig(:raise_on_unhandled_modal) @options.url_blacklist = prepare_wildcards(&.dig(:url_blacklist)) @options.url_whitelist = prepare_wildcards(&.dig(:url_whitelist)) @page = nil end |
Instance Method Details
#active_element ⇒ Object
142 143 144 |
# File 'lib/capybara/cuprite/browser.rb', line 142 def active_element evaluate("document.activeElement") end |
#all_text(node) ⇒ Object
262 263 264 |
# File 'lib/capybara/cuprite/browser.rb', line 262 def all_text(node) node.text end |
#attribute(node, name) ⇒ Object
238 239 240 |
# File 'lib/capybara/cuprite/browser.rb', line 238 def attribute(node, name) evaluate_on(node: node, expression: %(_cuprite.getAttribute(this, "#{name}"))) end |
#attributes(node) ⇒ Object
233 234 235 236 |
# File 'lib/capybara/cuprite/browser.rb', line 233 def attributes(node) value = evaluate_on(node: node, expression: "_cuprite.getAttributes(this)") JSON.parse(value) end |
#browser_error ⇒ Object
146 147 148 |
# File 'lib/capybara/cuprite/browser.rb', line 146 def browser_error evaluate("_cuprite.browserError()") end |
#close_window(target_id) ⇒ Object
133 134 135 136 137 138 139 140 |
# File 'lib/capybara/cuprite/browser.rb', line 133 def close_window(target_id) target = targets[target_id] raise Ferrum::NoSuchPageError unless target @page = ClosedPage.new if @page.target_id == target.id target.page.close targets.delete(target_id) # page.close is async, delete target asap end |
#command ⇒ Object
26 27 28 29 30 31 |
# File 'lib/capybara/cuprite/browser.rb', line 26 def command(...) super rescue Ferrum::DeadBrowserError restart raise end |
#delete_text(node) ⇒ Object
229 230 231 |
# File 'lib/capybara/cuprite/browser.rb', line 229 def delete_text(node) evaluate_on(node: node, expression: "_cuprite.deleteText(this)") end |
#disabled?(node) ⇒ Boolean
250 251 252 |
# File 'lib/capybara/cuprite/browser.rb', line 250 def disabled?(node) evaluate_on(node: node, expression: "_cuprite.isDisabled(this)") end |
#drag(node, other, drop_modifiers, options = {}) ⇒ Object
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/capybara/cuprite/browser.rb', line 154 def drag(node, other, drop_modifiers, = {}) steps = .fetch(:steps, 1) delay = [:delay] scroll = .fetch(:scroll, true) html5 = [:html5] execute("_cuprite.dragMousedownTracker()") node.scroll_into_view if scroll x1, y1 = node.find_position mouse.move(x: x1, y: y1) mouse.down sleep delay if delay html5 = !evaluate_on(node: node, expression: "_cuprite.legacyDragCheck(this)") if html5.nil? if html5 drag_html5(node, other, drop_modifiers, delay) else modifiers = keyboard.modifiers(drop_modifiers) other.scroll_into_view if scroll x2, y2 = other.find_position mouse.move(x: x2, y: y2, steps: steps) mouse.up(modifiers: modifiers) end end |
#drag_by(node, dx, dy, steps, delay = nil, scroll = true) ⇒ Object
190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/capybara/cuprite/browser.rb', line 190 def drag_by(node, dx, dy, steps, delay = nil, scroll = true) x1, y1 = node.find_position mouse.move(x: x1, y: y1) mouse.down sleep delay if delay evaluate("window.scrollBy(#{dx}, #{dy})") if scroll # should be extracted to Mouse#scroll_by in ferrum x2, y2 = node.find_position mouse.move(x: x2 + dx, y: y2 + dy, steps: steps) mouse.up end |
#drag_html5(node, other, drop_modifiers, delay) ⇒ Object
184 185 186 187 188 |
# File 'lib/capybara/cuprite/browser.rb', line 184 def drag_html5(node, other, drop_modifiers, delay) keys = drop_modifiers.map(&:to_s) evaluate_async(DRAG_HTML5_JS, timeout, node, other, (delay || 0.05) * 1000, keys) mouse.up end |
#drop(node, *args) ⇒ Object
205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/capybara/cuprite/browser.rb', line 205 def drop(node, *args) if args[0].is_a?(String) execute("_cuprite.attachDropInput()") input = find(:css, "#_cuprite_drop_file").first select_file(input, args) evaluate_on(node: node, expression: "_cuprite.dropFile(this)") else strings = args.flat_map { |arg| arg.map { |type, data| { "type" => type, "data" => data } } } evaluate_on(node: node, expression: "_cuprite.dropString(#{strings.to_json}, this)") end end |
#find(method, selector) ⇒ Object
93 94 95 |
# File 'lib/capybara/cuprite/browser.rb', line 93 def find(method, selector) find_all(method, selector) end |
#find_within(node, method, selector) ⇒ Object
101 102 103 104 105 |
# File 'lib/capybara/cuprite/browser.rb', line 101 def find_within(node, method, selector) resolved = page.command("DOM.resolveNode", nodeId: node.node_id) object_id = resolved.dig("object", "objectId") find_all(method, selector, { "objectId" => object_id }) end |
#obscured?(node) ⇒ Boolean
258 259 260 |
# File 'lib/capybara/cuprite/browser.rb', line 258 def obscured?(node) evaluate_on(node: node, expression: "_cuprite.isObscured(this)") end |
#page ⇒ Object
33 34 35 36 37 |
# File 'lib/capybara/cuprite/browser.rb', line 33 def page raise Ferrum::NoSuchPageError if @page&.closed? @page ||= attach_page end |
#parents(node) ⇒ Object
221 222 223 |
# File 'lib/capybara/cuprite/browser.rb', line 221 def parents(node) evaluate_on(node: node, expression: "_cuprite.parents(this)", by_value: false) end |
#path(node) ⇒ Object
254 255 256 |
# File 'lib/capybara/cuprite/browser.rb', line 254 def path(node) evaluate_on(node: node, expression: "_cuprite.path(this)") end |
#property(node, name) ⇒ Object
97 98 99 |
# File 'lib/capybara/cuprite/browser.rb', line 97 def property(node, name) node.property(name) end |
#quit ⇒ Object
45 46 47 48 |
# File 'lib/capybara/cuprite/browser.rb', line 45 def quit super @page = nil end |
#raise_on_unhandled_modal ⇒ Object
55 56 57 |
# File 'lib/capybara/cuprite/browser.rb', line 55 def raise_on_unhandled_modal @options.raise_on_unhandled_modal end |
#raise_on_unhandled_modal=(value) ⇒ Object
59 60 61 |
# File 'lib/capybara/cuprite/browser.rb', line 59 def raise_on_unhandled_modal=(value) @options.raise_on_unhandled_modal = value end |
#reset ⇒ Object
39 40 41 42 43 |
# File 'lib/capybara/cuprite/browser.rb', line 39 def reset super @options.reset_window_size @page = nil end |
#resize(**options) ⇒ Object
50 51 52 53 |
# File 'lib/capybara/cuprite/browser.rb', line 50 def resize(**) @options.window_size = [[:width], [:height]] super end |
#select_file(node, value) ⇒ Object
217 218 219 |
# File 'lib/capybara/cuprite/browser.rb', line 217 def select_file(node, value) node.select_file(value) end |
#source ⇒ Object
150 151 152 |
# File 'lib/capybara/cuprite/browser.rb', line 150 def source raise NotImplementedError end |
#status_code ⇒ Object
89 90 91 |
# File 'lib/capybara/cuprite/browser.rb', line 89 def status_code network.status end |
#switch_to_window(target_id) ⇒ Object
125 126 127 128 129 130 131 |
# File 'lib/capybara/cuprite/browser.rb', line 125 def switch_to_window(target_id) target = targets[target_id] raise Ferrum::NoSuchPageError unless target @page = attach_page(target.id) @page.activate end |
#url_blacklist ⇒ Object Also known as: url_blocklist
74 75 76 |
# File 'lib/capybara/cuprite/browser.rb', line 74 def url_blacklist @options.url_blacklist end |
#url_blacklist=(patterns) ⇒ Object Also known as: url_blocklist=
79 80 81 82 |
# File 'lib/capybara/cuprite/browser.rb', line 79 def url_blacklist=(patterns) @options.url_blacklist = prepare_wildcards(patterns) page.network.blacklist = @options.url_blacklist if @client && @options.url_blacklist.any? end |
#url_whitelist ⇒ Object Also known as: url_allowlist
63 64 65 |
# File 'lib/capybara/cuprite/browser.rb', line 63 def url_whitelist @options.url_whitelist end |
#url_whitelist=(patterns) ⇒ Object Also known as: url_allowlist=
68 69 70 71 |
# File 'lib/capybara/cuprite/browser.rb', line 68 def url_whitelist=(patterns) @options.url_whitelist = prepare_wildcards(patterns) page.network.whitelist = @options.url_whitelist if @client && @options.url_whitelist.any? end |
#value(node) ⇒ Object
242 243 244 |
# File 'lib/capybara/cuprite/browser.rb', line 242 def value(node) evaluate_on(node: node, expression: "_cuprite.value(this)") end |
#visible?(node) ⇒ Boolean
246 247 248 |
# File 'lib/capybara/cuprite/browser.rb', line 246 def visible?(node) evaluate_on(node: node, expression: "_cuprite.isVisible(this)") end |
#visible_text(node) ⇒ Object
225 226 227 |
# File 'lib/capybara/cuprite/browser.rb', line 225 def visible_text(node) evaluate_on(node: node, expression: "_cuprite.visibleText(this)") end |
#visit(*args) ⇒ Object
85 86 87 |
# File 'lib/capybara/cuprite/browser.rb', line 85 def visit(*args) goto(*args) end |
#window_handle ⇒ Object
107 108 109 |
# File 'lib/capybara/cuprite/browser.rb', line 107 def window_handle page.target_id end |
#window_handles ⇒ Object
111 112 113 |
# File 'lib/capybara/cuprite/browser.rb', line 111 def window_handles targets.keys end |
#within_window(locator = nil) ⇒ Object
115 116 117 118 119 120 121 122 123 |
# File 'lib/capybara/cuprite/browser.rb', line 115 def within_window(locator = nil) original = window_handle raise Ferrum::NoSuchPageError unless window_handles.include?(locator) switch_to_window(locator) yield ensure switch_to_window(original) end |