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

158 lines
3.1 KiB
Ruby
Raw Normal View History

2012-03-11 10:56:19 +00:00
require 'multi_json'
2011-10-27 23:34:14 +01:00
module Capybara::Poltergeist
class Browser
attr_reader :server, :client, :logger, :js_errors
2011-10-27 23:34:14 +01:00
def initialize(server, client, logger = nil, js_errors = true)
2012-05-31 13:38:25 +01:00
@server = server
@client = client
@logger = logger
@js_errors = js_errors
end
2011-10-27 23:34:14 +01:00
def restart
server.restart
client.restart
end
2012-07-01 11:40:53 -07:00
def visit(url, headers)
command 'visit', url, headers
2011-10-27 23:34:14 +01:00
end
def current_url
command 'current_url'
end
def body
command 'body'
end
def source
command 'source'
end
def find(selector)
result = command('find', selector)
result['ids'].map { |id| [result['page_id'], id] }
2011-10-27 23:34:14 +01:00
end
def find_within(page_id, id, selector)
command 'find_within', page_id, id, selector
2011-10-27 23:34:14 +01:00
end
def text(page_id, id)
command 'text', page_id, id
2011-10-27 23:34:14 +01:00
end
def attribute(page_id, id, name)
command 'attribute', page_id, id, name.to_s
2011-10-27 23:34:14 +01:00
end
def value(page_id, id)
command 'value', page_id, id
2011-10-27 23:34:14 +01:00
end
def set(page_id, id, value)
command 'set', page_id, id, value
2011-10-27 23:34:14 +01:00
end
def select_file(page_id, id, value)
command 'select_file', page_id, id, value
2011-10-27 23:34:14 +01:00
end
def tag_name(page_id, id)
command('tag_name', page_id, id).downcase
end
def visible?(page_id, id)
command 'visible', page_id, id
2011-10-27 23:34:14 +01:00
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(page_id, id)
command 'click', page_id, id
2011-10-27 23:34:14 +01:00
end
def drag(page_id, id, other_id)
command 'drag', page_id, id, other_id
2011-10-27 23:34:14 +01:00
end
def select(page_id, id, value)
command 'select', page_id, id, value
2011-10-27 23:34:14 +01:00
end
def trigger(page_id, id, event)
2012-03-11 11:47:40 +00:00
command 'trigger', page_id, id, event.to_s
2011-10-27 23:34:14 +01:00
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
def network_traffic
response = command 'network_traffic'
response.values.map do |event|
2012-07-02 23:51:13 +01:00
request = NetworkTraffic::Request.new(event['request'])
event['responseParts'].each do |response|
2012-07-02 23:51:13 +01:00
request.response_parts.push(NetworkTraffic::Response.new(response))
end
request
end
end
2011-10-27 23:34:14 +01:00
def command(name, *args)
message = { 'name' => name, 'args' => args }
log message.inspect
2012-05-31 13:53:40 +01:00
json = JSON.load(server.send(JSON.dump(message)))
2011-10-27 23:34:14 +01:00
log json.inspect
if json['error']
if json['error']['name'] == 'Poltergeist.JavascriptError'
error = JavascriptError.new(json['error'])
if js_errors
raise error
else
log error
end
else
raise BrowserError.new(json['error'])
end
2011-10-27 23:34:14 +01:00
end
json['response']
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