selenium-webdriver 3.142.7 → 4.0.0.alpha1

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +21 -43
  3. data/lib/selenium/webdriver.rb +2 -4
  4. data/lib/selenium/webdriver/chrome/bridge.rb +3 -21
  5. data/lib/selenium/webdriver/chrome/driver.rb +12 -39
  6. data/lib/selenium/webdriver/chrome/options.rb +3 -7
  7. data/lib/selenium/webdriver/chrome/profile.rb +2 -2
  8. data/lib/selenium/webdriver/chrome/service.rb +4 -9
  9. data/lib/selenium/webdriver/common.rb +7 -16
  10. data/lib/selenium/webdriver/common/action_builder.rb +97 -249
  11. data/lib/selenium/webdriver/common/driver.rb +2 -4
  12. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +1 -1
  13. data/lib/selenium/webdriver/common/element.rb +3 -6
  14. data/lib/selenium/webdriver/common/error.rb +27 -203
  15. data/lib/selenium/webdriver/common/interactions/key_actions.rb +5 -5
  16. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +13 -13
  17. data/lib/selenium/webdriver/common/manager.rb +1 -1
  18. data/lib/selenium/webdriver/common/options.rb +148 -24
  19. data/lib/selenium/webdriver/common/service.rb +16 -34
  20. data/lib/selenium/webdriver/common/socket_poller.rb +2 -2
  21. data/lib/selenium/webdriver/common/w3c_options.rb +45 -0
  22. data/lib/selenium/webdriver/edge.rb +0 -1
  23. data/lib/selenium/webdriver/edge/driver.rb +14 -10
  24. data/lib/selenium/webdriver/edge/service.rb +6 -7
  25. data/lib/selenium/webdriver/firefox.rb +2 -6
  26. data/lib/selenium/webdriver/firefox/binary.rb +3 -80
  27. data/lib/selenium/webdriver/firefox/bridge.rb +47 -0
  28. data/lib/selenium/webdriver/firefox/driver.rb +44 -22
  29. data/lib/selenium/webdriver/firefox/marionette/driver.rb +1 -1
  30. data/lib/selenium/webdriver/firefox/options.rb +2 -2
  31. data/lib/selenium/webdriver/firefox/profile.rb +25 -14
  32. data/lib/selenium/webdriver/firefox/service.rb +4 -4
  33. data/lib/selenium/webdriver/ie/driver.rb +5 -18
  34. data/lib/selenium/webdriver/ie/options.rb +2 -2
  35. data/lib/selenium/webdriver/ie/service.rb +4 -4
  36. data/lib/selenium/webdriver/remote.rb +2 -6
  37. data/lib/selenium/webdriver/remote/bridge.rb +515 -69
  38. data/lib/selenium/webdriver/remote/capabilities.rb +77 -99
  39. data/lib/selenium/webdriver/remote/commands.rb +156 -0
  40. data/lib/selenium/webdriver/remote/driver.rb +12 -5
  41. data/lib/selenium/webdriver/remote/http/default.rb +0 -9
  42. data/lib/selenium/webdriver/remote/response.rb +16 -47
  43. data/lib/selenium/webdriver/safari.rb +1 -1
  44. data/lib/selenium/webdriver/safari/bridge.rb +3 -3
  45. data/lib/selenium/webdriver/safari/driver.rb +4 -1
  46. data/lib/selenium/webdriver/safari/service.rb +4 -4
  47. data/lib/selenium/webdriver/support/select.rb +1 -1
  48. data/lib/selenium/webdriver/version.rb +1 -1
  49. data/selenium-webdriver.gemspec +3 -3
  50. metadata +14 -5
@@ -41,15 +41,6 @@ module Selenium
41
41
  @read_timeout = read_timeout
42
42
  end
43
43
 
44
- # Maintaining backward compatibility.
45
- # @param [Numeric] value - Timeout in seconds to apply to both open timeout and read timeouts.
46
- # @deprecated Please set the specific desired timeout {#read_timeout} or {#open_timeout} directly.
47
- def timeout=(value)
48
- WebDriver.logger.deprecate ':timeout=', '#read_timeout= and #open_timeout='
49
- self.open_timeout = value
50
- self.read_timeout = value
51
- end
52
-
53
44
  def close
54
45
  @http&.finish
55
46
  end
@@ -20,12 +20,13 @@
20
20
  module Selenium
21
21
  module WebDriver
22
22
  module Remote
23
+
24
+ #
23
25
  # @api private
24
- class Response
25
- STACKTRACE_KEY = 'stackTrace'
26
+ #
26
27
 
28
+ class Response
27
29
  attr_reader :code, :payload
28
- attr_writer :payload
29
30
 
30
31
  def initialize(code, payload = nil)
31
32
  @code = code
@@ -35,33 +36,16 @@ module Selenium
35
36
  end
36
37
 
