Class: Selenium::WebDriver::Firefox::Launcher
- Inherits:
-
Object
- Object
- Selenium::WebDriver::Firefox::Launcher
- Defined in:
- lib/selenium/webdriver/firefox/launcher.rb
Constant Summary collapse
- SOCKET_LOCK_TIMEOUT =
45
- STABLE_CONNECTION_TIMEOUT =
60
Instance Method Summary collapse
- #assert_profile ⇒ Object
- #connect_until_stable ⇒ Object
- #create_profile ⇒ Object
- #fetch_profile ⇒ Object
- #find_free_port ⇒ Object
- #free_port?(port) ⇒ Boolean
-
#initialize(binary, port, profile = nil) ⇒ Launcher
constructor
A new instance of Launcher.
- #launch ⇒ Object
- #socket_lock ⇒ Object
- #start ⇒ Object
- #start_silent_and_wait ⇒ Object
- #url ⇒ Object
Constructor Details
#initialize(binary, port, profile = nil) ⇒ Launcher
Returns a new instance of Launcher.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# 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 |
Instance Method Details
#assert_profile ⇒ Object
98 99 100 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 98 def assert_profile raise Error::WebDriverError, "must create_profile first" unless @profile && @profile_dir end |
#connect_until_stable ⇒ Object
72 73 74 75 76 77 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 72 def connect_until_stable poller = SocketPoller.new(@host, @port, STABLE_CONNECTION_TIMEOUT) unless poller.success? raise Error::WebDriverError, "unable to obtain stable firefox connection in #{STABLE_CONNECTION_TIMEOUT} seconds" end end |
#create_profile ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 53 def create_profile fetch_profile if @profile.nil? @profile.add_webdriver_extension @profile.port = @port @profile_dir = @profile.layout_on_disk end |
#fetch_profile ⇒ Object
87 88 89 90 91 92 93 94 95 96 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 87 def fetch_profile if @profile_name @profile = Profile.from_name @profile_name if @profile.nil? raise Error::WebDriverError, "unable to find profile named: #{@profile_name.inspect}" end else @profile = Profile.new end end |
#find_free_port ⇒ Object
43 44 45 46 47 48 49 50 51 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 43 def find_free_port port = @port until free_port?(port) port += 1 end @port = port end |
#free_port?(port) ⇒ Boolean
79 80 81 82 83 84 85 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 79 def free_port?(port) s = TCPServer.new(@host, port) s.close true rescue SocketError, Errno::EADDRINUSE false end |
#launch ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 |
# 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 |
#socket_lock ⇒ Object
102 103 104 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 102 def socket_lock @socket_lock ||= SocketLock.new(@port - 1, SOCKET_LOCK_TIMEOUT) end |
#start ⇒ Object
61 62 63 64 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 61 def start assert_profile @binary.start_with @profile, @profile_dir end |
#start_silent_and_wait ⇒ Object
66 67 68 69 70 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 66 def start_silent_and_wait assert_profile @binary.start_with @profile, @profile_dir, "--silent" @binary.wait end |
#url ⇒ Object
27 28 29 |
# File 'lib/selenium/webdriver/firefox/launcher.rb', line 27 def url "http://#{@host}:#{@port}/hub" end |