Skip to content

Instantly share code, notes, and snippets.

@fernyb
Created May 6, 2019 05:48
Show Gist options
  • Save fernyb/1cd2460d05d99d7f88c61f821cd7e50c to your computer and use it in GitHub Desktop.
Save fernyb/1cd2460d05d99d7f88c61f821cd7e50c to your computer and use it in GitHub Desktop.
Ruby WebDriver get performance log
require 'selenium-webdriver'
require 'pp'
class Inspector
attr_accessor :driver
def open url
@network_events = {}
@driver = Selenium::WebDriver::Driver.for :remote, url: "http://localhost:4444/wd/hub", desired_capabilities: capabilities
at_exit do
@driver.quit
end
@driver.navigate.to url
end
def capabilities
caps = Selenium::WebDriver::Remote::Capabilities.chrome
caps['loggingPrefs'] = { 'performance' => 'ALL' }
caps['chromeOptions'] = {
'perfLoggingPrefs': {
'enableNetwork': true,
'enablePage': true
}
}
caps
end
def network_requests
driver.manage.logs.get(:performance).each do |perf|
message = JSON.parse(perf.message)
method = message['message']['method']
if method =~ /Page/
page(message)
elsif method =~ /Network/
network(message)
end
end
end
def network_events
@network_events
end
def network(message)
params = message['message']['params']
@network_events["#{ params['requestId'] }"] ||= []
@network_events["#{ params['requestId'] }"] << message
#$stdout.puts "* : #{ message }"
#$stdout.puts "* : #{ params['requestId'] }"
# Network.requestWillBeSent
# Network.dataReceived
# Network.responseReceived
# Network.loadingFinished
end
def page(message)
#$stdout.puts "* :#{ message['message']['method'] }"
end
end
inspector = Inspector.new
inspector.open "http://reddit.com/"
inspector.network_requests
puts PP.pp(inspector.network_events, ''), "\n\n"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment