module Capybara::ChromeDevTools::DriverExtensions
Attributes
chrome_debugging_port[RW]
crmux_listen_port[RW]
Public Class Methods
new(app, opts)
click to toggle source
Calls superclass method
# File lib/capybara/chrome_dev_tools/driver_extensions.rb, line 8 def initialize(app, opts) #puts "#{self.class}#initialize" if opts[:browser] == :chrome and Capybara::ChromeDevTools.enabled start_crmux!(opts) end super end
Public Instance Methods
browser()
click to toggle source
Calls superclass method
# File lib/capybara/chrome_dev_tools/driver_extensions.rb, line 63 def browser super.tap do |browser| dev_tools if Capybara::ChromeDevTools.enabled end end
dev_tools()
click to toggle source
# File lib/capybara/chrome_dev_tools/driver_extensions.rb, line 69 def dev_tools @dev_tools ||= ( puts "Connecting to #{crmux_listen_port}..." if Capybara::ChromeDevTools.verbose >= 2 ChromeRemote.client host: 'localhost', port: crmux_listen_port ) end
find_free_port(port = 0)
click to toggle source
# File lib/capybara/chrome_dev_tools/driver_extensions.rb, line 18 def find_free_port(port = 0) begin server = TCPServer.new('127.0.0.1', port) rescue Errno::EADDRINUSE if port == 0 raise else # Lets you pass a preferred port to try first before falling back to 0 port = 0 retry end end server.addr[1].tap do |port| server.close end end
start_crmux!(opts)
click to toggle source
Starts crmux and adds debuggerAddress to opts that points to crmux listen address.
# File lib/capybara/chrome_dev_tools/driver_extensions.rb, line 36 def start_crmux!(opts) self.chrome_debugging_port = find_free_port(Capybara::ChromeDevTools.preferred_port) self.crmux_listen_port = find_free_port(chrome_debugging_port + 1) opts[:options].args << "--remote-debugging-port=#{chrome_debugging_port}" #opts[:options].add_preference 'debuggerAddress', "127.0.0.1:#{crmux_listen_port}" @debug_crmux = true command = "npx crmux #{'-d' if @debug_crmux} \ --port=#{chrome_debugging_port} \ --listen=#{crmux_listen_port}" puts %(command: #{command}) if Capybara::ChromeDevTools.verbose >= 3 if @debug_crmux spawn_opts = {[:out, :err] => 'log/crmux.log'} else spawn_opts = {} end @crmux_pid = spawn(command, spawn_opts) puts %(Started crmux [pid #{@crmux_pid}], listening at http://localhost:#{crmux_listen_port}, connected to localhost:#{chrome_debugging_port}) # You can also get the part later with: page.driver.browser.capabilities["goog:chromeOptions"]["debuggerAddress"] sleep 0.1 at_exit do puts "Killing crmux process #{@crmux_pid}..." if Capybara::ChromeDevTools.verbose >= 1 Process.kill 'TERM', @crmux_pid end end