Class: Selenium::WebDriver::Firefox::Launcher Private

Inherits:
Object
  • Object
show all
Defined in:
lib/selenium/webdriver/firefox/launcher.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.

API:

  • private

Constant Summary collapse

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.

API:

  • private

45
STABLE_CONNECTION_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.

API:

  • private

60

Instance Method Summary collapse

Constructor Details

#initialize(binary, port, profile = nil) ⇒ Launcher

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.

Returns a new instance of Launcher.

Raises:

API:

  • private



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 28

def initialize(binary, port, profile = nil)
  @binary = binary
  @port   = Integer(port)

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

  if profile.is_a? Profile
    @profile = profile
  else
    @profile_name = profile
    @profile = nil
  end

  @host = '127.0.0.1'
end

Instance Method Details

#assert_profileObject

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.

Raises:

API:

  • private



100
101
102
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 100

def assert_profile
  raise Error::WebDriverError, 'must create_profile first' unless @profile && @profile_dir
end

#connect_until_stableObject

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.

Raises:

API:

  • private



83
84
85
86
87
88
89
90
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 83

def connect_until_stable
  poller = SocketPoller.new(@host, @port, STABLE_CONNECTION_TIMEOUT)

  return if poller.connected?
  @binary.quit
  error = "unable to obtain stable firefox connection in #{STABLE_CONNECTION_TIMEOUT} seconds (#{@host}:#{@port})"
  raise Error::WebDriverError, error
end

#create_profileObject

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.

API:

  • private



68
69
70
71
72
73
74
75
76
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 68

def create_profile
  fetch_profile unless @profile

  @profile.add_webdriver_extension
  @profile.port = @port

  @profile_dir = @profile.layout_on_disk
  FileReaper << @profile_dir
end

#fetch_profileObject

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.

API:

  • private



92
93
94
95
96
97
98
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 92

def fetch_profile
  if @profile_name
    @profile = Profile.from_name @profile_name
  else
    @profile = Profile.new
  end
end

#find_free_portObject

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.

API:

  • private



64
65
66
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 64

def find_free_port
  @port = PortProber.above @port
end

#launchObject

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.

API:

  • private



48
49
50
51
52
53
54
55
56
57
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 48

def launch
  socket_lock.locked do
    find_free_port
    create_profile
    start
    connect_until_stable
  end

  self
end

#quitObject

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.

API:

  • private



59
60
61
62
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 59

def quit
  @binary.quit
  FileReaper.reap(@profile_dir) if @profile_dir
end

#socket_lockObject

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.

API:

  • private



104
105
106
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 104

def socket_lock
  @socket_lock ||= SocketLock.new(@port - 1, SOCKET_LOCK_TIMEOUT)
end

#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.

API:

  • private



78
79
80
81
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 78

def start
  assert_profile
  @binary.start_with @profile, @profile_dir, '-foreground'
end

#urlObject

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.

API:

  • private



44
45
46
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 44

def url
  "http://#{@host}:#{@port}/hub"
end