selenium-webdriver 2.53.4 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +363 -10
  3. data/LICENSE +1 -1
  4. data/README.md +2 -3
  5. data/lib/selenium-webdriver.rb +0 -2
  6. data/lib/selenium/server.rb +69 -70
  7. data/lib/selenium/webdriver.rb +32 -23
  8. data/lib/selenium/webdriver/atoms.rb +18 -0
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +8 -0
  10. data/lib/selenium/webdriver/chrome.rb +8 -6
  11. data/lib/selenium/webdriver/chrome/driver.rb +112 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +168 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +17 -17
  14. data/lib/selenium/webdriver/chrome/service.rb +22 -89
  15. data/lib/selenium/webdriver/common.rb +13 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +49 -57
  17. data/lib/selenium/webdriver/common/alert.rb +5 -15
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +10 -17
  19. data/lib/selenium/webdriver/common/driver.rb +53 -68
  20. data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_addons.rb} +13 -23
  21. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +4 -8
  22. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -7
  23. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +0 -4
  24. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +0 -4
  25. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +1 -5
  26. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +0 -5
  27. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +4 -9
  28. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +7 -7
  29. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +2 -7
  30. data/lib/selenium/webdriver/common/element.rb +57 -39
  31. data/lib/selenium/webdriver/common/error.rb +204 -106
  32. data/lib/selenium/webdriver/common/file_reaper.rb +3 -11
  33. data/lib/selenium/webdriver/common/html5/local_storage.rb +6 -10
  34. data/lib/selenium/webdriver/common/html5/session_storage.rb +6 -10
  35. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +7 -18
  36. data/lib/selenium/webdriver/{safari/options.rb → common/interactions/input_device.rb} +20 -31
  37. data/lib/selenium/webdriver/common/interactions/interaction.rb +50 -0
  38. data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +16 -15
  39. data/lib/selenium/webdriver/common/interactions/key_actions.rb +143 -0
  40. data/lib/selenium/webdriver/common/interactions/key_input.rb +62 -0
  41. data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +11 -6
  42. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +353 -0
  43. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +132 -0
  44. data/lib/selenium/webdriver/common/keyboard.rb +7 -14
  45. data/lib/selenium/webdriver/common/keys.rb +99 -82
  46. data/lib/selenium/webdriver/common/log_entry.rb +3 -6
  47. data/lib/selenium/webdriver/common/logger.rb +140 -0
  48. data/lib/selenium/webdriver/common/logs.rb +2 -6
  49. data/lib/selenium/webdriver/common/mouse.rb +9 -14
  50. data/lib/selenium/webdriver/common/navigation.rb +2 -6
  51. data/lib/selenium/webdriver/common/options.rb +20 -23
  52. data/lib/selenium/webdriver/common/platform.rb +70 -97
  53. data/lib/selenium/webdriver/common/port_prober.rb +3 -4
  54. data/lib/selenium/webdriver/common/profile_helper.rb +6 -11
  55. data/lib/selenium/webdriver/common/proxy.rb +58 -72
  56. data/lib/selenium/webdriver/common/search_context.rb +22 -29
  57. data/lib/selenium/webdriver/common/service.rb +161 -0
  58. data/lib/selenium/webdriver/common/socket_lock.rb +6 -14
  59. data/lib/selenium/webdriver/common/socket_poller.rb +5 -12
  60. data/lib/selenium/webdriver/common/target_locator.rb +11 -15
  61. data/lib/selenium/webdriver/common/timeouts.rb +4 -8
  62. data/lib/selenium/webdriver/common/touch_action_builder.rb +2 -6
  63. data/lib/selenium/webdriver/common/touch_screen.rb +19 -23
  64. data/lib/selenium/webdriver/common/w3c_action_builder.rb +209 -0
  65. data/lib/selenium/webdriver/{phantomjs.rb → common/w3c_options.rb} +16 -14
  66. data/lib/selenium/webdriver/common/wait.rb +6 -13
  67. data/lib/selenium/webdriver/common/window.rb +48 -17
  68. data/lib/selenium/webdriver/common/zipper.rb +6 -10
  69. data/lib/selenium/webdriver/edge.rb +5 -12
  70. data/lib/selenium/webdriver/edge/bridge.rb +32 -63
  71. data/lib/selenium/webdriver/edge/driver.rb +73 -0
  72. data/lib/selenium/webdriver/edge/service.rb +18 -87
  73. data/lib/selenium/webdriver/firefox.rb +20 -11
  74. data/lib/selenium/webdriver/firefox/binary.rb +40 -56
  75. data/lib/selenium/webdriver/firefox/driver.rb +48 -0
  76. data/lib/selenium/webdriver/firefox/extension.rb +18 -8
  77. data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -11
  78. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  79. data/lib/selenium/webdriver/firefox/launcher.rb +13 -22
  80. data/lib/selenium/webdriver/firefox/legacy/driver.rb +79 -0
  81. data/lib/selenium/webdriver/{iphone.rb → firefox/marionette/bridge.rb} +25 -6
  82. data/lib/selenium/webdriver/firefox/marionette/driver.rb +96 -0
  83. data/lib/selenium/webdriver/firefox/options.rb +149 -0
  84. data/lib/selenium/webdriver/firefox/profile.rb +46 -46
  85. data/lib/selenium/webdriver/firefox/profiles_ini.rb +8 -18
  86. data/lib/selenium/webdriver/firefox/service.rb +23 -83
  87. data/lib/selenium/webdriver/firefox/util.rb +0 -4
  88. data/lib/selenium/webdriver/ie.rb +4 -8
  89. data/lib/selenium/webdriver/ie/driver.rb +90 -0
  90. data/lib/selenium/webdriver/ie/options.rb +136 -0
  91. data/lib/selenium/webdriver/ie/service.rb +58 -0
  92. data/lib/selenium/webdriver/remote.rb +8 -16
  93. data/lib/selenium/webdriver/remote/bridge.rb +96 -565
  94. data/lib/selenium/webdriver/remote/capabilities.rb +76 -94
  95. data/lib/selenium/webdriver/remote/driver.rb +49 -0
  96. data/lib/selenium/webdriver/remote/http/common.rb +22 -20
  97. data/lib/selenium/webdriver/remote/http/curb.rb +9 -12
  98. data/lib/selenium/webdriver/remote/http/default.rb +54 -41
  99. data/lib/selenium/webdriver/remote/http/persistent.rb +9 -8
  100. data/lib/selenium/webdriver/remote/oss/bridge.rb +586 -0
  101. data/lib/selenium/webdriver/remote/oss/commands.rb +221 -0
  102. data/lib/selenium/webdriver/remote/response.rb +39 -27
  103. data/lib/selenium/webdriver/remote/server_error.rb +1 -5
  104. data/lib/selenium/webdriver/remote/w3c/bridge.rb +573 -0
  105. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +290 -0
  106. data/lib/selenium/webdriver/remote/w3c/commands.rb +148 -0
  107. data/lib/selenium/webdriver/safari.rb +20 -29
  108. data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +21 -30
  109. data/lib/selenium/webdriver/safari/service.rb +57 -0
  110. data/lib/selenium/webdriver/support.rb +1 -2
  111. data/lib/selenium/webdriver/support/abstract_event_listener.rb +17 -4
  112. data/lib/selenium/webdriver/support/block_event_listener.rb +1 -5
  113. data/lib/selenium/webdriver/support/color.rb +57 -42
  114. data/lib/selenium/webdriver/support/escaper.rb +41 -0
  115. data/lib/selenium/webdriver/support/event_firing_bridge.rb +36 -40
  116. data/lib/selenium/webdriver/support/select.rb +33 -86
  117. data/selenium-webdriver.gemspec +22 -25
  118. metadata +254 -261
  119. data/lib/selenium-client.rb +0 -21
  120. data/lib/selenium/client.rb +0 -57
  121. data/lib/selenium/client/base.rb +0 -151
  122. data/lib/selenium/client/driver.rb +0 -29
  123. data/lib/selenium/client/errors.rb +0 -28
  124. data/lib/selenium/client/extensions.rb +0 -132
  125. data/lib/selenium/client/idiomatic.rb +0 -507
  126. data/lib/selenium/client/javascript_expression_builder.rb +0 -135
  127. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
  128. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
  129. data/lib/selenium/client/legacy_driver.rb +0 -1722
  130. data/lib/selenium/client/protocol.rb +0 -123
  131. data/lib/selenium/client/selenium_helper.rb +0 -49
  132. data/lib/selenium/rake/server_task.rb +0 -176
  133. data/lib/selenium/webdriver/android/bridge.rb +0 -68
  134. data/lib/selenium/webdriver/chrome/bridge.rb +0 -139
  135. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
  136. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
  137. data/lib/selenium/webdriver/common/html5/location.rb +0 -19
  138. data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
  139. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
  140. data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
  141. data/lib/selenium/webdriver/ie/bridge.rb +0 -88
  142. data/lib/selenium/webdriver/ie/server.rb +0 -133
  143. data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
  144. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
  145. data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
  146. data/lib/selenium/webdriver/remote/commands.rb +0 -211
  147. data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
  148. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
  149. data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
  150. data/lib/selenium/webdriver/safari/bridge.rb +0 -135
  151. data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
  152. data/lib/selenium/webdriver/safari/server.rb +0 -187
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -25,19 +23,18 @@ module Selenium
25
23
  # server is being asked to create.
