capybara-webkit/lib/capybara/driver/webkit/browser.rb

65 lines
1.1 KiB
Ruby
Raw Normal View History

2011-02-19 03:53:06 +00:00
require 'socket'
class Capybara::Driver::Webkit
class Browser
def initialize
start_server
connect
end
def visit(url)
command "visit", url
end
def find(query)
command("find", query).split(",")
end
def reset!
command("reset")
end
private
def start_server
@pid = fork { exec("webkit_server") }
at_exit { Process.kill("INT", @pid) }
end
def connect
puts ">> Connecting"
Capybara.timeout(5) do
attempt_connect
!@socket.nil?
end
puts ">> Connected"
end
def attempt_connect
@socket = TCPSocket.open("localhost", 9200)
rescue Errno::ECONNREFUSED
end
def check
result = @socket.gets.strip
puts ">> #{result}"
unless result == 'ok'
raise
end
end
def command(name, *args)
puts ">> Sending #{name}"
@socket.puts name
args.each { |arg| @socket.puts arg }
check
read_response
end
def read_response
response_length = @socket.gets.to_i
@socket.read(response_length)
end
end
end