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/browser.rb

137 lines
2.3 KiB
Ruby
Raw Normal View History

2011-10-27 23:34:14 +01:00
require 'json'
module Capybara::Poltergeist
class Browser
2012-02-29 12:32:13 +00:00
attr_reader :server, :client, :logger
2011-10-27 23:34:14 +01:00
2012-02-29 12:32:13 +00:00
def initialize(server, client, logger = nil)
@server = server
@client = client
@logger = logger
end
2011-10-27 23:34:14 +01:00
def restart
server.restart
client.restart
end
2012-02-29 12:32:13 +00:00
def visit(url)
2011-10-27 23:34:14 +01:00
command 'visit', url
end
def current_url
command 'current_url'
end
def body
command 'body'
end
def source
command 'source'
end
def find(selector, id = nil)
command 'find', selector, id
end
def text(id)
command 'text', id
end
def attribute(id, name)
command 'attribute', id, name
end
def value(id)
command 'value', id
end
def set(id, value)
command 'set', id, value
end
def select_file(id, value)
command 'select_file', id, value
end
def tag_name(id)
command('tag_name', id).downcase
end
def visible?(id)
command 'visible', id
end
def evaluate(script)
command 'evaluate', script
end
def execute(script)
command 'execute', script
end
def within_frame(id, &block)
command 'push_frame', id
yield
command 'pop_frame'
end
def click(id)
command 'click', id
end
def drag(id, other_id)
command 'drag', id, other_id
end
def select(id, value)
command 'select', id, value
end
def trigger(id, event)
command 'trigger', id, event
end
def reset
command 'reset'
end
def render(path, options = {})
command 'render', path, !!options[:full]
2011-10-27 23:34:14 +01:00
end
def resize(width, height)
command 'resize', width, height
end
2011-10-27 23:34:14 +01:00
def command(name, *args)
message = { 'name' => name, 'args' => args }
log message.inspect
json = JSON.parse(server.send(JSON.generate(message)))
log json.inspect
if json['error']
if json['error']['name'] == 'Poltergeist.JavascriptError'
raise JavascriptError.new(json['error'])
else
raise BrowserError.new(json['error'])
end
2011-10-27 23:34:14 +01:00
else
json['response']
end
rescue DeadClient
restart
raise
2011-10-27 23:34:14 +01:00
end
2012-02-29 12:32:13 +00:00
private
def log(message)
logger.puts message if logger
end
2011-10-27 23:34:14 +01:00
end
end