class Capybara::Poltergeist::Browser

Constants

ERROR_MAPPINGS

Attributes

client[R]
logger[R]
server[R]

Public Class Methods

new(server, client, logger = nil) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 15
def initialize(server, client, logger = nil)
  @server = server
  @client = client
  @logger = logger
end

Public Instance Methods

add_header(header, permanent) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 219
def add_header(header, permanent)
  command 'add_header', header, permanent
end
add_headers(headers) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 215
def add_headers(headers)
  command 'add_headers', headers
end
all_text(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 61
def all_text(page_id, id)
  command 'all_text', page_id, id
end
attribute(page_id, id, name) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 73
def attribute(page_id, id, name)
  command 'attribute', page_id, id, name.to_s
end
body() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 40
def body
  command 'body'
end
clear_network_traffic() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 199
def clear_network_traffic
  command('clear_network_traffic')
end
click(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 136
def click(page_id, id)
  command 'click', page_id, id
end
click_coordinates(x, y) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 101
def click_coordinates(x, y)
  command 'click_coordinates', x, y
end
command(name, *args) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 266
def command(name, *args)
  message = { 'name' => name, 'args' => args }
  log message.inspect

  json = JSON.load(server.send(JSON.dump(message)))
  log json.inspect

  if json['error']
    klass = ERROR_MAPPINGS[json['error']['name']] || BrowserError
    raise klass.new(json['error'])
  else
    json['response']
  end
rescue DeadClient
  restart
  raise
end
cookies() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 227
def cookies
  Hash[command('cookies').map { |cookie| [cookie['name'], Cookie.new(cookie)] }]
end
cookies_enabled=(flag) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 243
def cookies_enabled=(flag)
  command 'cookies_enabled', !!flag
end
current_url() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 32
def current_url
  command 'current_url'
end
debug=(val) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 261
def debug=(val)
  @debug = val
  command 'set_debug', !!val
end
delete_text(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 69
def delete_text(page_id, id)
  command 'delete_text', page_id, id
end
disabled?(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 97
def disabled?(page_id, id)
  command 'disabled', page_id, id
end
double_click(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 140
def double_click(page_id, id)
  command 'double_click', page_id, id
end
drag(page_id, id, other_id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 148
def drag(page_id, id, other_id)
  command 'drag', page_id, id, other_id
end
equals(page_id, id, other_id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 203
def equals(page_id, id, other_id)
  command('equals', page_id, id, other_id)
end
evaluate(script) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 105
def evaluate(script)
  command 'evaluate', script
end
execute(script) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 109
def execute(script)
  command 'execute', script
end
extensions=(names) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 255
def extensions=(names)
  Array(names).each do |name|
    command 'add_extension', name
  end
end
find(method, selector) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 52
def find(method, selector)
  result = command('find', method, selector)
  result['ids'].map { |id| [result['page_id'], id] }
end
find_within(page_id, id, method, selector) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 57
def find_within(page_id, id, method, selector)
  command 'find_within', page_id, id, method, selector
end
get_headers() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 207
def get_headers
  command 'get_headers'
end
go_back() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 284
def go_back
  command 'go_back'
end
go_forward() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 288
def go_forward
  command 'go_forward'
end
hover(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 144
def hover(page_id, id)
  command 'hover', page_id, id
end
js_errors=(val) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 251
def js_errors=(val)
  command 'set_js_errors', !!val
end
network_traffic() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 190
def network_traffic
  command('network_traffic').values.map do |event|
    NetworkTraffic::Request.new(
      event['request'],
      event['responseParts'].map { |response| NetworkTraffic::Response.new(response) }
    )
  end
end
render(path, options = {}) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 168
def render(path, options = {})
  check_render_options!(options)
  command 'render', path.to_s, !!options[:full], options[:selector]
end
render_base64(format, options = {}) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 173
def render_base64(format, options = {})
  check_render_options!(options)
  command 'render_base64', format.to_s, !!options[:full], options[:selector]
end
reset() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 160
def reset
  command 'reset'
end
resize(width, height) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 182
def resize(width, height)
  command 'resize', width, height
end
response_headers() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 223
def response_headers
  command 'response_headers'
end
restart() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 21
def restart
  server.restart
  client.restart

  self.debug = @debug if @debug
end
scroll_to(left, top) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 164
def scroll_to(left, top)
  command 'scroll_to', left, top
end
select(page_id, id, value) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 152
def select(page_id, id, value)
  command 'select', page_id, id, value
end
select_file(page_id, id, value) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 85
def select_file(page_id, id, value)
  command 'select_file', page_id, id, value
end
send_keys(page_id, id, keys) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 186
def send_keys(page_id, id, keys)
  command 'send_keys', page_id, id, normalize_keys(keys)
end
set(page_id, id, value) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 81
def set(page_id, id, value)
  command 'set', page_id, id, value
end
set_headers(headers) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 211
def set_headers(headers)
  command 'set_headers', headers
end
set_http_auth(user, password) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 247
def set_http_auth(user, password)
  command 'set_http_auth', user, password
end
set_paper_size(size) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 178
def set_paper_size(size)
  command 'set_paper_size', size
end
source() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 44
def source
  command 'source'
end
status_code() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 36
def status_code
  command 'status_code'
end
tag_name(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 89
def tag_name(page_id, id)
  command('tag_name', page_id, id).downcase
end
title() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 48
def title
  command 'title'
end
trigger(page_id, id, event) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 156
def trigger(page_id, id, event)
  command 'trigger', page_id, id, event.to_s
end
value(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 77
def value(page_id, id)
  command 'value', page_id, id
end
visible?(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 93
def visible?(page_id, id)
  command 'visible', page_id, id
end
visible_text(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 65
def visible_text(page_id, id)
  command 'visible_text', page_id, id
end
visit(url) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 28
def visit(url)
  command 'visit', url
end
window_handles() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 125
def window_handles
  command 'pages'
end
within_frame(handle) { || ... } click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 113
def within_frame(handle, &block)
  if handle.is_a?(Capybara::Node::Base)
    command 'push_frame', handle[:name] || handle[:id]
  else
    command 'push_frame', handle
  end

  yield
ensure
  command 'pop_frame'
end
within_window(name) { || ... } click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 129
def within_window(name, &block)
  command 'push_window', name
  yield
ensure
  command 'pop_window'
end

Private Instance Methods

check_render_options!(options) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 298
def check_render_options!(options)
  if !!options[:full] && options.has_key?(:selector)
    warn "Ignoring :selector in #render since :full => true was given at #{caller.first}"
    options.delete(:selector)
  end
end
log(message) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 294
def log(message)
  logger.puts message if logger
end
normalize_keys(keys) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 305
def normalize_keys(keys)
  keys.map do |key|
    case key
    when Array
      # String itself with modifiers like :alt, :shift, etc
      raise Error, 'PhantomJS behaviour for key modifiers is currently '                         'broken, we will add this in later versions'
    when Symbol
      { key: key } # Return a known sequence for PhantomJS
    when String
      key # Plain string, nothing to do
    end
  end
end