26
24
  #
27
25
  class Capabilities
28
-
29
26
  DEFAULTS = {
30
- :browser_name => "",
31
- :version => "",
32
- :platform => :any,
33
- :javascript_enabled => false,
34
- :css_selectors_enabled => false,
35
- :takes_screenshot => false,
36
- :native_events => false,
37
- :rotatable => false,
38
- :firefox_profile => nil,
39
- :proxy => nil
40
- }
27
+ browser_name: '',
28
+ version: '',
29
+ platform: :any,
30
+ javascript_enabled: false,
31
+ css_selectors_enabled: false,
32
+ takes_screenshot: false,
33
+ native_events: false,
34
+ rotatable: false,
35
+ firefox_profile: nil,
36
+ proxy: nil
37
+ }.freeze
41
38
 
42
39
  DEFAULTS.each_key do |key|
43
40
  define_method key do
@@ -49,108 +46,94 @@ module Selenium
49
46
  end
50
47
  end
51
48
 
49
+ #
50
+ # Returns javascript_enabled capability.
51
+ # It is true if not set explicitly.
52
+ #
53
+ def javascript_enabled
54
+ javascript_enabled = @capabilities.fetch(:javascript_enabled)
55
+ javascript_enabled.nil? ? true : javascript_enabled
56
+ end
57
+
52
58
  alias_method :css_selectors_enabled?, :css_selectors_enabled
