1
0
Fork 0
mirror of https://github.com/teampoltergeist/poltergeist.git synced 2022-11-09 12:05:00 -05:00
teampoltergeist--poltergeist/lib/capybara/poltergeist/driver.rb

186 lines
3.7 KiB
Ruby
Raw Normal View History

require 'uri'
2011-10-27 23:34:14 +01:00
module Capybara::Poltergeist
class Driver < Capybara::Driver::Base
2012-02-29 12:32:13 +00:00
DEFAULT_TIMEOUT = 30
attr_reader :app, :app_server, :server, :client, :browser, :options
2011-10-27 23:34:14 +01:00
def initialize(app, options = {})
2012-02-29 12:32:13 +00:00
@app = app
@options = options
@browser = nil
@inspector = nil
@server = nil
@client = nil
2011-10-27 23:34:14 +01:00
2012-02-29 12:32:13 +00:00
@app_server = Capybara::Server.new(app)
@app_server.boot if Capybara.run_server
2011-10-27 23:34:14 +01:00
end
def browser
@browser ||= Browser.new(server, client, logger, js_errors)
2011-10-27 23:34:14 +01:00
end
def inspector
@inspector ||= options[:inspector] && Inspector.new(options[:inspector])
end
2012-02-29 12:32:13 +00:00
def server
@server ||= Server.new(
options.fetch(:port) { Util.find_available_port },
options.fetch(:timeout) { DEFAULT_TIMEOUT }
)
2012-02-29 12:32:13 +00:00
end
def client
2012-07-11 20:25:17 +01:00
@client ||= Client.start(server.port,
:path => options[:phantomjs],
:window_size => options[:window_size],
:phantomjs_options => phantomjs_options
)
end
def phantomjs_options
list = options[:phantomjs_options] || []
list += ["--remote-debugger-port=#{inspector.port}", "--remote-debugger-autorun=yes"] if inspector
list
2012-02-29 12:32:13 +00:00
end
2012-02-29 13:51:11 +00:00
def client_pid
client.pid
end
2012-02-29 12:32:13 +00:00
def timeout
server.timeout
end
def timeout=(sec)
server.timeout = sec
end
2011-10-27 23:34:14 +01:00
def restart
browser.restart
end
2012-02-29 13:51:11 +00:00
def quit
server.stop
client.stop
end
2011-10-27 23:34:14 +01:00
# logger should be an object that responds to puts, or nil
def logger
options[:logger] || (options[:debug] && STDERR)
end
def js_errors
options.fetch(:js_errors, true)
end
2012-02-29 12:32:13 +00:00
def visit(path)
browser.visit app_server.url(path)
2011-10-27 23:34:14 +01:00
end
def current_url
browser.current_url
end
2012-06-04 08:58:27 +03:00
def status_code
browser.status_code
end
2011-10-27 23:34:14 +01:00
def body
browser.body
end
def source
2012-01-10 00:25:30 +00:00
browser.source.to_s
2011-10-27 23:34:14 +01:00
end
def find(selector)
browser.find(selector).map { |page_id, id| Capybara::Poltergeist::Node.new(self, page_id, id) }
2011-10-27 23:34:14 +01:00
end
def evaluate_script(script)
browser.evaluate(script)
end
def execute_script(script)
browser.execute(script)
nil
end
def within_frame(name, &block)
browser.within_frame(name, &block)
end
def within_window(name, &block)
browser.within_window(name, &block)
2011-10-27 23:34:14 +01:00
end
def reset!
browser.reset
end
def render(path, options = {})
browser.render(path, options)
2011-10-27 23:34:14 +01:00
end
def resize(width, height)
browser.resize(width, height)
end
alias_method :resize_window, :resize
def network_traffic
browser.network_traffic
end
def headers=(headers)
browser.set_headers(headers)
end
def response_headers
browser.response_headers
end
def cookies
browser.cookies
end
def set_cookie(name, value, options = {})
browser.set_cookie({
2012-10-06 23:06:39 +01:00
:name => name,
:value => value,
:domain => URI.parse(app_server.url('')).host
}.merge(options))
end
def remove_cookie(name)
browser.remove_cookie(name)
end
def debug
if @options[:inspector]
inspector.open
pause
else
raise Error, "To use the remote debugging, you have to launch the driver " \
"with `:inspector => true` configuration option"
end
end
def pause
STDERR.puts "Poltergeist execution paused. Press enter to continue."
STDIN.gets
end
2011-10-27 23:34:14 +01:00
def wait?
true
end
def invalid_element_errors
[Capybara::Poltergeist::ObsoleteNode, Capybara::Poltergeist::ClickFailed]
2011-10-27 23:34:14 +01:00
end
end
end