class Selenium::WebDriver::SeleniumManager

Wrapper for getting information from the Selenium Manager binaries. This implementation is still in beta, and may change. @api private

Attributes

bin_path[W]

Public Class Methods

bin_path() click to toggle source
# File lib/selenium/webdriver/common/selenium_manager.rb, line 33
def bin_path
  @bin_path ||= '../../../../../bin'
end
binary_paths(*arguments) click to toggle source

@param [Array] arguments what gets sent to to Selenium Manager binary. @return [Hash] paths to the requested assets.

# File lib/selenium/webdriver/common/selenium_manager.rb, line 39
def binary_paths(*arguments)
  arguments += %w[--language-binding ruby]
  arguments += %w[--output json]
  arguments << '--debug' if WebDriver.logger.debug?

  run(binary, *arguments)
end

Private Class Methods

binary() click to toggle source

@return [String] the path to the correct selenium manager

# File lib/selenium/webdriver/common/selenium_manager.rb, line 50
def binary
  @binary ||= begin
    if (location = ENV.fetch('SE_MANAGER_PATH', nil))
      WebDriver.logger.debug("Selenium Manager set by ENV['SE_MANAGER_PATH']: #{location}")
    end
    location ||= platform_location

    Platform.assert_executable(location)
    WebDriver.logger.debug("Selenium Manager binary found at #{location}", id: :selenium_manager)
    location
  end
end
platform_location() click to toggle source
# File lib/selenium/webdriver/common/selenium_manager.rb, line 85
def platform_location
  directory = File.expand_path(bin_path, __FILE__)
  if Platform.windows?
    "#{directory}/windows/selenium-manager.exe"
  elsif Platform.mac?
    "#{directory}/macos/selenium-manager"
  elsif Platform.linux?
    "#{directory}/linux/selenium-manager"
  elsif Platform.unix?
    WebDriver.logger.warn('Selenium Manager binary may not be compatible with Unix',
                          id: %i[selenium_manager unix_binary])
    "#{directory}/linux/selenium-manager"
  else
    raise Error::WebDriverError, "unsupported platform: #{Platform.os}"
  end
end
run(*command) click to toggle source
# File lib/selenium/webdriver/common/selenium_manager.rb, line 63
def run(*command)
  WebDriver.logger.debug("Executing Process #{command}", id: :selenium_manager)

  begin
    stdout, stderr, status = Open3.capture3(*command)
  rescue StandardError => e
    raise Error::WebDriverError, "Unsuccessful command executed: #{command}; #{e.message}"
  end

  json_output = stdout.empty? ? {'logs' => [], 'result' => {}} : JSON.parse(stdout)
  json_output['logs'].each do |log|
    level = log['level'].casecmp('info').zero? ? 'debug' : log['level'].downcase
    WebDriver.logger.send(level, log['message'], id: :selenium_manager)
  end

  result = json_output['result']
  return result unless status.exitstatus.positive? || result.nil?

  raise Error::WebDriverError,
        "Unsuccessful command executed: #{command} - Code #{status.exitstatus}\n#{result}\n#{stderr}"
end