class Capybara::Apparition::Browser
Attributes
client[R]
console[R]
debug[W]
ignore_https_errors[RW]
js_errors[RW]
paper_size[R]
proxy_auth[R]
zoom_factor[R]
Public Class Methods
new(client, logger = nil) { |self| ... }
click to toggle source
# File lib/capybara/apparition/browser.rb, line 32 def initialize(client, logger = nil) @client = client @current_page_handle = nil @pages = PageManager.new(self) @context_id = nil @js_errors = true @ignore_https_errors = false @logger = logger @console = Console.new(logger) @proxy_auth = nil initialize_handlers command('Target.setDiscoverTargets', discover: true) yield self if block_given? reset end
Public Instance Methods
body()
click to toggle source
# File lib/capybara/apparition/browser.rb, line 61 def body current_page.content end
clear_memory_cache()
click to toggle source
# File lib/capybara/apparition/browser.rb, line 152 def clear_memory_cache current_page.command('Network.clearBrowserCache') end
click_coordinates(x, y)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 70 def click_coordinates(x, y) current_page.click_at(x, y) end
command(name, **params)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 156 def command(name, **params) result = client.send_cmd(name, params).result log result result || raise(Capybara::Apparition::ObsoleteNode.new(nil, nil)) rescue DeadClient restart raise end
command_for_session(session_id, name, params)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 166 def command_for_session(session_id, name, params) client.send_cmd_to_session(session_id, name, params) rescue DeadClient restart raise end
console_messages(type = nil)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 183 def console_messages(type = nil) console.messages(type) end
current_page(allow_nil: false)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 173 def current_page(allow_nil: false) @pages[@current_page_handle] || begin puts "No current page: #{@current_page_handle} : #{caller}" if ENV['DEBUG'] @current_page_handle = nil raise NoSuchWindowError unless allow_nil @current_page_handle end end
extensions=(filenames)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 135 def extensions=(filenames) @extensions = filenames Array(filenames).each do |name| current_page(allow_nil: true)&.add_extension(name) end end
network_traffic(type = nil)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 124 def network_traffic(type = nil) case type when :blocked current_page.network_traffic.select(&:blocked?) else current_page.network_traffic end end
refresh_pages(opener:)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 112 def refresh_pages(opener:) @pages.refresh(opener: opener, ignore_https_errors: ignore_https_errors, js_errors: js_errors, url_blacklist: @url_blacklist, url_whitelist: @url_whitelist) end
reset()
click to toggle source
# File lib/capybara/apparition/browser.rb, line 82 def reset new_context_id = command('Target.createBrowserContext')['browserContextId'] new_target_response = client.send_cmd('Target.createTarget', url: 'about:blank', browserContextId: new_context_id) @pages.reset new_target_id = new_target_response['targetId'] session_id = command('Target.attachToTarget', targetId: new_target_id)['sessionId'] session = Capybara::Apparition::DevToolsProtocol::Session.new(self, client, session_id) @pages.create(new_target_id, session, new_context_id, ignore_https_errors: ignore_https_errors, js_errors: js_errors, extensions: @extensions, url_blacklist: @url_blacklist, url_whitelist: @url_whitelist).send(:main_frame).loaded! timer = Capybara::Helpers.timer(expire_in: 10) until @pages[new_target_id].usable? if timer.expired? puts 'Timedout waiting for reset' raise TimeoutError, 'reset' end sleep 0.01 end console.clear @current_page_handle = new_target_id true end
resize(width, height, screen: nil)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 120 def resize(width, height, screen: nil) current_page.set_viewport width: width, height: height, screen: screen end
restart()
click to toggle source
# File lib/capybara/apparition/browser.rb, line 50 def restart # puts 'handle client restart' # client.restart self.debug = @debug if defined?(@debug) self.js_errors = @js_errors if defined?(@js_errors) self.zoom_factor = @zoom_factor if defined?(@zoom_factor) self.extensions = @extensions if @extensions current_page.clear_network_traffic end
source()
click to toggle source
# File lib/capybara/apparition/browser.rb, line 65 def source # Is this still useful? # command 'source' end
url_blacklist=(blacklist)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 146 def url_blacklist=(blacklist) @url_blacklist = @pages.blacklist = blacklist end
url_whitelist=(whitelist)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 142 def url_whitelist=(whitelist) @url_whitelist = @pages.whitelist = whitelist end
Private Instance Methods
find_window_handle(locator)
click to toggle source
# File lib/capybara/apparition/browser/window.rb, line 53 def find_window_handle(locator) original = current_window_handle return locator if window_handles.include? locator window_handles.each do |handle| switch_to_window(handle) return handle if evaluate('[window.name, document.title, window.location.href]').include? locator end raise NoSuchWindowError ensure switch_to_window(original) if original end
initialize_handlers()
click to toggle source
# File lib/capybara/apparition/browser.rb, line 199 def initialize_handlers # @client.on 'Target.targetCreated' do |info| # byebug # puts "Target Created Info: #{info}" if ENV['DEBUG'] # target_info = info['targetInfo'] # if !@pages.key?(target_info['targetId']) # @pages.add(target_info['targetId'], target_info) # puts "**** Target Added #{info}" if ENV['DEBUG'] # elsif ENV['DEBUG'] # puts "Target already existed #{info}" # end # @current_page_handle ||= target_info['targetId'] if target_info['type'] == 'page' # end @client.on 'Target.targetDestroyed' do |target_id:, **info| puts "**** Target Destroyed Info: #{target_id} - #{info}" if ENV['DEBUG'] @pages.delete(target_id) end # @client.on 'Target.targetInfoChanged' do |info| # byebug # puts "**** Target Info Changed: #{info}" if ENV['DEBUG'] # target_info = info['targetInfo'] # page = @pages[target_info['targetId']] # if page # page.update(target_info) # else # puts '****No target for the info change- creating****' if ENV['DEBUG'] # @pages.add(target_info['targetId'], target_info) # end # end end
log(message)
click to toggle source
# File lib/capybara/apparition/browser.rb, line 189 def log(message) return unless @logger && ENV['DEBUG'] if @logger.respond_to?(:puts) @logger.puts(message) else @logger.debug(message) end end