Class: Capybara::Cuprite::Driver

Inherits:
Driver::Base
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/capybara/cuprite/driver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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, options = {})
  @app     = app
  @options = options
  @started = false
end

Instance Attribute Details

#appObject (readonly)

Returns the value of attribute app.



13
14
15
# File 'lib/capybara/cuprite/driver.rb', line 13

def app
  @app
end

#optionsObject (readonly)

Returns the value of attribute options.



13
14
15
# File 'lib/capybara/cuprite/driver.rb', line 13

def options
  @options
end

Instance Method Details

#accept_modal(type, options = {}) ⇒ Object



301
302
303
304
305
306
307
308
309
310
311
312
# File 'lib/capybara/cuprite/driver.rb', line 301

def accept_modal(type, options = {})
  case type
  when :alert, :confirm
    browser.accept_confirm
  when :prompt
    browser.accept_prompt(options[:with])
  end

  yield if block_given?

  browser.find_modal(options)
end

#add_header(name, value, permanent: true) ⇒ Object



212
213
214
# File 'lib/capybara/cuprite/driver.rb', line 212

def add_header(name, value, permanent: true)
  browser.add_header({ name => value }, permanent: permanent)
end

#add_headers(headers) ⇒ Object



208
209
210
# File 'lib/capybara/cuprite/driver.rb', line 208

def add_headers(headers)
  browser.add_headers(headers)
end

#basic_authorize(user, password) ⇒ Object Also known as: authorize



249
250
251
# File 'lib/capybara/cuprite/driver.rb', line 249

def basic_authorize(user, password)
  browser.authorize(user, password)
end

#browserObject



25
26
27
# File 'lib/capybara/cuprite/driver.rb', line 25

def browser
  @browser ||= Browser.start(@options)
end

#clear_cookiesObject



241
242
243
# File 'lib/capybara/cuprite/driver.rb', line 241

def clear_cookies
  browser.clear_cookies
end

#clear_memory_cacheObject



245
246
247
# File 'lib/capybara/cuprite/driver.rb', line 245

def clear_memory_cache
  browser.clear_memory_cache
end

#clear_network_trafficObject



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

#cookiesObject



220
221
222
# File 'lib/capybara/cuprite/driver.rb', line 220

def cookies
  browser.cookies
end

#current_urlObject



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_handleObject



102
103
104
# File 'lib/capybara/cuprite/driver.rb', line 102

def current_window_handle
  browser.window_handle
end

#dismiss_modal(type, options = {}) ⇒ Object



314
315
316
317
318
319
320
321
322
323
324
325
# File 'lib/capybara/cuprite/driver.rb', line 314

def dismiss_modal(type, options = {})
  case type
  when :confirm
    browser.dismiss_confirm
  when :prompt
    browser.dismiss_prompt
  end

  yield if block_given?

  browser.find_modal(options)
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_titleObject



63
64
65
# File 'lib/capybara/cuprite/driver.rb', line 63

def frame_title
  browser.frame_title
end

#frame_urlObject



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_backObject



289
290
291
# File 'lib/capybara/cuprite/driver.rb', line 289

def go_back
  browser.go_back
end

#go_forwardObject



293
294
295
# File 'lib/capybara/cuprite/driver.rb', line 293

def go_forward
  browser.go_forward
end

#headersObject



200
201
202
# File 'lib/capybara/cuprite/driver.rb', line 200

def headers
  browser.headers
end

#headers=(headers) ⇒ Object



204
205
206
# File 'lib/capybara/cuprite/driver.rb', line 204

def headers=(headers)
  browser.headers=(headers)
end

#htmlObject Also known as: body



46
47
48
# File 'lib/capybara/cuprite/driver.rb', line 46

def html
  browser.body
end

#invalid_element_errorsObject



285
286
287
# File 'lib/capybara/cuprite/driver.rb', line 285

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

Returns:

  • (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_errorObject



126
127
128
# File 'lib/capybara/cuprite/driver.rb', line 126

def no_such_window_error
  NoSuchWindowError
end

#open_new_windowObject



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

#pauseObject



254
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
# File 'lib/capybara/cuprite/driver.rb', line 254

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

#refreshObject



297
298
299
# File 'lib/capybara/cuprite/driver.rb', line 297

def refresh
  browser.refresh
end


236
237
238
239
# File 'lib/capybara/cuprite/driver.rb', line 236

def remove_cookie(name, **options)
  options[:domain] = default_domain if options.empty?
  browser.remove_cookie(options.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, options = {})
  browser.render_base64(format, options)
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_headersObject



216
217
218
# File 'lib/capybara/cuprite/driver.rb', line 216

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, options = {})
  browser.render(path, options)
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


224
225
226
227
228
229
230
231
232
233
234
# File 'lib/capybara/cuprite/driver.rb', line 224

def set_cookie(name, value, options = {})
  options = options.dup
  options[:name]   ||= name
  options[:value]  ||= value
  options[:domain] ||= default_domain

  expires = options.delete(:expires).to_i
  options[:expires] = expires if expires > 0

  browser.set_cookie(options)
end

#set_proxy(ip, port, type = "http", user = nil, password = nil, bypass = nil) ⇒ Object



193
194
195
196
197
198
# File 'lib/capybara/cuprite/driver.rb', line 193

def set_proxy(ip, port, type = "http", user = nil, password = nil, bypass = nil)
  @options[:browser_options] ||= {}
  @options[:browser_options].merge!("proxy-server" => "#{type}=#{ip}:#{port}")
  @options[:browser_options].merge!("proxy-bypass-list" => bypass) if bypass
  browser.proxy_authorize(user, password)
end

#sourceObject



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

#titleObject



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

Returns:

  • (Boolean)


281
282
283
# File 'lib/capybara/cuprite/driver.rb', line 281

def wait?
  true
end

#window_handlesObject



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