53
- alias_method :javascript_enabled? , :javascript_enabled
54
- alias_method :native_events? , :native_events
55
- alias_method :takes_screenshot? , :takes_screenshot
56
- alias_method :rotatable? , :rotatable
59
+ alias_method :javascript_enabled?, :javascript_enabled
60
+ alias_method :native_events?, :native_events
61
+ alias_method :takes_screenshot?, :takes_screenshot
62
+ alias_method :rotatable?, :rotatable
57
63
 
58
64
  #
59
65
  # Convenience methods for the common choices.
60
66
  #
61
67
 
62
68
  class << self
63
- def android(opts = {})
64
- new({
65
- :browser_name => "android",
66
- :platform => :android,
67
- :javascript_enabled => true,
68
- :rotatable => true,
69
- :takes_screenshot => true
70
- }.merge(opts))
71
- end
72
-
73
69
  def chrome(opts = {})
74
70
  new({
75
- :browser_name => "chrome",
76
- :javascript_enabled => true,
77
- :css_selectors_enabled => true,
78
- :loggingPrefs => {:browser => "ALL",
79
- :driver => "ALL"}
80
- }.merge(opts))
71
+ browser_name: 'chrome',
72
+ javascript_enabled: true,
73
+ css_selectors_enabled: true
74
+ }.merge(opts))
81
75
  end
82
76
 
83
77
  def edge(opts = {})
84
- W3CCapabilities.edge(opts)
78
+ new({
79
+ browser_name: 'MicrosoftEdge',
80
+ platform: :windows,
81
+ javascript_enabled: true,
82
+ takes_screenshot: true,
83
+ css_selectors_enabled: true
84
+ }.merge(opts))
85
85
  end
86
86
 
87
87
  def firefox(opts = {})
88
- return W3CCapabilities.firefox(opts) if opts[:marionette]
89
-
90
88
  new({
91
- :browser_name => "firefox",
92
- :javascript_enabled => true,
93
- :takes_screenshot => true,
94
- :css_selectors_enabled => true
89
+ browser_name: 'firefox',
90
+ javascript_enabled: true,
91
+ takes_screenshot: true,
92
+ css_selectors_enabled: true
95
93
  }.merge(opts))
96
94
  end
97
95
 
98
96
  def htmlunit(opts = {})
