class Capybara::Cuprite::Driver
Constants
- DEFAULT_MAXIMIZE_SCREEN_SIZE
- EXTENSION
Attributes
app[R]
options[R]
screen_size[R]
Public Class Methods
new(app, options = {})
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 17 def initialize(app, options = {}) @app = app @options = options.dup @started = false @options[:extensions] ||= [] @options[:extensions] << EXTENSION @screen_size = @options.delete(:screen_size) @screen_size ||= DEFAULT_MAXIMIZE_SCREEN_SIZE @options[:save_path] = Capybara.save_path.to_s if Capybara.save_path ENV["FERRUM_DEBUG"] = "true" if ENV["CUPRITE_DEBUG"] end
Public Instance Methods
accept_modal(type, options = {}) { || ... }
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 387 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)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 263 def add_header(name, value, permanent: true) browser.headers.add({ name => value }, permanent: permanent) end
add_headers(headers)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 259 def add_headers(headers) browser.headers.add(headers) end
browser()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 37 def browser @browser ||= Browser.new(@options) end
clear_memory_cache()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 296 def clear_memory_cache browser.network.clear(:cache) end
clear_network_traffic()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 237 def clear_network_traffic browser.network.clear(:traffic) end
click(x, y)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 91 def click(x, y) browser.mouse.click(x: x, y: y) end
close_window(handle)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 129 def close_window(handle) browser.close_window(handle) end
current_url()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 46 def current_url if Capybara::VERSION.to_f < 3.0 frame_url else browser.current_url end end
current_window_handle()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 121 def current_window_handle browser.window_handle end
debug(binding = nil)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 311 def debug(binding = nil) if @options[:inspector] Process.spawn(browser.process.path, debug_url) if binding&.respond_to?(:pry) Pry.start(binding) elsif binding&.respond_to?(:irb) binding.irb else pause end else raise Error, "To use the remote debugging, you have to launch " \ "the driver with `inspector: ENV['INSPECTOR']` " \ "configuration option and run your test suite passing " \ "env variable" end end
debug_url()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 307 def debug_url "http://#{browser.process.host}:#{browser.process.port}" end
dismiss_modal(type, options = {}) { || ... }
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 400 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)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 100 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)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 95 def evaluate_script(script, *args) result = browser.evaluate(script, *native_args(args)) unwrap_script_result(result) end
execute_script(script, *args)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 105 def execute_script(script, *args) browser.execute(script, *native_args(args)) nil end
find(method, selector)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 87 def find(method, selector) browser.find(method, selector).map { |native| Node.new(self, native) } end
find_css(selector)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 83 def find_css(selector) find(:css, selector) end
find_xpath(selector)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 79 def find_xpath(selector) find(:xpath, selector) end
frame_title()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 75 def frame_title evaluate_script("document.title") end
frame_url()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 54 def frame_url evaluate_script("window.location.href") end
fullscreen_window(handle)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 213 def fullscreen_window(handle) within_window(handle) do browser.resize(fullscreen: true) end end
go_back()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 371 def go_back browser.back end
go_forward()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 375 def go_forward browser.forward end
headers()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 251 def headers browser.headers.get end
headers=(headers)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 255 def headers=(headers) browser.headers.set(headers) end
html()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 58 def html browser.body end
Also aliased as: body
invalid_element_errors()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 363 def invalid_element_errors [Capybara::Cuprite::ObsoleteNode, Capybara::Cuprite::MouseEventFailed, Ferrum::CoordinatesNotFoundError, Ferrum::NoExecutionContextError, Ferrum::NodeNotFoundError] end
maximize_window(handle)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 203 def maximize_window(handle) resize_window_to(handle, *screen_size) end
needs_server?()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 33 def needs_server? true end
network_traffic(type = nil)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 223 def network_traffic(type = nil) traffic = browser.network.traffic case type.to_s when "all" traffic when "blocked" traffic.select(&:blocked?) else # when request isn't blocked traffic.reject(&:blocked?) end end
no_such_window_error()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 148 def no_such_window_error Ferrum::NoSuchPageError end
open_new_window()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 133 def open_new_window target = browser.default_context.create_target target.maybe_sleep_if_new_window target.page = Page.new(target.id, browser) target.page end
paper_size=(value)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 188 def paper_size=(value) @paper_size = value end
pause()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 330 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 = 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 thread.kill read.close trap("SIGCONT", old_trap) # Restore the previous signal handler, if there was one. STDERR.puts "Continuing" end
refresh()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 379 def refresh browser.refresh end
render_base64(format = :png, options = {})
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 174 def render_base64(format = :png, options = {}) if pdf?(nil, options) options[:paperWidth] = @paper_size[:width].to_f if @paper_size options[:paperHeight] = @paper_size[:height].to_f if @paper_size browser.pdf(encoding: :base64, **options) else browser.screenshot(format: format, encoding: :base64, **options) end end
reset!()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 152 def reset! @zoom_factor = nil @paper_size = nil browser.url_blacklist = @options[:url_blacklist] browser.url_whitelist = @options[:url_whitelist] browser.reset @started = false end
resize(width, height)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 192 def resize(width, height) browser.resize(width: width, height: height) end
Also aliased as: resize_window
resize_window_to(handle, width, height)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 197 def resize_window_to(handle, width, height) within_window(handle) do resize(width, height) end end
response_headers()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 267 def response_headers browser.network.response&.headers end
save_screenshot(path, options = {})
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 161 def save_screenshot(path, options = {}) options[:scale] = @zoom_factor if @zoom_factor if pdf?(path, options) options[:paperWidth] = @paper_size[:width].to_f if @paper_size options[:paperHeight] = @paper_size[:height].to_f if @paper_size browser.pdf(path: path, **options) else browser.screenshot(path: path, **options) end end
Also aliased as: render
scroll_to(left, top)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 219 def scroll_to(left, top) browser.mouse.scroll_to(left, top) end
set_proxy(ip, port, type = nil, user = nil, password = nil, bypass = nil)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 241 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.network.authorize(type: :proxy, user: user, password: password) do |request| request.continue end end
source()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 63 def source browser.source.to_s end
switch_to_frame(locator)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 110 def switch_to_frame(locator) handle = case locator when Capybara::Node::Element locator.native.description["frameId"] when :parent, :top locator end browser.switch_to_frame(handle) end
switch_to_window(handle)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 140 def switch_to_window(handle) browser.switch_to_window(handle) end
title()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 67 def title if Capybara::VERSION.to_f < 3.0 frame_title else browser.title end end
visit(url)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 41 def visit(url) @started = true browser.visit(url) end
wait?()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 359 def wait? true end
wait_for_network_idle(**options)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 292 def wait_for_network_idle(**options) browser.network.wait_for_idle(**options) end
wait_for_reload(*args)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 383 def wait_for_reload(*args) browser.wait_for_reload(*args) end
window_handles()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 125 def window_handles browser.window_handles end
window_size(handle)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 207 def window_size(handle) within_window(handle) do evaluate_script("[window.innerWidth, window.innerHeight]") end end
within_window(name, &block)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 144 def within_window(name, &block) browser.within_window(name, &block) end
zoom_factor=(value)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 184 def zoom_factor=(value) @zoom_factor = value.to_f end
Private Instance Methods
default_domain()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 415 def default_domain if @started URI.parse(browser.current_url).host else URI.parse(default_cookie_host).host || "127.0.0.1" end end
native_args(args)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 423 def native_args(args) args.map { |arg| arg.is_a?(Capybara::Cuprite::Node) ? arg.node : arg } end
pdf?(path, options)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 460 def pdf?(path, options) (path && File.extname(path).delete(".") == "pdf") || options[:format].to_s == "pdf" end
session_wait_time()
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 427 def session_wait_time if respond_to?(:session_options) session_options.default_max_wait_time else begin Capybara.default_max_wait_time rescue Capybara.default_wait_time end end end
unwrap_script_result(arg)
click to toggle source
# File lib/capybara/cuprite/driver.rb, line 447 def unwrap_script_result(arg) case arg when Array arg.map { |e| unwrap_script_result(e) } when Hash arg.each { |k, v| arg[k] = unwrap_script_result(v) } when Ferrum::Node Node.new(self, arg) else arg end end