class Selenium::WebDriver::SeleniumManager


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

def bin_path

def bin_path
  @bin_path ||= '../../../../../bin'
end

def binary

Returns:
  • (String) - the path to the correct selenium manager
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

def binary_paths(*arguments)

Returns:
  • (Hash) - paths to the requested assets.

Parameters:
  • arguments (Array) -- what gets sent to to Selenium Manager binary.
def binary_paths(*arguments)
  arguments += %w[--language-binding ruby]
  arguments += %w[--output json]
  arguments << '--debug' if WebDriver.logger.debug?
  run(binary, *arguments)
end

def platform_location

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

def run(*command)

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