class Capybara::Cuprite::Browser

Attributes

url_blacklist[R]
url_whitelist[R]

Public Class Methods

new(options = nil) click to toggle source
Calls superclass method
# File lib/capybara/cuprite/browser.rb, line 15
def initialize(options = nil)
  options ||= {}
  self.url_blacklist = options[:url_blacklist]
  self.url_whitelist = options[:url_whitelist]

  super
  @page = false
end

Public Instance Methods

all_text(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 170
def all_text(node)
  node.text
end
attribute(node, name) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 150
def attribute(node, name)
  evaluate_on(node: node, expression: %Q(_cuprite.getAttribute(this, "#{name}")))
end
attributes(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 145
def attributes(node)
  value = evaluate_on(node: node, expression: "_cuprite.getAttributes(this)")
  JSON.parse(value)
end
browser_error() click to toggle source
# File lib/capybara/cuprite/browser.rb, line 113
def browser_error
  evaluate("_cuprite.browserError()")
end
close_window(target_id) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 106
def close_window(target_id)
  target = targets[target_id]
  raise Ferrum::NoSuchPageError unless target
  @page = nil if @page.target_id == target.id
  target.page.close
end
delete_text(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 141
def delete_text(node)
  evaluate_on(node: node, expression: "_cuprite.deleteText(this)")
end
disabled?(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 162
def disabled?(node)
  evaluate_on(node: node, expression: "_cuprite.isDisabled(this)")
end
drag(node, other) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 121
def drag(node, other)
  raise NotImplementedError
end
drag_by(node, x, y) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 125
def drag_by(node, x, y)
  raise NotImplementedError
end
find(method, selector) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 57
def find(method, selector)
  find_all(method, selector)
end
find_within(node, method, selector) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 65
def find_within(node, method, selector)
  resolved = page.command("DOM.resolveNode", nodeId: node.node_id)
  object_id = resolved.dig("object", "objectId")
  find_all(method, selector, { "objectId" => object_id })
end
page() click to toggle source
# File lib/capybara/cuprite/browser.rb, line 24
def page
  raise Ferrum::NoSuchPageError if @page.nil?
  @page ||= attach_page
end
parents(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 133
def parents(node)
  evaluate_on(node: node, expression: "_cuprite.parents(this)", by_value: false)
end
path(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 166
def path(node)
  evaluate_on(node: node, expression: "_cuprite.path(this)")
end
property(node, name) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 61
def property(node, name)
  node.property(name)
end
quit() click to toggle source
Calls superclass method
# File lib/capybara/cuprite/browser.rb, line 34
def quit
  super
  @page = false
end
reset() click to toggle source
Calls superclass method
# File lib/capybara/cuprite/browser.rb, line 29
def reset
  super
  @page = attach_page
end
select_file(node, value) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 129
def select_file(node, value)
  node.select_file(value)
end
source() click to toggle source
# File lib/capybara/cuprite/browser.rb, line 117
def source
  raise NotImplementedError
end
status_code() click to toggle source
# File lib/capybara/cuprite/browser.rb, line 53
def status_code
  network.status
end
switch_to_window(target_id) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 100
def switch_to_window(target_id)
  target = targets[target_id]
  raise Ferrum::NoSuchPageError unless target
  @page = attach_page(target.id)
end
url_blacklist=(patterns) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 44
def url_blacklist=(patterns)
  @url_blacklist = prepare_wildcards(patterns)
  page.network.intercept if @client && !@url_blacklist.empty?
end
url_whitelist=(patterns) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 39
def url_whitelist=(patterns)
  @url_whitelist = prepare_wildcards(patterns)
  page.network.intercept if @client && !@url_whitelist.empty?
end
value(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 154
def value(node)
  evaluate_on(node: node, expression: "_cuprite.value(this)")
end
visible?(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 158
def visible?(node)
  evaluate_on(node: node, expression: "_cuprite.isVisible(this)")
end
visible_text(node) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 137
def visible_text(node)
  evaluate_on(node: node, expression: "_cuprite.visibleText(this)")
end
visit(*args) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 49
def visit(*args)
  goto(*args)
end
window_handle() click to toggle source
# File lib/capybara/cuprite/browser.rb, line 71
def window_handle
  page.target_id
end
window_handles() click to toggle source
# File lib/capybara/cuprite/browser.rb, line 75
def window_handles
  targets.keys
end
within_window(locator = nil) { || ... } click to toggle source
# File lib/capybara/cuprite/browser.rb, line 79
def within_window(locator = nil, &block)
  original = window_handle

  if Capybara::VERSION.to_f < 3.0
    target_id = window_handles.find do |target_id|
      page = attach_page(target_id)
      locator == page.frame_name
    end
    locator = target_id if target_id
  end

  if window_handles.include?(locator)
    switch_to_window(locator)
    yield
  else
    raise Ferrum::NoSuchPageError
  end
ensure
  switch_to_window(original)
end

Private Instance Methods

attach_page(target_id = nil) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 204
def attach_page(target_id = nil)
  target = targets[target_id] if target_id
  target ||= default_context.default_target
  return target.page if target.attached?

  target.maybe_sleep_if_new_window
  target.page = Page.new(target.id, self)
  target.page
end
find_all(method, selector, within = nil) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 176
def find_all(method, selector, within = nil)
  begin
    nodes = if within
      evaluate("_cuprite.find(arguments[0], arguments[1], arguments[2])", method, selector, within)
    else
      evaluate("_cuprite.find(arguments[0], arguments[1])", method, selector)
    end

    nodes.map { |n| n.node? ? n : next }.compact
  rescue Ferrum::JavaScriptError => e
    if e.class_name == "InvalidSelector"
      raise InvalidSelector.new(e.response, method, selector)
    end
    raise
  end
end
prepare_wildcards(wc) click to toggle source
# File lib/capybara/cuprite/browser.rb, line 193
def prepare_wildcards(wc)
  Array(wc).map do |wildcard|
    if wildcard.is_a?(Regexp)
      wildcard
    else
      wildcard = wildcard.gsub("*", ".*")
      Regexp.new(wildcard, Regexp::IGNORECASE)
    end
  end
end