1
0
Fork 0
mirror of https://github.com/thoughtbot/capybara-webkit synced 2023-03-27 23:22:28 -04:00
capybara-webkit/lib/capybara/driver/webkit/browser.rb

99 lines
2 KiB
Ruby
Raw Normal View History

2011-02-18 22:53:06 -05:00
require 'socket'
require 'capybara/util/timeout'
2011-02-26 13:02:43 -05:00
require 'json'
2011-02-18 22:53:06 -05:00
class Capybara::Driver::Webkit
class Browser
def initialize(options = {})
@socket_class = options[:socket_class] || TCPSocket
2011-02-18 22:53:06 -05:00
start_server
connect
end
def visit(url)
command "Visit", url
2011-02-18 22:53:06 -05:00
end
def find(query)
command("Find", query).split(",")
2011-02-18 22:53:06 -05:00
end
def reset!
command("Reset")
2011-02-18 22:53:06 -05:00
end
2011-02-25 18:04:23 -05:00
def source
command("Source")
end
2011-02-25 17:53:36 -05:00
def url
command("Url")
end
def frame_focus(frame_id_or_index=nil)
if frame_id_or_index.is_a? Fixnum
command("FrameFocus", "", frame_id_or_index.to_s)
elsif frame_id_or_index
command("FrameFocus", frame_id_or_index)
else
command("FrameFocus")
end
end
2011-02-25 00:15:08 -05:00
def command(name, *args)
@socket.puts name
@socket.puts args.size
args.each do |arg|
2011-02-26 17:02:00 -05:00
@socket.puts arg.to_s.bytesize
@socket.print arg
end
2011-02-25 00:15:08 -05:00
check
read_response
end
2011-02-26 13:02:43 -05:00
def evaluate_script(script)
json = command('Evaluate', script)
JSON.parse("[#{json}]").first
end
2011-02-26 14:03:30 -05:00
def execute_script(script)
command('Execute', script)
end
2011-02-18 22:53:06 -05:00
private
def start_server
2011-02-26 18:28:42 -05:00
server_path = File.expand_path("../../../../../bin/webkit_server", __FILE__)
@pid = fork { exec(server_path) }
2011-02-18 22:53:06 -05:00
at_exit { Process.kill("INT", @pid) }
end
def connect
Capybara.timeout(5) do
attempt_connect
!@socket.nil?
end
end
def attempt_connect
@socket = @socket_class.open("localhost", 9200)
2011-02-18 22:53:06 -05:00
rescue Errno::ECONNREFUSED
end
def check
result = @socket.gets.strip
2011-02-25 17:44:16 -05:00
2011-02-18 22:53:06 -05:00
unless result == 'ok'
raise WebkitError, read_response
2011-02-18 22:53:06 -05:00
end
end
def read_response
response_length = @socket.gets.to_i
2011-06-14 10:44:17 -04:00
response = @socket.read(response_length)
2011-06-14 10:45:05 -04:00
response.force_encoding("UTF-8") if response.respond_to?(:force_encoding)
2011-06-14 10:44:17 -04:00
response
2011-02-18 22:53:06 -05:00
end
end
end