37
38
  def error
38
- klass = Error.for_code(status) || return
39
+ error, message, backtrace = process_error
40
+ klass = Error.for_error(error) || return
39
41
 
40
- ex = klass.new(error_message)
42
+ ex = klass.new(message)
41
43
  ex.set_backtrace(caller)
42
- add_backtrace ex
44
+ add_backtrace ex, backtrace
43
45
 
44
46
  ex
45
47
  end
46
48
 
47
- def error_message
48
- val = value
49
-
50
- case val
51
- when Hash
52
- msg = val['message']
53
- return 'unknown error' unless msg
54
-
55
- msg << ": #{val['alert']['text'].inspect}" if val['alert'].is_a?(Hash) && val['alert']['text']
56
- msg << " (#{val['class']})" if val['class']
57
- msg
58
- when String
59
- val
60
- else
61
- "unknown error, status=#{status}: #{val.inspect}"
62
- end
63
- end
64
-
65
49
  def [](key)
66
50
  @payload[key]
67
51
  end
@@ -76,14 +60,7 @@ module Selenium
76
60
  raise Error::ServerError, self
77
61
  end
78
62
 
79
- def add_backtrace(ex)
80
- return unless error_payload.is_a?(Hash)
81
-
82
- # Legacy Firefox returns String in ['value'], while we expect Hash.
83
- # Use #dig when Firefox legacy is removed (4.0).
84
- server_trace = error_payload[STACKTRACE_KEY] ||
85
- error_payload[STACKTRACE_KEY.downcase] ||
86
- (error_payload['value'] && error_payload['value'][STACKTRACE_KEY])
63
+ def add_backtrace(ex, server_trace)
87
64
  return unless server_trace
88
65
 
89
66
  backtrace = case server_trace
@@ -113,22 +90,14 @@ module Selenium
113
90
  }.compact
114
91
  end
115
92
 
116
- def error_payload
117
- # Even errors are wrapped in 'value' for w3c
118
- # Grab 'value' key for error, leave original payload alone and let the bridge process
119
- @error_payload ||= !@payload.key?('sessionId') ? @payload['value'] : @payload
120
- end
121
-
122
- def status
123
- return unless error_payload.is_a? Hash
124
-
125
- @status ||= error_payload['status'] || error_payload['error']
126
- end
127
-
128
- def value
129
- return unless error_payload.is_a? Hash
93
+ def process_error
94
+ return unless self['value'].is_a?(Hash)
130
95
 
131
- @value ||= error_payload['value'] || error_payload['message']
96
+ [
97
+ self['value']['error'],
98
+ self['value']['message'],
99
+ self['value']['stacktrace']
100
+ ]
132
101
  end
133
102
  end # Response
134
103
  end # Remote
@@ -30,7 +30,7 @@ module Selenium
30
30
  end
31
31
 
32
32
  def technology_preview!
33
- self.driver_path = technology_preview
33
+ Service.driver_path = technology_preview
34
34
  end
35
35
 
36
36
  def path=(path)
@@ -24,9 +24,9 @@ module Selenium
24
24
 
25
25
  # https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/WebDriverEndpointDoc/Commands/Commands.html
26
26
  COMMANDS = {
27
- get_permissions: [:get, 'session/:session_id/apple/permissions'],
28
- set_permissions: [:post, 'session/:session_id/apple/permissions'],
29
- attach_debugger: [:post, 'session/:session_id/apple/attach_debugger']
27
+ get_permissions: [:get, '/session/:session_id/apple/permissions'],
28
+ set_permissions: [:post, '/session/:session_id/apple/permissions'],
29
+ attach_debugger: [:post, '/session/:session_id/apple/attach_debugger']
30
30
  }.freeze
31
31
 
32
32
  def commands(command)
@@ -37,8 +37,11 @@ module Selenium
37
37
  opts[:url] ||= service_url(opts)
38
38
 
39
39
  listener = opts.delete(:listener)
40
- @bridge = Remote::Bridge.handshake(**opts)
40
+ desired_capabilities = opts.delete(:desired_capabilities)
41
+
42
+ @bridge = Remote::Bridge.new(opts)
41
43
  @bridge.extend Bridge
44
+ @bridge.create_session(desired_capabilities)
42
45
 
43
46
  super(@bridge, listener: listener)
44
47
  end
@@ -25,13 +25,13 @@ module Selenium
25
25
  #
26
26
 
27
27
  class Service < WebDriver::Service
28
- @default_port = 7050
29
- @executable = 'safaridriver'
30
- @missing_text = <<~ERROR
28
+ DEFAULT_PORT = 7050
29
+ EXECUTABLE = 'safaridriver'
30
+ MISSING_TEXT = <<~ERROR
31
31
  Unable to find Apple's safaridriver which comes with Safari 10.
32
32
  More info at https://webkit.org/blog/6900/webdriver-support-in-safari-10/
