module Selenium::WebDriver::DriverExtensions::HasAuthentication
Public Instance Methods
Source
# File lib/selenium/webdriver/common/driver_extensions/has_authentication.rb, line 42 def register(username:, password:, uri: //) auth_handlers << {username: username, password: password, uri: uri} devtools.network.set_cache_disabled(cache_disabled: true) devtools.fetch.on(:auth_required) do |params| authenticate(params['requestId'], params.dig('request', 'url')) end devtools.fetch.on(:request_paused) do |params| devtools.fetch.continue_request(request_id: params['requestId']) end devtools.fetch.enable(handle_auth_requests: true) end
Registers basic authentication handler which is automatically used whenever browser gets an authentication required response. This currently relies on DevTools
so is only supported in Chromium
browsers.
@example Authenticate any request
driver.register(username: 'admin', password: '123456')
@example Authenticate based on URL
driver.register(username: 'admin1', password: '123456', uri: /mysite1\.com/) driver.register(username: 'admin2', password: '123456', uri: /mysite2\.com/)
@param [String] username @param [String] password @param [Regexp] uri to associate the credentials with
Private Instance Methods
Source
# File lib/selenium/webdriver/common/driver_extensions/has_authentication.rb, line 57 def auth_handlers @auth_handlers ||= [] end
Source
# File lib/selenium/webdriver/common/driver_extensions/has_authentication.rb, line 61 def authenticate(request_id, url) credentials = auth_handlers.find do |handler| url.match?(handler[:uri]) end if credentials devtools.fetch.continue_with_auth( request_id: request_id, auth_challenge_response: { response: 'ProvideCredentials', username: credentials[:username], password: credentials[:password] } ) else devtools.fetch.continue_with_auth( request_id: request_id, auth_challenge_response: { response: 'CancelAuth' } ) end end