Class: Capybara::Cuprite::Driver
- Inherits:
-
Driver::Base
- Object
- Driver::Base
- Capybara::Cuprite::Driver
- Extended by:
- Forwardable
- Defined in:
- lib/capybara/cuprite/driver.rb
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
Returns the value of attribute app.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
- #accept_modal(type, options = {}) ⇒ Object
- #add_header(name, value, permanent: true) ⇒ Object
- #add_headers(headers) ⇒ Object
- #basic_authorize(user, password) ⇒ Object (also: #authorize)
- #browser ⇒ Object
- #clear_cookies ⇒ Object
- #clear_memory_cache ⇒ Object
- #clear_network_traffic ⇒ Object
- #click(x, y) ⇒ Object
- #close_window(handle) ⇒ Object
- #cookies ⇒ Object
- #current_url ⇒ Object
- #current_window_handle ⇒ Object
- #dismiss_modal(type, options = {}) ⇒ Object
- #evaluate_async_script(script, *args) ⇒ Object
- #evaluate_script(script, *args) ⇒ Object
- #execute_script(script, *args) ⇒ Object
- #find(method, selector) ⇒ Object
- #find_css(selector) ⇒ Object
- #find_xpath(selector) ⇒ Object
- #frame_title ⇒ Object
- #frame_url ⇒ Object
- #fullscreen_window(handle) ⇒ Object
- #go_back ⇒ Object
- #go_forward ⇒ Object
- #headers ⇒ Object
- #headers=(headers) ⇒ Object
- #html ⇒ Object (also: #body)
-
#initialize(app, options = {}) ⇒ Driver
constructor
A new instance of Driver.
- #invalid_element_errors ⇒ Object
- #maximize_window(handle) ⇒ Object
- #needs_server? ⇒ Boolean
- #network_traffic(type = nil) ⇒ Object
- #no_such_window_error ⇒ Object
- #open_new_window ⇒ Object
- #paper_size=(size = {}) ⇒ Object
- #pause ⇒ Object
- #refresh ⇒ Object
- #remove_cookie(name, **options) ⇒ Object
- #render_base64(format = :png, options = {}) ⇒ Object
- #reset! ⇒ Object
- #resize(width, height) ⇒ Object (also: #resize_window)
- #resize_window_to(handle, width, height) ⇒ Object
- #response_headers ⇒ Object
- #save_screenshot(path, options = {}) ⇒ Object (also: #render)
- #scroll_to(left, top) ⇒ Object
- #set_cookie(name, value, options = {}) ⇒ Object
- #set_proxy(ip, port, type = nil, user = nil, password = nil, bypass = nil) ⇒ Object
- #source ⇒ Object
- #switch_to_frame(locator) ⇒ Object
- #switch_to_window(handle) ⇒ Object
- #title ⇒ Object
- #visit(url) ⇒ Object
- #wait? ⇒ Boolean
- #window_handles ⇒ Object
- #window_size(handle) ⇒ Object
- #within_window(name, &block) ⇒ Object
- #zoom_factor=(zoom_factor) ⇒ Object
Constructor Details
#initialize(app, options = {}) ⇒ Driver
Returns a new instance of Driver.
15 16 17 18 19 |
# File 'lib/capybara/cuprite/driver.rb', line 15 def initialize(app, = {}) @app = app @options = @started = false end |
Instance Attribute Details
#app ⇒ Object (readonly)
Returns the value of attribute app.
13 14 15 |
# File 'lib/capybara/cuprite/driver.rb', line 13 def app @app end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
13 14 15 |
# File 'lib/capybara/cuprite/driver.rb', line 13 def @options end |
Instance Method Details
#accept_modal(type, options = {}) ⇒ Object
302 303 304 305 306 307 308 309 310 311 312 313 |
# File 'lib/capybara/cuprite/driver.rb', line 302 def accept_modal(type, = {}) case type when :alert, :confirm browser.accept_confirm when :prompt browser.accept_prompt([:with]) end yield if block_given? browser.find_modal() end |
#add_header(name, value, permanent: true) ⇒ Object
213 214 215 |
# File 'lib/capybara/cuprite/driver.rb', line 213 def add_header(name, value, permanent: true) browser.add_header({ name => value }, permanent: permanent) end |
#add_headers(headers) ⇒ Object
209 210 211 |
# File 'lib/capybara/cuprite/driver.rb', line 209 def add_headers(headers) browser.add_headers(headers) end |
#basic_authorize(user, password) ⇒ Object Also known as:
250 251 252 |
# File 'lib/capybara/cuprite/driver.rb', line 250 def (user, password) browser.(user, password) end |
#browser ⇒ Object
25 26 27 |
# File 'lib/capybara/cuprite/driver.rb', line 25 def browser @browser ||= Browser.start(@options) end |
#clear_cookies ⇒ Object
242 243 244 |
# File 'lib/capybara/cuprite/driver.rb', line 242 def browser. end |
#clear_memory_cache ⇒ Object
246 247 248 |
# File 'lib/capybara/cuprite/driver.rb', line 246 def clear_memory_cache browser.clear_memory_cache end |
#clear_network_traffic ⇒ Object
189 190 191 |
# File 'lib/capybara/cuprite/driver.rb', line 189 def clear_network_traffic browser.clear_network_traffic end |
#click(x, y) ⇒ Object
79 80 81 |
# File 'lib/capybara/cuprite/driver.rb', line 79 def click(x, y) browser.click_coordinates(x, y) end |
#close_window(handle) ⇒ Object
110 111 112 |
# File 'lib/capybara/cuprite/driver.rb', line 110 def close_window(handle) browser.close_window(handle) end |
#cookies ⇒ Object
221 222 223 |
# File 'lib/capybara/cuprite/driver.rb', line 221 def browser. end |
#current_url ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/capybara/cuprite/driver.rb', line 34 def current_url if Capybara::VERSION.to_f < 3.0 frame_url else browser.current_url end end |
#current_window_handle ⇒ Object
102 103 104 |
# File 'lib/capybara/cuprite/driver.rb', line 102 def current_window_handle browser.window_handle end |
#dismiss_modal(type, options = {}) ⇒ Object
315 316 317 318 319 320 321 322 323 324 325 326 |
# File 'lib/capybara/cuprite/driver.rb', line 315 def dismiss_modal(type, = {}) case type when :confirm browser.dismiss_confirm when :prompt browser.dismiss_prompt end yield if block_given? browser.find_modal() end |
#evaluate_async_script(script, *args) ⇒ Object
88 89 90 91 |
# File 'lib/capybara/cuprite/driver.rb', line 88 def evaluate_async_script(script, *args) result = browser.evaluate_async(script, session_wait_time, *native_args(args)) unwrap_script_result(result) end |
#evaluate_script(script, *args) ⇒ Object
83 84 85 86 |
# File 'lib/capybara/cuprite/driver.rb', line 83 def evaluate_script(script, *args) result = browser.evaluate(script, *native_args(args)) unwrap_script_result(result) end |
#execute_script(script, *args) ⇒ Object
93 94 95 96 |
# File 'lib/capybara/cuprite/driver.rb', line 93 def execute_script(script, *args) browser.execute(script, *native_args(args)) nil end |
#find(method, selector) ⇒ Object
67 68 69 |
# File 'lib/capybara/cuprite/driver.rb', line 67 def find(method, selector) browser.find(method, selector).map { |target_id, node| Node.new(self, target_id, node) } end |
#find_css(selector) ⇒ Object
75 76 77 |
# File 'lib/capybara/cuprite/driver.rb', line 75 def find_css(selector) find :css, selector end |
#find_xpath(selector) ⇒ Object
71 72 73 |
# File 'lib/capybara/cuprite/driver.rb', line 71 def find_xpath(selector) find :xpath, selector end |
#frame_title ⇒ Object
63 64 65 |
# File 'lib/capybara/cuprite/driver.rb', line 63 def frame_title browser.frame_title end |
#frame_url ⇒ Object
42 43 44 |
# File 'lib/capybara/cuprite/driver.rb', line 42 def frame_url browser.frame_url end |
#fullscreen_window(handle) ⇒ Object
175 176 177 178 179 |
# File 'lib/capybara/cuprite/driver.rb', line 175 def fullscreen_window(handle) within_window(handle) do browser.resize(fullscreen: true) end end |
#go_back ⇒ Object
290 291 292 |
# File 'lib/capybara/cuprite/driver.rb', line 290 def go_back browser.go_back end |
#go_forward ⇒ Object
294 295 296 |
# File 'lib/capybara/cuprite/driver.rb', line 294 def go_forward browser.go_forward end |
#headers ⇒ Object
201 202 203 |
# File 'lib/capybara/cuprite/driver.rb', line 201 def headers browser.headers end |
#headers=(headers) ⇒ Object
205 206 207 |
# File 'lib/capybara/cuprite/driver.rb', line 205 def headers=(headers) browser.headers=(headers) end |
#html ⇒ Object Also known as: body
46 47 48 |
# File 'lib/capybara/cuprite/driver.rb', line 46 def html browser.body end |
#invalid_element_errors ⇒ Object
286 287 288 |
# File 'lib/capybara/cuprite/driver.rb', line 286 def invalid_element_errors [Capybara::Cuprite::ObsoleteNode, Capybara::Cuprite::MouseEventFailed] end |
#maximize_window(handle) ⇒ Object
165 166 167 |
# File 'lib/capybara/cuprite/driver.rb', line 165 def maximize_window(handle) resize_window_to(handle, *screen_size) end |
#needs_server? ⇒ Boolean
21 22 23 |
# File 'lib/capybara/cuprite/driver.rb', line 21 def needs_server? true end |
#network_traffic(type = nil) ⇒ Object
185 186 187 |
# File 'lib/capybara/cuprite/driver.rb', line 185 def network_traffic(type = nil) browser.network_traffic(type) end |
#no_such_window_error ⇒ Object
126 127 128 |
# File 'lib/capybara/cuprite/driver.rb', line 126 def no_such_window_error NoSuchWindowError end |
#open_new_window ⇒ Object
114 115 116 |
# File 'lib/capybara/cuprite/driver.rb', line 114 def open_new_window browser.open_new_window end |
#paper_size=(size = {}) ⇒ Object
146 147 148 |
# File 'lib/capybara/cuprite/driver.rb', line 146 def paper_size=(size = {}) browser.set_paper_size(size) end |
#pause ⇒ Object
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 |
# File 'lib/capybara/cuprite/driver.rb', line 255 def pause # STDIN is not necessarily connected to a keyboard. It might even be closed. # So we need a method other than keypress to continue. # In jRuby - STDIN returns immediately from select # see https://github.com/jruby/jruby/issues/1783 read, write = IO.pipe Thread.new { IO.copy_stream(STDIN, write); write.close } STDERR.puts "Cuprite execution paused. Press enter (or run 'kill -CONT #{Process.pid}') to continue." signal = false old_trap = trap("SIGCONT") { signal = true; STDERR.puts "\nSignal SIGCONT received" } keyboard = IO.select([read], nil, nil, 1) until keyboard || signal # wait for data on STDIN or signal SIGCONT received unless signal begin input = read.read_nonblock(80) # clear out the read buffer puts unless input&.end_with?("\n") rescue EOFError, IO::WaitReadable # Ignore problems reading from STDIN. end end ensure trap("SIGCONT", old_trap) # Restore the previous signal handler, if there was one. STDERR.puts "Continuing" end |
#refresh ⇒ Object
298 299 300 |
# File 'lib/capybara/cuprite/driver.rb', line 298 def refresh browser.refresh end |
#remove_cookie(name, **options) ⇒ Object
237 238 239 240 |
# File 'lib/capybara/cuprite/driver.rb', line 237 def (name, **) [:domain] = default_domain if .empty? browser.(.merge(name: name)) end |
#render_base64(format = :png, options = {}) ⇒ Object
142 143 144 |
# File 'lib/capybara/cuprite/driver.rb', line 142 def render_base64(format = :png, = {}) browser.render_base64(format, ) end |
#reset! ⇒ Object
130 131 132 133 134 135 |
# File 'lib/capybara/cuprite/driver.rb', line 130 def reset! browser.reset browser.url_blacklist = @options[:url_blacklist] browser.url_whitelist = @options[:url_whitelist] @started = false end |
#resize(width, height) ⇒ Object Also known as: resize_window
154 155 156 |
# File 'lib/capybara/cuprite/driver.rb', line 154 def resize(width, height) browser.resize(width: width, height: height) end |
#resize_window_to(handle, width, height) ⇒ Object
159 160 161 162 163 |
# File 'lib/capybara/cuprite/driver.rb', line 159 def resize_window_to(handle, width, height) within_window(handle) do resize(width, height) end end |
#response_headers ⇒ Object
217 218 219 |
# File 'lib/capybara/cuprite/driver.rb', line 217 def response_headers browser.response_headers end |
#save_screenshot(path, options = {}) ⇒ Object Also known as: render
137 138 139 |
# File 'lib/capybara/cuprite/driver.rb', line 137 def save_screenshot(path, = {}) browser.render(path, ) end |
#scroll_to(left, top) ⇒ Object
181 182 183 |
# File 'lib/capybara/cuprite/driver.rb', line 181 def scroll_to(left, top) browser.scroll_to(left, top) end |
#set_cookie(name, value, options = {}) ⇒ Object
225 226 227 228 229 230 231 232 233 234 235 |
# File 'lib/capybara/cuprite/driver.rb', line 225 def (name, value, = {}) = .dup [:name] ||= name [:value] ||= value [:domain] ||= default_domain expires = .delete(:expires).to_i [:expires] = expires if expires > 0 browser.() end |
#set_proxy(ip, port, type = nil, user = nil, password = nil, bypass = nil) ⇒ Object
193 194 195 196 197 198 199 |
# File 'lib/capybara/cuprite/driver.rb', line 193 def set_proxy(ip, port, type = nil, user = nil, password = nil, bypass = nil) @options[:browser_options] ||= {} server = type ? "#{type}=#{ip}:#{port}" : "#{ip}:#{port}" @options[:browser_options].merge!("proxy-server" => server) @options[:browser_options].merge!("proxy-bypass-list" => bypass) if bypass browser.(user, password) end |
#source ⇒ Object
51 52 53 |
# File 'lib/capybara/cuprite/driver.rb', line 51 def source browser.source.to_s end |
#switch_to_frame(locator) ⇒ Object
98 99 100 |
# File 'lib/capybara/cuprite/driver.rb', line 98 def switch_to_frame(locator) browser.switch_to_frame(locator) end |
#switch_to_window(handle) ⇒ Object
118 119 120 |
# File 'lib/capybara/cuprite/driver.rb', line 118 def switch_to_window(handle) browser.switch_to_window(handle) end |
#title ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/capybara/cuprite/driver.rb', line 55 def title if Capybara::VERSION.to_f < 3.0 frame_title else browser.title end end |
#visit(url) ⇒ Object
29 30 31 32 |
# File 'lib/capybara/cuprite/driver.rb', line 29 def visit(url) @started = true browser.visit(url) end |
#wait? ⇒ Boolean
282 283 284 |
# File 'lib/capybara/cuprite/driver.rb', line 282 def wait? true end |
#window_handles ⇒ Object
106 107 108 |
# File 'lib/capybara/cuprite/driver.rb', line 106 def window_handles browser.window_handles end |
#window_size(handle) ⇒ Object
169 170 171 172 173 |
# File 'lib/capybara/cuprite/driver.rb', line 169 def window_size(handle) within_window(handle) do evaluate_script("[window.innerWidth, window.innerHeight]") end end |
#within_window(name, &block) ⇒ Object
122 123 124 |
# File 'lib/capybara/cuprite/driver.rb', line 122 def within_window(name, &block) browser.within_window(name, &block) end |
#zoom_factor=(zoom_factor) ⇒ Object
150 151 152 |
# File 'lib/capybara/cuprite/driver.rb', line 150 def zoom_factor=(zoom_factor) browser.set_zoom_factor(zoom_factor) end |