33
33
  ERROR
34
- @shutdown_supported = false
34
+ SHUTDOWN_SUPPORTED = false
35
35
  end # Service
36
36
  end # Safari
37
37
  end # WebDriver
@@ -242,7 +242,7 @@ module Selenium
242
242
  xpath = ".//option[normalize-space(.) = #{Escaper.escape text}]"
243
243
  opts = @element.find_elements(xpath: xpath)
244
244
 
245
- return opts unless opts.empty? && text =~ /\s+/
245
+ return opts unless opts.empty? && /\s+/.match?(text)
246
246
 
247
247
  longest_word = text.split(/\s+/).max_by(&:length)
248
248
  if longest_word.empty?
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- VERSION = '3.142.7'
22
+ VERSION = '4.0.0.alpha1'
23
23
  end # WebDriver
24
24
  end # Selenium
@@ -26,13 +26,13 @@ Gem::Specification.new do |s|
26
26
  }
27
27
 
28
28
  s.required_rubygems_version = Gem::Requirement.new('> 1.3.1') if s.respond_to? :required_rubygems_version=
29
- s.required_ruby_version = Gem::Requirement.new('>= 2.3')
29
+ s.required_ruby_version = Gem::Requirement.new('>= 2.4')
30
30
 
31
31
  s.files = Dir[root + '/**/*'].reject { |e| e =~ /ruby\.iml|build\.desc/ }.map { |e| e.sub(root + '/', '') }
32
32
  s.require_paths = ['lib']
33
33
 
34
- s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 4.0']
35
- s.add_runtime_dependency 'rubyzip', ['>= 1.2.2']
34
+ s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 2.0']
35
+ s.add_runtime_dependency 'rubyzip', ['~> 1.2', '>= 1.2.2']
36
36
 
37
37
  # childprocess requires ffi on windows but doesn't declare it in its dependencies
38
38
  s.add_development_dependency 'ffi'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selenium-webdriver
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.142.7
4
+ version: 4.0.0.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rodionov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-12-27 00:00:00.000000000 Z
13
+ date: 2019-05-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  requirement: !ruby/object:Gem::Requirement
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: '0.5'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '4.0'
23
+ version: '2.0'
24
24
  name: childprocess
25
25
  prerelease: false
26
26
  type: :runtime
@@ -31,10 +31,13 @@ dependencies:
31
31
  version: '0.5'
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '4.0'
34
+ version: '2.0'
35
35
  - !ruby/object:Gem::Dependency
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
38
41
  - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: 1.2.2
@@ -43,6 +46,9 @@ dependencies:
43
46
  type: :runtime
44
47
  version_requirements: !ruby/object:Gem::Requirement
45
48
  requirements:
49
+ - - "~>"
50
+ - !ruby/object:Gem::Version
51
+ version: '1.2'
46
52
  - - ">="
47
53
  - !ruby/object:Gem::Version
48
54
  version: 1.2.2
@@ -255,6 +261,7 @@ files:
255
261
  - lib/selenium/webdriver/common/touch_screen.rb
256
262
  - lib/selenium/webdriver/common/w3c_action_builder.rb
257
263
  - lib/selenium/webdriver/common/w3c_manager.rb
264
+ - lib/selenium/webdriver/common/w3c_options.rb
258
265
  - lib/selenium/webdriver/common/wait.rb
259
266
  - lib/selenium/webdriver/common/window.rb
260
267
  - lib/selenium/webdriver/common/zipper.rb
@@ -265,6 +272,7 @@ files:
265
272
  - lib/selenium/webdriver/edge/service.rb
266
273
  - lib/selenium/webdriver/firefox.rb
267
274
  - lib/selenium/webdriver/firefox/binary.rb
275
+ - lib/selenium/webdriver/firefox/bridge.rb
268
276
  - lib/selenium/webdriver/firefox/driver.rb
269
277
  - lib/selenium/webdriver/firefox/extension.rb
270
278
  - lib/selenium/webdriver/firefox/extension/prefs.json
@@ -287,6 +295,7 @@ files:
287
295
  - lib/selenium/webdriver/remote.rb
288
296
  - lib/selenium/webdriver/remote/bridge.rb
289
297
  - lib/selenium/webdriver/remote/capabilities.rb
298
+ - lib/selenium/webdriver/remote/commands.rb
290
299
  - lib/selenium/webdriver/remote/driver.rb
291
300
  - lib/selenium/webdriver/remote/http/common.rb
292
301
  - lib/selenium/webdriver/remote/http/curb.rb
@@ -327,7 +336,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
327
336
  requirements:
328
337
  - - ">="
329
338
  - !ruby/object:Gem::Version
330
- version: '2.3'
339
+ version: '2.4'
331
340
  required_rubygems_version: !ruby/object:Gem::Requirement
332
341
  requirements:
333
342
  - - ">"