selenium-webdriver 3.142.7 → 4.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">"