Class: Selenium::WebDriver::ServiceManager Private

Inherits:
Object
  • Object
show all
Defined in:
lib/selenium/webdriver/common/service_manager.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Base class implementing default behavior of service_manager object, responsible for starting and stopping driver implementations.

Constant Summary collapse

START_TIMEOUT =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

20
SOCKET_LOCK_TIMEOUT =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

45
STOP_TIMEOUT =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

20

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ ServiceManager

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

End users should use a class method for the desired driver, rather than using this directly.



39
40
41
42
43
44
45
46
47
48
# File 'lib/selenium/webdriver/common/service_manager.rb', line 39

def initialize(config)
  @executable_path = config.executable_path
  @host = Platform.localhost
  @port = config.port
  @io = config.log
  @extra_args = config.args
  @shutdown_supported = config.shutdown_supported

  raise Error::WebDriverError, "invalid port: #{@port}" if @port < 1
end

Instance Method Details

#startObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/selenium/webdriver/common/service_manager.rb', line 50

def start
  raise "already started: #{uri.inspect} #{@executable_path.inspect}" if process_running?

  Platform.exit_hook { stop } # make sure we don't leave the server running

  socket_lock.locked do
    find_free_port
    start_process
    connect_until_stable
  end
end

#stopObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/selenium/webdriver/common/service_manager.rb', line 62

def stop
  return unless @shutdown_supported
  return if process_exited?

  stop_server
  @process.poll_for_exit STOP_TIMEOUT
rescue ChildProcess::TimeoutError, Errno::ECONNREFUSED
  nil # noop
ensure
  stop_process
end

#uriObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



74
75
76
# File 'lib/selenium/webdriver/common/service_manager.rb', line 74

def uri
  @uri ||= URI.parse("http://#{@host}:#{@port}")
end