Class: Selenium::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/selenium/server.rb

Overview

Wraps the remote server jar

Usage:

server = Selenium::Server.new('/path/to/selenium-server-standalone.jar')
server.start

Automatically download the given version:

server = Selenium::Server.get '2.6.0'
server.start

or the latest version:

server = Selenium::Server.get :latest
server.start

Defined Under Namespace

Classes: Error

Constant Summary collapse

CL_RESET =
WebDriver::Platform.windows? ? '' : "\r\e[0K"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(jar, opts = {}) ⇒ Server

Returns a new instance of Server.

Raises:

  • (Errno::ENOENT)


93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/selenium/server.rb', line 93

def initialize(jar, opts = {})
  raise Errno::ENOENT, jar unless File.exist?(jar)

  @jar        = jar
  @host       = "127.0.0.1"
  @port       = opts.fetch(:port, 4444)
  @timeout    = opts.fetch(:timeout, 30)
  @background = opts.fetch(:background, false)
  @log        = opts[:log]

  @additional_args = []
end

Class Method Details

.download(required_version) ⇒ Object

Download the given version of the selenium-server-standalone jar.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/selenium/server.rb', line 39

def self.download(required_version)
  required_version = latest if required_version == :latest
  download_file_name = "selenium-server-standalone-#{required_version}.jar"

  if File.exists? download_file_name
    return download_file_name
  end

  begin
    open(download_file_name, "wb") do |destination|
      net_http.start("selenium.googlecode.com") do |http|
        resp = http.request_get("/files/#{download_file_name}") do |response|
          total = response.content_length
          progress = 0
          segment_count = 0

          response.read_body do |segment|
            progress += segment.length
            segment_count += 1

            if segment_count % 15 == 0
              percent = (progress.to_f / total.to_f) * 100
              print "#{CL_RESET}Downloading #{download_file_name}: #{percent.to_i}% (#{progress} / #{total})"
              segment_count = 0
            end

            destination.write(segment)
          end
        end

        unless resp.kind_of? Net::HTTPSuccess
          raise Error, "#{resp.code} for #{download_file_name}"
        end
      end
    end
  rescue
    FileUtils.rm download_file_name if File.exists? download_file_name
    raise
  end

  download_file_name
end

.get(required_version, opts = {}) ⇒ Object



31
32
33
# File 'lib/selenium/server.rb', line 31

def self.get(required_version, opts = {})
  new(download(required_version), opts)
end

.latestObject

Ask Google Code what the latest selenium-server-standalone version is.



86
87
88
89
90
91
# File 'lib/selenium/server.rb', line 86

def self.latest
  net_http.start("code.google.com") do |http|
    resp = http.get("/p/selenium/downloads/list")
    resp.body.to_s[/selenium-server-standalone-(\d+.\d+.\d+).jar/, 1]
  end
end

Instance Method Details

#<<(arg) ⇒ Object



135
136
137
138
139
140
141
# File 'lib/selenium/server.rb', line 135

def <<(arg)
  if arg.kind_of?(Array)
    @additional_args += arg
  else
    @additional_args << arg.to_s
  end
end

#startObject



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/selenium/server.rb', line 106

def start
  process.start
  poll_for_service

  unless @background
    begin
      sleep 1 while process.alive?
    rescue Errno::ECHILD
      # no longer alive
    end
  end
end

#stopObject



119
120
121
122
123
124
125
126
127
128
129
# File 'lib/selenium/server.rb', line 119

def stop
  begin
    Net::HTTP.get(@host, "/selenium-server/driver/?cmd=shutDownSeleniumServer", @port)
  rescue Errno::ECONNREFUSED
  end

  stop_process if @process
  poll_for_shutdown

  @log_file.close if @log_file
end

#webdriver_urlObject



131
132
133
# File 'lib/selenium/server.rb', line 131

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