@@ -57,25 +57,41 @@ class Error < StandardError; end
57
57
58
58
CL_RESET = WebDriver ::Platform . windows? ? '' : "\r \e [0K"
59
59
60
- def self . get ( required_version , opts = { } )
61
- new ( download ( required_version ) , opts )
62
- end
60
+ class << self
61
+ #
62
+ # Download the given version of the selenium-server jar and return instance
63
+ #
64
+ # @param [String, Symbol] required_version X.Y.Z defaults to ':latest'
65
+ # @param [Hash] opts
66
+ # @return [Selenium::Server]
67
+ #
63
68
64
- #
65
- # Download the given version of the selenium-server-standalone jar.
66
- #
69
+ def get ( required_version = :latest , opts = { } )
70
+ new ( download ( required_version ) , opts )
71
+ end
67
72
68
- class << self
69
- def download ( required_version )
73
+ #
74
+ # Download the given version of the selenium-server jar and return location
75
+ #
76
+ # @param [String, Symbol] required_version X.Y.Z defaults to ':latest'
77
+ # @return [String] location of downloaded file
78
+ #
79
+
80
+ def download ( required_version = :latest )
70
81
required_version = latest if required_version == :latest
71
- download_file_name = "selenium-server-standalone- #{ required_version } .jar"
82
+ download_file_name = "selenium-server-#{ required_version } .jar"
72
83
73
84
return download_file_name if File . exist? download_file_name
74
85
75
86
begin
87
+ server = 'https://github.com/seleniumhq/selenium/releases/download'
88
+ released = Net ::HTTP . get_response ( URI . parse ( "#{ server } /selenium-#{ required_version } /#{ download_file_name } " ) )
89
+ redirected = URI . parse released . header [ 'location' ]
90
+
76
91
File . open ( download_file_name , 'wb' ) do |destination |
77
- net_http_start ( 'selenium-release.storage.googleapis.com' ) do |http |
78
- resp = http . request_get ( "/#{ required_version [ /(\d +\. \d +)\. / , 1 ] } /#{ download_file_name } " ) do |response |
92
+ net_http_start ( 'github-releases.githubusercontent.com' ) do |http |
93
+ request = Net ::HTTP ::Get . new redirected
94
+ resp = http . request ( request ) do |response |
79
95
total = response . content_length
80
96
progress = 0
81
97
segment_count = 0
@@ -106,30 +122,35 @@ def download(required_version)
106
122
end
107
123
108
124
#
109
- # Ask Google Code what the latest selenium-server-standalone version is.
125
+ # Ask GitHub what the latest selenium-server version is.
110
126
#
111
127
112
128
def latest
113
- require 'rexml/document'
114
- net_http_start ( 'selenium-release.storage.googleapis.com' ) do |http |
115
- versions = REXML ::Document . new ( http . get ( '/' ) . body ) . root . get_elements ( '//Contents/Key' ) . map do |e |
116
- e . text [ /selenium-server-standalone-(\d +\. \d +\. \d +)\. jar/ , 1 ]
117
- end
118
-
119
- versions . compact . map { |version | Gem ::Version . new ( version ) } . max . version
120
- end
129
+ @latest ||= begin
130
+ net_http_start ( 'api.github.com' ) do |http |
131
+ json = http . get ( '/repos/seleniumhq/selenium/releases' ) . body
132
+ JSON . parse ( json ) . map { |release |
133
+ release [ 'assets' ]
134
+ } . flatten . map { |asset |
135
+ asset [ 'name' ] [ /selenium-server-(\d +\. \d +\. \d +)\. jar/ , 1 ]
136
+ } . compact . map { |version |
137
+ Gem ::Version . new ( version )
138
+ } . max . version
139
+ end
140
+ end
121
141
end
122
142
143
+ # @api private
144
+
123
145
def net_http_start ( address , &block )
124
146
http_proxy = ENV [ 'http_proxy' ] || ENV [ 'HTTP_PROXY' ]
125
-
126
147
if http_proxy
127
148
http_proxy = "http://#{ http_proxy } " unless http_proxy . start_with? ( 'http://' )
128
149
uri = URI . parse ( http_proxy )
129
150
130
151
Net ::HTTP . start ( address , nil , uri . host , uri . port , &block )
131
152
else
132
- Net ::HTTP . start ( address , &block )
153
+ Net ::HTTP . start ( address , use_ssl : true , &block )
133
154
end
134
155
end
135
156
end
@@ -200,10 +221,6 @@ def <<(arg)
200
221
201
222
private
202
223
203
- def selenium4?
204
- @jar . match? ( /[^.]4\. / ) || @jar . include? ( 'deploy' )
205
- end
206
-
207
224
def stop_process
208
225
return unless @process . alive?
209
226
@@ -222,10 +239,7 @@ def process
222
239
@process ||= begin
223
240
# extract any additional_args that start with -D as options
224
241
properties = @additional_args . dup - @additional_args . delete_if { |arg | arg [ /^-D/ ] }
225
- args = [ '-jar' , @jar ]
226
- args << @role if selenium4?
227
- args << ( selenium4? ? '--port' : '-port' )
228
- args << @port . to_s
242
+ args = [ '-jar' , @jar , @role , '--port' , @port . to_s ]
229
243
server_command = [ 'java' ] + properties + args + @additional_args
230
244
cp = ChildProcess . build ( *server_command )
231
245
WebDriver . logger . debug ( "Executing Process #{ server_command } " )
0 commit comments