99
97
  new({
100
- :browser_name => "htmlunit"
98
+ browser_name: 'htmlunit'
101
99
  }.merge(opts))
102
100
  end
103
101
 
104
102
  def htmlunitwithjs(opts = {})
105
103
  new({
106
- :browser_name => "htmlunit",
107
- :javascript_enabled => true
104
+ browser_name: 'htmlunit',
105
+ javascript_enabled: true
108
106
  }.merge(opts))
109
107
  end
110
108
 
111
109
  def internet_explorer(opts = {})
112
110
  new({
113
- :browser_name => "internet explorer",
114
- :platform => :windows,
115
- :takes_screenshot => true,
116
- :css_selectors_enabled => true,
117
- :native_events => true
111
+ browser_name: 'internet explorer',
112
+ platform: :windows,
113
+ takes_screenshot: true,
114
+ css_selectors_enabled: true,
115
+ native_events: true
118
116
  }.merge(opts))
119
117
  end
120
118
  alias_method :ie, :internet_explorer
121
119
 
122
- def iphone(opts = {})
123
- new({
124
- :browser_name => "iPhone",
125
- :platform => :mac,
126
- :javascript_enabled => true
127
- }.merge(opts))
128
- end
129
-
130
- def ipad(opts = {})
131
- new({
132
- :browser_name => "iPad",
133
- :platform => :mac,
134
- :javascript_enabled => true
135
- }.merge(opts))
136
- end
137
-
138
120
  def phantomjs(opts = {})
121
+ WebDriver.logger.deprecate 'Selenium support for PhantomJS', 'headless Chrome/Firefox or HTMLUnit'
139
122
  new({
140
- :browser_name => "phantomjs",
141
- :javascript_enabled => true,
142
- :takes_screenshot => true,
143
- :css_selectors_enabled => true
123
+ browser_name: 'phantomjs',
124
+ javascript_enabled: true,
125
+ takes_screenshot: true,
126
+ css_selectors_enabled: true
144
127
  }.merge(opts))
145
128
  end
146
129
 
147
130
  def safari(opts = {})
148
131
  new({
149
- :browser_name => "safari",
150
- :platform => :mac,
151
- :javascript_enabled => true,
152
- :takes_screenshot => true,
153
- :css_selectors_enabled => true
132
+ browser_name: 'safari',
133
+ platform: :mac,
134
+ javascript_enabled: true,
135
+ takes_screenshot: true,
136
+ css_selectors_enabled: true
154
137
  }.merge(opts))
155
138
  end
156
139
 
@@ -162,15 +145,15 @@ module Selenium
162
145
  data = data.dup
163
146
 
164
147
  caps = new
165
- caps.browser_name = data.delete("browserName")
166
- caps.version = data.delete("version")
167
- caps.platform = data.delete("platform").downcase.to_sym if data.has_key?('platform')
168
- caps.javascript_enabled = data.delete("javascriptEnabled")
169
- caps.css_selectors_enabled = data.delete("cssSelectorsEnabled")
170
- caps.takes_screenshot = data.delete("takesScreenshot")
171
- caps.native_events = data.delete("nativeEvents")
172
- caps.rotatable = data.delete("rotatable")
173
- caps.proxy = Proxy.json_create(data['proxy']) if data.has_key?('proxy')
148
+ caps.browser_name = data.delete('browserName')
149
+ caps.version = data.delete('version')
150
+ caps.platform = data.delete('platform').downcase.tr(' ', '_').to_sym if data.key?('platform')
151
+ caps.javascript_enabled = data.delete('javascriptEnabled')
152
+ caps.css_selectors_enabled = data.delete('cssSelectorsEnabled')
153
+ caps.takes_screenshot = data.delete('takesScreenshot')
154
+ caps.native_events = data.delete('nativeEvents')
155
+ caps.rotatable = data.delete('rotatable')
156
+ caps.proxy = Proxy.json_create(data['proxy']) if data.key?('proxy') && !data['proxy'].empty?
174
157
 
175
158
  # any remaining pairs will be added as is, with no conversion
176
159
  caps.merge!(data)
@@ -179,6 +162,7 @@ module Selenium
179
162
  end
180
163
  end
181
164
 
165
+ #
182
166
  # @option :browser_name [String] required browser name
183
167
  # @option :version [String] required browser version number
184
168
  # @option :platform [Symbol] one of :any, :win, :mac, or :x
@@ -213,12 +197,12 @@ module Selenium
213
197
  end
214
198
 
