2011-02-19 03:53:06 +00:00
|
|
|
require "capybara"
|
2011-11-12 01:31:21 +00:00
|
|
|
require "capybara/driver/webkit/version"
|
2011-02-19 03:53:06 +00:00
|
|
|
require "capybara/driver/webkit/node"
|
2012-05-04 19:50:30 +00:00
|
|
|
require "capybara/driver/webkit/connection"
|
2011-02-19 03:53:06 +00:00
|
|
|
require "capybara/driver/webkit/browser"
|
2011-07-22 18:21:15 +00:00
|
|
|
require "capybara/driver/webkit/socket_debugger"
|
2011-10-06 10:13:06 +00:00
|
|
|
require "capybara/driver/webkit/cookie_jar"
|
2011-02-19 03:53:06 +00:00
|
|
|
|
|
|
|
class Capybara::Driver::Webkit
|
2011-07-12 19:31:10 +00:00
|
|
|
class WebkitInvalidResponseError < StandardError
|
|
|
|
end
|
|
|
|
|
|
|
|
class WebkitNoResponseError < StandardError
|
2011-02-25 04:22:56 +00:00
|
|
|
end
|
|
|
|
|
2011-09-30 21:13:54 +00:00
|
|
|
class NodeNotAttachedError < Capybara::ElementNotFound
|
|
|
|
end
|
|
|
|
|
2011-02-25 05:15:08 +00:00
|
|
|
attr_reader :browser
|
|
|
|
|
2011-02-19 03:53:06 +00:00
|
|
|
def initialize(app, options={})
|
|
|
|
@app = app
|
|
|
|
@options = options
|
|
|
|
@rack_server = Capybara::Server.new(@app)
|
|
|
|
@rack_server.boot if Capybara.run_server
|
2012-05-04 19:50:30 +00:00
|
|
|
@browser = options[:browser] || Browser.new(Connection.new(options))
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def current_url
|
2012-02-05 16:43:48 +00:00
|
|
|
browser.current_url
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
2011-11-16 02:11:37 +00:00
|
|
|
def requested_url
|
|
|
|
browser.requested_url
|
|
|
|
end
|
|
|
|
|
2011-02-19 03:53:06 +00:00
|
|
|
def visit(path)
|
2011-02-25 05:15:08 +00:00
|
|
|
browser.visit(url(path))
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def find(query)
|
2011-02-25 05:15:08 +00:00
|
|
|
browser.find(query).map { |native| Node.new(self, native) }
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def source
|
2011-02-25 23:04:23 +00:00
|
|
|
browser.source
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def body
|
2011-07-29 19:00:13 +00:00
|
|
|
browser.body
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
2011-06-08 09:36:45 +00:00
|
|
|
def header(key, value)
|
|
|
|
browser.header(key, value)
|
|
|
|
end
|
|
|
|
|
2011-02-19 03:53:06 +00:00
|
|
|
def execute_script(script)
|
2011-07-29 19:00:13 +00:00
|
|
|
value = browser.execute_script script
|
|
|
|
value.empty? ? nil : value
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def evaluate_script(script)
|
2011-02-26 18:02:43 +00:00
|
|
|
browser.evaluate_script script
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
2011-10-31 17:53:57 +00:00
|
|
|
def console_messages
|
|
|
|
browser.console_messages
|
|
|
|
end
|
|
|
|
|
|
|
|
def error_messages
|
|
|
|
browser.error_messages
|
|
|
|
end
|
|
|
|
|
2011-02-19 03:53:06 +00:00
|
|
|
def response_headers
|
2011-08-19 15:57:39 +00:00
|
|
|
browser.response_headers
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def status_code
|
2011-08-12 20:50:43 +00:00
|
|
|
browser.status_code
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
2012-03-29 16:59:43 +00:00
|
|
|
def resize_window(width, height)
|
|
|
|
browser.resize_window(width, height)
|
|
|
|
end
|
|
|
|
|
2011-04-20 05:42:20 +00:00
|
|
|
def within_frame(frame_id_or_index)
|
|
|
|
browser.frame_focus(frame_id_or_index)
|
|
|
|
begin
|
|
|
|
yield
|
|
|
|
ensure
|
|
|
|
browser.frame_focus
|
|
|
|
end
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
2012-03-28 15:46:07 +00:00
|
|
|
def within_window(selector)
|
2012-03-27 22:49:57 +00:00
|
|
|
current_window = window_handle
|
2012-03-28 15:46:07 +00:00
|
|
|
browser.window_focus(selector)
|
2012-03-26 22:41:33 +00:00
|
|
|
begin
|
|
|
|
yield
|
|
|
|
ensure
|
2012-03-27 22:49:57 +00:00
|
|
|
browser.window_focus(current_window)
|
2012-03-26 22:41:33 +00:00
|
|
|
end
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
2012-03-27 22:49:57 +00:00
|
|
|
def window_handles
|
|
|
|
browser.get_window_handles
|
|
|
|
end
|
|
|
|
|
|
|
|
def window_handle
|
|
|
|
browser.get_window_handle
|
|
|
|
end
|
|
|
|
|
2011-02-19 03:53:06 +00:00
|
|
|
def wait?
|
2011-04-14 14:16:56 +00:00
|
|
|
true
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def wait_until(*args)
|
|
|
|
end
|
|
|
|
|
|
|
|
def reset!
|
2011-02-25 05:15:08 +00:00
|
|
|
browser.reset!
|
2011-02-19 03:53:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def has_shortcircuit_timeout?
|
|
|
|
false
|
|
|
|
end
|
|
|
|
|
2011-05-26 19:05:16 +00:00
|
|
|
def render(path, options={})
|
|
|
|
options[:width] ||= 1000
|
|
|
|
options[:height] ||= 10
|
|
|
|
|
|
|
|
browser.render path, options[:width], options[:height]
|
|
|
|
end
|
|
|
|
|
2011-07-08 01:17:14 +00:00
|
|
|
def server_port
|
|
|
|
@rack_server.port
|
|
|
|
end
|
2011-07-29 19:00:13 +00:00
|
|
|
|
2011-10-06 10:13:06 +00:00
|
|
|
def cookies
|
2011-10-14 19:22:33 +00:00
|
|
|
@cookie_jar ||= CookieJar.new(browser)
|
2011-10-06 10:13:06 +00:00
|
|
|
end
|
|
|
|
|
2012-03-06 22:25:24 +00:00
|
|
|
def invalid_element_errors
|
|
|
|
[]
|
|
|
|
end
|
|
|
|
|
2011-02-19 03:53:06 +00:00
|
|
|
private
|
|
|
|
|
|
|
|
def url(path)
|
|
|
|
@rack_server.url(path)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|