class Selenium::WebDriver::Firefox::Launcher

@api private

Constants

SOCKET_LOCK_TIMEOUT
STABLE_CONNECTION_TIMEOUT

Public Class Methods

new(binary, port, profile = nil) click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 11
def initialize(binary, port, profile = nil)
  @binary = binary
  @port   = Integer(port)

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

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

  @host = "127.0.0.1"
end

Public Instance Methods

assert_profile() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 95
def assert_profile
  raise Error::WebDriverError, "must create_profile first" unless @profile && @profile_dir
end
connect_until_stable() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 74
def connect_until_stable
  poller = SocketPoller.new(@host, @port, STABLE_CONNECTION_TIMEOUT)

  unless poller.connected?
    @binary.quit
    raise Error::WebDriverError, "unable to obtain stable firefox connection in #{STABLE_CONNECTION_TIMEOUT} seconds (#{@host}:#{@port})"
  end
end
create_profile() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 52
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_profile() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 83
def fetch_profile
  if @profile_name
    @profile = Profile.from_name @profile_name

    unless @profile
      raise Error::WebDriverError, "unable to find profile named: #{@profile_name.inspect}"
    end
  else
    @profile = Profile.new
  end
end
find_free_port() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 48
def find_free_port
  @port = PortProber.above @port
end
launch() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 31
def launch
  socket_lock.locked do
    find_free_port
    create_profile
    start_silent_and_wait
    start
    connect_until_stable
  end

  self
end
quit() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 43
def quit
  @binary.quit
  FileReaper.reap(@profile_dir) if @profile_dir
end
socket_lock() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 99
def socket_lock
  @socket_lock ||= SocketLock.new(@port - 1, SOCKET_LOCK_TIMEOUT)
end
start() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 62
def start
  assert_profile
  @binary.start_with @profile, @profile_dir, "-foreground"
end
start_silent_and_wait() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 67
def start_silent_and_wait
  assert_profile

  @binary.start_with @profile, @profile_dir, "-silent"
  @binary.wait
end
url() click to toggle source
# File lib/selenium/webdriver/firefox/launcher.rb, line 27
def url
  "http://#{@host}:#{@port}/hub"
end