215
199
  def merge!(other)
216
- if other.respond_to?(:capabilities, true) && other.capabilities.kind_of?(Hash)
200
+ if other.respond_to?(:capabilities, true) && other.capabilities.is_a?(Hash)
217
201
  @capabilities.merge! other.capabilities
218
- elsif other.kind_of? Hash
202
+ elsif other.is_a? Hash
219
203
  @capabilities.merge! other
220
204
  else
221
- raise ArgumentError, "argument should be a Hash or implement #capabilities"
205
+ raise ArgumentError, 'argument should be a Hash or implement #capabilities'
222
206
  end
223
207
  end
224
208
 
@@ -233,10 +217,11 @@ module Selenium
233
217
  end
234
218
  end
235
219
 
220
+ #
236
221
  # @api private
237
222
  #
238
223
 
239
- def as_json(opts = nil)
224
+ def as_json(*)
240
225
  hash = {}
241
226
 
242
227
  @capabilities.each do |key, value|
@@ -259,28 +244,25 @@ module Selenium
259
244
  hash
260
245
  end
261
246
 
262
- def to_json(*args)
247
+ def to_json(*)
263
248
  JSON.generate as_json
264
249
  end
265
250
 
266
251
  def ==(other)
267
- return false unless other.kind_of? self.class
252
+ return false unless other.is_a? self.class
268
253
  as_json == other.as_json
269
254
  end
270
255
  alias_method :eql?, :==
271
256
 
272
257
  protected
273
258
 
274
- def capabilities
275
- @capabilities
276
- end
259
+ attr_reader :capabilities
277
260
 
278
261
  private
279
262
 
280
263
  def camel_case(str)
281
- str.gsub(/_([a-z])/) { $1.upcase }
264
+ str.gsub(/_([a-z])/) { Regexp.last_match(1).upcase }
282
265
  end
283
-
284
266
  end # Capabilities
285
267
  end # Remote
286
268
  end # WebDriver
@@ -0,0 +1,49 @@
1
+ # Licensed to the Software Freedom Conservancy (SFC) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The SFC licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ module Selenium
19
+ module WebDriver
20
+ module Remote
21
+
22
+ #
23
+ # Driver implementation for remote server.
24
+ # @api private
25
+ #
26
+
27
+ class Driver < WebDriver::Driver
28
+ include DriverExtensions::UploadsFiles
29
+ include DriverExtensions::TakesScreenshot
30
+ include DriverExtensions::HasSessionId
31
+ include DriverExtensions::Rotatable
32
+ include DriverExtensions::HasRemoteStatus
33
+ include DriverExtensions::HasWebStorage
34
+
35
+ def initialize(opts = {})
36
+ listener = opts.delete(:listener)
37
+ @bridge = Bridge.handshake(opts)
38
+ if @bridge.dialect == :oss
39
+ extend DriverExtensions::HasTouchScreen
40
+ extend DriverExtensions::HasLocation
41
+ extend DriverExtensions::HasNetworkConnection
42
+ end
43
+ super(@bridge, listener: listener)
44
+ end
45
+
46
+ end # Driver
47
+ end # Remote
48
+ end # WebDriver
49
+ end # Selenium
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -23,8 +21,8 @@ module Selenium
23
21
  module Http
24
22
  class Common
25
23
  MAX_REDIRECTS = 20 # same as chromium/gecko
26
- CONTENT_TYPE = "application/json"
27
- DEFAULT_HEADERS = { "Accept" => CONTENT_TYPE }
24
+ CONTENT_TYPE = 'application/json'.freeze
25
+ DEFAULT_HEADERS = {'Accept' => CONTENT_TYPE}.freeze
28
26
 
29
27
  attr_accessor :timeout
30
28
  attr_writer :server_url
@@ -33,27 +31,29 @@ module Selenium
33
31
  @timeout = nil
34
32
  end
35
33
 
34
+ def quit_errors
35
+ [IOError]
36
+ end
37
+
36
38
  def close
37
39
  # hook for subclasses - will be called on Driver#quit
38
40
  end
39
41
 
40
42
  def call(verb, url, command_hash)
41
- url = server_url.merge(url) unless url.kind_of?(URI)
43
+ url = server_url.merge(url) unless url.is_a?(URI)
42
44
  headers = DEFAULT_HEADERS.dup
43
- headers['Cache-Control'] = "no-cache" if verb == :get
45
+ headers['Cache-Control'] = 'no-cache' if verb == :get
44
46
 
