class Capybara::Poltergeist::Driver
Constants
- DEFAULT_TIMEOUT
Attributes
app[R]
options[R]
Public Class Methods
new(app, options = {})
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 9 def initialize(app, options = {}) @app = app @options = options @browser = nil @inspector = nil @server = nil @client = nil @started = false end
Public Instance Methods
accept_modal(type, options = {}) { || ... }
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 356 def accept_modal(type, options = {}) case type when :confirm browser.accept_confirm when :prompt browser.accept_prompt options[:with] end yield if block_given? find_modal(options) end
add_header(name, value, options = {})
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 251 def add_header(name, value, options = {}) permanent = options.fetch(:permanent, true) browser.add_header({ name => value }, permanent) end
add_headers(headers)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 247 def add_headers(headers) browser.add_headers(headers) end
browser()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 23 def browser @browser ||= begin browser = Browser.new(server, client, logger) browser.js_errors = options[:js_errors] if options.key?(:js_errors) browser.extensions = options.fetch(:extensions, []) browser.debug = true if options[:debug] browser end end
clear_network_traffic()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 235 def clear_network_traffic browser.clear_network_traffic end
click(x, y)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 131 def click(x, y) browser.click_coordinates(x, y) end
client()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 41 def client @client ||= Client.start(server, :path => options[:phantomjs], :window_size => options[:window_size], :phantomjs_options => phantomjs_options, :phantomjs_logger => phantomjs_logger ) end
client_pid()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 62 def client_pid client.pid end
close_window(handle)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 156 def close_window(handle) browser.close_window(handle) end
current_url()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 98 def current_url browser.current_url end
current_window_handle()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 148 def current_window_handle browser.window_handle end
debug()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 301 def debug if @options[:inspector] # Fall back to default scheme scheme = URI.parse(browser.current_url).scheme rescue nil scheme = 'http' if scheme != 'https' inspector.open(scheme) pause else raise Error, "To use the remote debugging, you have to launch the driver " \ "with `:inspector => true` configuration option" end end
dismiss_modal(type, options = {}) { || ... }
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 369 def dismiss_modal(type, options = {}) case type when :confirm browser.dismiss_confirm when :prompt browser.dismiss_prompt end yield if block_given? find_modal(options) end
evaluate_script(script)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 135 def evaluate_script(script) browser.evaluate(script) end
execute_script(script)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 139 def execute_script(script) browser.execute(script) nil end
find(method, selector)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 119 def find(method, selector) browser.find(method, selector).map { |page_id, id| Capybara::Poltergeist::Node.new(self, page_id, id) } end
find_css(selector)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 127 def find_css(selector) find :css, selector end
find_xpath(selector)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 123 def find_xpath(selector) find :xpath, selector end
go_back()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 348 def go_back browser.go_back end
go_forward()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 352 def go_forward browser.go_forward end
headers()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 239 def headers browser.get_headers end
headers=(headers)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 243 def headers=(headers) browser.set_headers(headers) end
html()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 106 def html browser.body end
Also aliased as: body
inspector()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 33 def inspector @inspector ||= options[:inspector] && Inspector.new(options[:inspector]) end
invalid_element_errors()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 344 def invalid_element_errors [Capybara::Poltergeist::ObsoleteNode, Capybara::Poltergeist::MouseEventFailed] end
logger()
click to toggle source
logger should be an object that responds to puts, or nil
# File lib/capybara/poltergeist/driver.rb, line 84 def logger options[:logger] || (options[:debug] && STDERR) end
needs_server?()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 19 def needs_server? true end
network_traffic()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 231 def network_traffic browser.network_traffic end
no_such_window_error()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 172 def no_such_window_error NoSuchWindowError end
open_new_window()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 160 def open_new_window browser.open_new_window end
paper_size=(size = {})
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 202 def paper_size=(size = {}) browser.set_paper_size(size) end
pause()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 314 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 "Poltergeist 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 begin input = read.read_nonblock(80) # clear out the read buffer puts unless input && input =~ /\n\z/ rescue EOFError, IO::WaitReadable # Ignore problems reading from STDIN. end unless signal trap('SIGCONT', old_trap) # Restore the previuos signal handler, if there was one. STDERR.puts 'Continuing' end
phantomjs_logger()
click to toggle source
logger should be an object that behaves like IO or nil
# File lib/capybara/poltergeist/driver.rb, line 89 def phantomjs_logger options.fetch(:phantomjs_logger, nil) end
phantomjs_options()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 50 def phantomjs_options list = options[:phantomjs_options] || [] # PhantomJS defaults to only using SSLv3, which since POODLE (Oct 2014) # many sites have dropped from their supported protocols (eg PayPal, # Braintree). list += ["--ssl-protocol=any"] unless list.grep(/ssl-protocol/).any? list += ["--remote-debugger-port=#{inspector.port}", "--remote-debugger-autorun=yes"] if inspector list end
quit()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 78 def quit server.stop client.stop end
render_base64(format = :png, options = {})
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 186 def render_base64(format = :png, options = {}) browser.render_base64(format, options) end
reset!()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 176 def reset! browser.reset @started = false end
resize(width, height)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 210 def resize(width, height) browser.resize(width, height) end
Also aliased as: resize_window
resize_window_to(handle, width, height)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 215 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/poltergeist/driver.rb, line 256 def response_headers browser.response_headers end
restart()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 74 def restart browser.restart end
save_screenshot(path, options = {})
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 181 def save_screenshot(path, options = {}) browser.render(path, options) end
Also aliased as: render
scroll_to(left, top)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 227 def scroll_to(left, top) browser.scroll_to(left, top) end
server()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 37 def server @server ||= Server.new(options[:port], options.fetch(:timeout) { DEFAULT_TIMEOUT }) end
set_flash(s_version)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 194 def set_flash(s_version) browser.set_flash(s_version) end
set_java(s_java)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 198 def set_java(s_java) browser.set_java(s_java) end
set_screen_size(s_width,s_height,s_color)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 190 def set_screen_size(s_width,s_height,s_color) browser.set_screen_size(s_width, s_height, s_color) end
source()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 111 def source browser.source.to_s end
status_code()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 102 def status_code browser.status_code end
switch_to_window(handle)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 164 def switch_to_window(handle) browser.switch_to_window(handle) end
timeout()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 66 def timeout server.timeout end
timeout=(sec)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 70 def timeout=(sec) server.timeout = sec end
title()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 115 def title browser.title end
visit(url)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 93 def visit(url) @started = true browser.visit(url) end
wait?()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 340 def wait? true end
window_handles()
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 152 def window_handles browser.window_handles end
window_size(handle)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 221 def window_size(handle) within_window(handle) do evaluate_script('[window.innerWidth, window.innerHeight]') end end
within_frame(name, &block)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 144 def within_frame(name, &block) browser.within_frame(name, &block) end
within_window(name, &block)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 168 def within_window(name, &block) browser.within_window(name, &block) end
zoom_factor=(zoom_factor)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 206 def zoom_factor=(zoom_factor) browser.set_zoom_factor(zoom_factor) end
Private Instance Methods
find_modal(options)
click to toggle source
# File lib/capybara/poltergeist/driver.rb, line 383 def find_modal(options) start_time = Time.now timeout_sec = options[:wait] || begin Capybara.default_max_wait_time rescue Capybara.default_wait_time end expect_text = options[:text] not_found_msg = 'Unable to find modal dialog' not_found_msg += " with #{expect_text}" if expect_text begin modal_text = browser.modal_message raise Capybara::ModalNotFound if modal_text.nil? raise Capybara::ModalNotFound if (expect_text && (modal_text != expect_text)) rescue Capybara::ModalNotFound => e raise e, not_found_msg if (Time.now - start_time) >= timeout_sec sleep(0.05) retry end modal_text end end