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 18
def initialize(server, client, logger = nil)
  @server = server
  @client = client
  @logger = logger
end

Public Instance Methods

accept_confirm() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 376
def accept_confirm
  command 'set_confirm_process', true
end
accept_prompt(response) click to toggle source

press “OK” with text (response) or default value

# File lib/capybara/poltergeist/browser.rb, line 387
def accept_prompt(response)
  command 'set_prompt_response', response || false
end
add_header(header, permanent) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 291
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 287
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 70
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 90
def attribute(page_id, id, name)
  command 'attribute', page_id, id, name.to_s
end
attributes(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 86
def attributes(page_id, id)
  command 'attributes', page_id, id
end
body() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 45
def body
  command 'body'
end
clear_cookies() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 315
def clear_cookies
  command 'clear_cookies'
end
clear_network_traffic() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 271
def clear_network_traffic
  command('clear_network_traffic')
end
click(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 179
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 118
def click_coordinates(x, y)
  command 'click_coordinates', x, y
end
close_window(handle) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 158
def close_window(handle)
  command 'close_window', handle
end
command(name, *args) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 348
def command(name, *args)
  cmd = Command.new(name, *args)
  log cmd.message

  response = server.send(cmd)
  log response

  json = JSON.load(response)

  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 299
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 319
def cookies_enabled=(flag)
  command 'cookies_enabled', !!flag
end
current_url() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 37
def current_url
  command 'current_url'
end
debug=(val) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 343
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 78
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 114
def disabled?(page_id, id)
  command 'disabled', page_id, id
end
dismiss_confirm() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 380
def dismiss_confirm
  command 'set_confirm_process', false
end
dismiss_prompt() click to toggle source

press “Cancel”

# File lib/capybara/poltergeist/browser.rb, line 394
def dismiss_prompt
  command 'set_prompt_response', nil
end
double_click(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 187
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 195
def drag(page_id, id, other_id)
  command 'drag', page_id, id, other_id
end
drag_by(page_id, id, x, y) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 199
def drag_by(page_id, id, x, y)
  command 'drag_by', page_id, id, x, y
end
equals(page_id, id, other_id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 275
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 122
def evaluate(script)
  command 'evaluate', script
end
execute(script) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 126
def execute(script)
  command 'execute', script
end
extensions=(names) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 332
def extensions=(names)
  @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 61
def find(method, selector)
  result = command('find', method, selector)
  result['ids'].map { |id| [result['page_id'], id] }
end
find_window_handle(locator) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 162
def find_window_handle(locator)
  return locator if window_handles.include? locator

  handle = command 'window_handle', locator
  raise noSuchWindowError unless handle
  return handle
end
find_within(page_id, id, method, selector) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 66
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 279
def get_headers
  command 'get_headers'
end
go_back() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 368
def go_back
  command 'go_back'
end
go_forward() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 372
def go_forward
  command 'go_forward'
end
hover(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 191
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 327
def js_errors=(val)
  @js_errors = val
  command 'set_js_errors', !!val
end
modal_message() click to toggle source
network_traffic() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 261
def network_traffic
  command('network_traffic').values.map do |event|
    NetworkTraffic::Request.new(
      event['request'],
      event['responseParts'].map { |response| NetworkTraffic::Response.new(response) },
      event['error'] ? NetworkTraffic::Error.new(event['error']) : nil
    )
  end
end
open_new_window() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 154
def open_new_window
  command 'open_new_window'
end
parents(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 57
def parents(page_id, id)
  command 'parents', page_id, id
end
path(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 257
def path(page_id, id)
  command 'path', page_id, id
end
property(page_id, id, name) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 82
def property(page_id, id, name)
  command 'property', page_id, id, name.to_s
end
render(path, options = {}) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 219
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 224
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 211
def reset
  command 'reset'
end
resize(width, height) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 249
def resize(width, height)
  command 'resize', width, height
end
response_headers() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 295
def response_headers
  command 'response_headers'
end
restart() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 24
def restart
  server.restart
  client.restart

  self.debug = @debug if defined?(@debug)
  self.js_errors = @js_errors if defined?(@js_errors)
  self.extensions = @extensions if @extensions
end
right_click(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 183
def right_click(page_id, id)
  command 'right_click', page_id, id
end
scroll_to(left, top) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 215
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 203
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 102
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 253
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 98
def set(page_id, id, value)
  command 'set', page_id, id, value
end
set_flash(s_version) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 237
def set_flash(s_version)
  command 'set_flash', s_version
end
set_headers(headers) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 283
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 323
def set_http_auth(user, password)
  command 'set_http_auth', user, password
end
set_java(s_java) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 241
def set_java(s_java)
  command 'set_java', s_java
end
set_paper_size(size) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 245
def set_paper_size(size)
  command 'set_paper_size', size
end
set_screen_size(s_width,s_height,s_color) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 233
def set_screen_size(s_width,s_height,s_color)
  command 'set_screen_size', s_width, s_height, s_color
end
set_zoom_factor(zoom_factor) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 229
def set_zoom_factor(zoom_factor)
  command 'set_zoom_factor', zoom_factor
end
source() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 49
def source
  command 'source'
end
status_code() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 41
def status_code
  command 'status_code'
end
switch_to_window(handle) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 150
def switch_to_window(handle)
  command 'switch_to_window', handle
end
tag_name(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 106
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 53
def title
  command 'title'
end
trigger(page_id, id, event) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 207
def trigger(page_id, id, event)
  command 'trigger', page_id, id, event.to_s
end
url_blacklist=(blacklist) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 339
def url_blacklist=(blacklist)
  command 'set_url_blacklist', *blacklist
end
value(page_id, id) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 94
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 110
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 74
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 33
def visit(url)
  command 'visit', url
end
window_handle() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 142
def window_handle
  command 'window_handle'
end
window_handles() click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 146
def window_handles
  command 'window_handles'
end
within_frame(handle) { || ... } click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 130
def within_frame(handle, &block)
  if handle.is_a?(Capybara::Node::Base)
    command 'push_frame', [handle.native.page_id, handle.native.id]
  else
    command 'push_frame', handle
  end

  yield
ensure
  command 'pop_frame'
end
within_window(locator) { || ... } click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 170
def within_window(locator, &block)
  original = window_handle
  handle = find_window_handle(locator)
  switch_to_window(handle)
  yield
ensure
  switch_to_window(original)
end

Private Instance Methods

check_render_options!(options) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 408
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 404
def log(message)
  logger.puts message if logger
end
normalize_keys(keys) click to toggle source
# File lib/capybara/poltergeist/browser.rb, line 415
def normalize_keys(keys)
  keys.map do |key|
    case key
    when Array
      # [:Shift, "s"] => { modifier: "shift", key: "S" }
      # [:Ctrl, :Left] => { modifier: "ctrl", key: :Left }
      # [:Ctrl, :Shift, :Left] => { modifier: "ctrl,shift", key: :Left }
      letter = key.pop
      symbol = key.map { |k| k.to_s.downcase }.join(',')

      { modifier: symbol.to_s.downcase, key: letter.capitalize }
    when Symbol
      { key: key.capitalize } # Return a known sequence for PhantomJS
    when String
      key # Plain string, nothing to do
    end
  end
end