45
47
  if command_hash
46
48
  payload = JSON.generate(command_hash)
47
- headers["Content-Type"] = "#{CONTENT_TYPE}; charset=utf-8"
48
- headers["Content-Length"] = payload.bytesize.to_s if [:post, :put].include?(verb)
49
+ headers['Content-Type'] = "#{CONTENT_TYPE}; charset=utf-8"
50
+ headers['Content-Length'] = payload.bytesize.to_s if [:post, :put].include?(verb)
49
51
 
50
- if $DEBUG
51
- puts " >>> #{url} | #{payload}"
52
- puts " > #{headers.inspect}"
53
- end
52
+ WebDriver.logger.info(" >>> #{url} | #{payload}")
53
+ WebDriver.logger.debug(" > #{headers.inspect}")
54
54
  elsif verb == :post
55
- payload = "{}"
56
- headers["Content-Length"] = "2"
55
+ payload = '{}'
56
+ headers['Content-Length'] = '2'
57
57
  end
58
58
 
59
59
  request verb, url, headers, payload
@@ -62,16 +62,19 @@ module Selenium
62
62
  private
63
63
 
64
64
  def server_url
65
- @server_url or raise Error::WebDriverError, "server_url not set"
65
+ return @server_url if @server_url
66
+ raise Error::WebDriverError, 'server_url not set'
66
67
  end
67
68
 
68
- def request(verb, url, headers, payload)
69
- raise NotImplementedError, "subclass responsibility"
69
+ def request(*)
70
+ raise NotImplementedError, 'subclass responsibility'
70
71
  end
71
72
 
72
73
  def create_response(code, body, content_type)
73
- code, body, content_type = code.to_i, body.to_s.strip, content_type.to_s
74
- puts "<- #{body}\n" if $DEBUG
74
+ code = code.to_i
75
+ body = body.to_s.strip
76
+ content_type = content_type.to_s
77
+ WebDriver.logger.info("<- #{body}")
75
78
 
76
79
  if content_type.include? CONTENT_TYPE
77
80
  raise Error::WebDriverError, "empty body: #{content_type.inspect} (#{code})\n#{body}" if body.empty?
@@ -85,7 +88,6 @@ module Selenium
85
88
  raise Error::WebDriverError, msg
86
89
  end
87
90
  end
88
-
89
91
  end # Common
90
92
  end # Http
91
93
  end # Remote
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
2
  # or more contributor license agreements. See the NOTICE file
5
3
  # distributed with this work for additional information
@@ -23,11 +21,7 @@ module Selenium
23
21
  module WebDriver
24
22
  module Remote
25
23
 
26
- # added for rescue
27
- Bridge::QUIT_ERRORS << Curl::Err::RecvError
28
-
29
24
  module Http
30
-
31
25
  #
32
26
  # An alternative to the default Net::HTTP client.
33
27
  #
@@ -43,14 +37,18 @@ module Selenium
43
37
 
44
38
  class Curb < Common
45
39
 
40
+ def quit_errors
41
+ [Curl::Err::RecvError] + super
42
+ end
43
+
46
44
  private
47
45
 
48
46
  def request(verb, url, headers, payload)
49
- client.url = url.to_s
47
+ client.url = url.to_s
50
48
 
51
49
  # workaround for http://github.com/taf2/curb/issues/issue/40
52
50
  # curb will handle this for us anyway
53
- headers.delete "Content-Length"
51
+ headers.delete 'Content-Length'
54
52
 
55
53
  client.headers = headers
56
54
 
@@ -62,10 +60,10 @@ module Selenium
62
60
  when :get
63
61
  client.http_get
64
62
  when :post
65
- client.post_body = payload || ""
63
+ client.post_body = payload || ''
66
64
  client.http_post
67
65
  when :put
68
- client.put_data = payload || ""
66
+ client.put_data = payload || ''
69
67
  client.http_put
70
68
  when :delete
71
69
  client.http_delete
@@ -85,12 +83,11 @@ module Selenium
85
83
  c.max_redirects = MAX_REDIRECTS
86
84
  c.follow_location = true
87
85
  c.timeout = @timeout if @timeout
88
- c.verbose = !!$DEBUG
86
+ c.verbose = WebDriver.logger.info?
89
87
 
90
88
  c
91
89
  )
92
90
  end
93
-
94
91
  end # Curb
95
92
  end # Http
96
93
  end # Remote