Class: Selenium::WebDriver::PhantomJS::Service Private
- Inherits:
-
Object
- Object
- Selenium::WebDriver::PhantomJS::Service
- Defined in:
- rb/lib/selenium/webdriver/phantomjs/service.rb
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.
Constant Summary
- 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
- 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.
5
- DEFAULT_PORT =
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.
8910
- MISSING_TEXT =
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.
"Unable to find phantomjs executable."
Instance Attribute Summary (collapse)
- - (Object) uri readonly private
Class Method Summary (collapse)
- + (Object) default_service(port = nil) private
- + (Object) executable_path private
Instance Method Summary (collapse)
- - (Object) create_process(args) private
-
- (Service) initialize(executable_path, port)
constructor
private
A new instance of Service.
- - (Object) start(args = []) private
- - (Object) stop private
Constructor Details
- (Service) initialize(executable_path, port)
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 Service
31 32 33 34 |
# File 'rb/lib/selenium/webdriver/phantomjs/service.rb', line 31 def initialize(executable_path, port) @uri = URI.parse "http://#{Platform.localhost}:#{port}" @executable = executable_path end |
Instance Attribute Details
- (Object) uri (readonly)
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.
15 16 17 |
# File 'rb/lib/selenium/webdriver/phantomjs/service.rb', line 15 def uri @uri end |
Class Method Details
+ (Object) default_service(port = nil)
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.
27 28 29 |
# File 'rb/lib/selenium/webdriver/phantomjs/service.rb', line 27 def self.default_service(port = nil) new executable_path, port || PortProber.above(DEFAULT_PORT) end |
+ (Object) executable_path
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.
17 18 19 20 21 22 23 24 25 |
# File 'rb/lib/selenium/webdriver/phantomjs/service.rb', line 17 def self.executable_path @executable_path ||= ( path = PhantomJS.path path or raise Error::WebDriverError, MISSING_TEXT Platform.assert_executable path path ) end |
Instance Method Details
- (Object) create_process(args)
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.
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'rb/lib/selenium/webdriver/phantomjs/service.rb', line 73 def create_process(args) server_command = [@executable, "--webdriver=#{@uri.port}", *args] process = ChildProcess.build(*server_command.compact) if $DEBUG == true process.io.inherit! elsif Platform.jruby? # apparently we need to read the output for phantomjs to work on jruby process.io.stdout = process.io.stderr = File.new(Platform.null_device, 'w') end process end |
- (Object) start(args = [])
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.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'rb/lib/selenium/webdriver/phantomjs/service.rb', line 36 def start(args = []) if @process && @process.alive? raise "already started: #{@uri.inspect} #{@executable.inspect}" end @process = create_process(args) @process.start socket_poller = SocketPoller.new Platform.localhost, @uri.port, START_TIMEOUT unless socket_poller.connected? raise Error::WebDriverError, "unable to connect to phantomjs @ #{@uri} after #{START_TIMEOUT} seconds" end Platform.exit_hook { stop } # make sure we don't leave the server running end |
- (Object) stop
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.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'rb/lib/selenium/webdriver/phantomjs/service.rb', line 53 def stop return if @process.nil? || @process.exited? Net::HTTP.start(uri.host, uri.port) do |http| http.open_timeout = STOP_TIMEOUT / 2 http.read_timeout = STOP_TIMEOUT / 2 http.get("/shutdown") end @process.poll_for_exit STOP_TIMEOUT rescue ChildProcess::TimeoutError # ok, force quit @process.stop STOP_TIMEOUT if Platform.jruby? && !$DEBUG @process.io.close rescue nil end end |