selenium-webdriver 3.142.1 → 4.1.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 (137) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +406 -4
  3. data/Gemfile +3 -1
  4. data/LICENSE +1 -1
  5. data/NOTICE +2 -0
  6. data/README.md +4 -5
  7. data/lib/selenium/server.rb +69 -63
  8. data/lib/selenium/webdriver/atoms/findElements.js +122 -0
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +100 -7
  10. data/lib/selenium/webdriver/atoms/isDisplayed.js +76 -78
  11. data/lib/selenium/webdriver/atoms/mutationListener.js +55 -0
  12. data/lib/selenium/webdriver/chrome/driver.rb +26 -70
  13. data/lib/selenium/webdriver/chrome/features.rb +106 -0
  14. data/lib/selenium/webdriver/chrome/options.rb +128 -53
  15. data/lib/selenium/webdriver/chrome/profile.rb +8 -5
  16. data/lib/selenium/webdriver/chrome/service.rb +8 -15
  17. data/lib/selenium/webdriver/chrome.rb +10 -9
  18. data/lib/selenium/webdriver/common/action_builder.rb +97 -249
  19. data/lib/selenium/webdriver/common/driver.rb +112 -23
  20. data/lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb +43 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +51 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +89 -0
  23. data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +77 -0
  24. data/lib/selenium/webdriver/common/driver_extensions/{has_touch_screen.rb → has_cdp.rb} +10 -8
  25. data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +45 -0
  26. data/lib/selenium/webdriver/{firefox/util.rb → common/driver_extensions/has_devtools.rb} +16 -19
  27. data/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +38 -0
  28. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +5 -8
  29. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +144 -0
  30. data/lib/selenium/webdriver/common/driver_extensions/has_logs.rb +30 -0
  31. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +17 -0
  32. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +6 -27
  33. data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +136 -0
  34. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +11 -11
  35. data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +77 -0
  36. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +1 -0
  37. data/lib/selenium/webdriver/common/driver_extensions/{rotatable.rb → prints_page.rb} +18 -20
  38. data/lib/selenium/webdriver/common/element.rb +82 -22
  39. data/lib/selenium/webdriver/common/error.rb +32 -196
  40. data/lib/selenium/webdriver/common/interactions/interaction.rb +4 -1
  41. data/lib/selenium/webdriver/common/interactions/key_actions.rb +5 -5
  42. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +13 -13
  43. data/lib/selenium/webdriver/common/log_entry.rb +2 -2
  44. data/lib/selenium/webdriver/common/logger.rb +50 -15
  45. data/lib/selenium/webdriver/common/manager.rb +15 -15
  46. data/lib/selenium/webdriver/common/options.rb +184 -0
  47. data/lib/selenium/webdriver/common/platform.rb +6 -1
  48. data/lib/selenium/webdriver/common/port_prober.rb +4 -6
  49. data/lib/selenium/webdriver/common/profile_helper.rb +11 -9
  50. data/lib/selenium/webdriver/common/proxy.rb +6 -3
  51. data/lib/selenium/webdriver/common/search_context.rb +7 -3
  52. data/lib/selenium/webdriver/common/service.rb +27 -122
  53. data/lib/selenium/webdriver/common/service_manager.rb +151 -0
  54. data/lib/selenium/webdriver/common/shadow_root.rb +87 -0
  55. data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
  56. data/lib/selenium/webdriver/common/socket_poller.rb +2 -2
  57. data/lib/selenium/webdriver/common/takes_screenshot.rb +66 -0
  58. data/lib/selenium/webdriver/common/target_locator.rb +32 -4
  59. data/lib/selenium/webdriver/common/timeouts.rb +31 -4
  60. data/lib/selenium/webdriver/common/wait.rb +1 -1
  61. data/lib/selenium/webdriver/common/window.rb +0 -4
  62. data/lib/selenium/webdriver/common/zipper.rb +3 -9
  63. data/lib/selenium/webdriver/common.rb +24 -17
  64. data/lib/selenium/webdriver/devtools/console_event.rb +38 -0
  65. data/lib/selenium/webdriver/devtools/exception_event.rb +36 -0
  66. data/lib/selenium/webdriver/devtools/mutation_event.rb +37 -0
  67. data/lib/selenium/webdriver/devtools/pinned_script.rb +59 -0
  68. data/lib/selenium/webdriver/devtools/request.rb +67 -0
  69. data/lib/selenium/webdriver/devtools/response.rb +66 -0
  70. data/lib/selenium/webdriver/devtools.rb +193 -0
  71. data/lib/selenium/webdriver/edge/driver.rb +7 -29
  72. data/lib/selenium/webdriver/{chrome/bridge.rb → edge/features.rb} +16 -22
  73. data/lib/selenium/webdriver/edge/options.rb +11 -48
  74. data/lib/selenium/webdriver/{common/w3c_manager.rb → edge/profile.rb} +7 -19
  75. data/lib/selenium/webdriver/edge/service.rb +10 -26
  76. data/lib/selenium/webdriver/edge.rb +11 -14
  77. data/lib/selenium/webdriver/firefox/driver.rb +31 -19
  78. data/lib/selenium/webdriver/firefox/extension.rb +8 -0
  79. data/lib/selenium/webdriver/firefox/{bridge.rb → features.rb} +23 -4
  80. data/lib/selenium/webdriver/firefox/options.rb +71 -50
  81. data/lib/selenium/webdriver/firefox/profile.rb +21 -71
  82. data/lib/selenium/webdriver/firefox/service.rb +5 -9
  83. data/lib/selenium/webdriver/firefox.rb +22 -20
  84. data/lib/selenium/webdriver/ie/driver.rb +1 -47
  85. data/lib/selenium/webdriver/ie/options.rb +15 -46
  86. data/lib/selenium/webdriver/ie/service.rb +13 -15
  87. data/lib/selenium/webdriver/ie.rb +8 -7
  88. data/lib/selenium/webdriver/remote/bridge.rb +561 -86
  89. data/lib/selenium/webdriver/remote/capabilities.rb +159 -123
  90. data/lib/selenium/webdriver/remote/commands.rb +7 -0
  91. data/lib/selenium/webdriver/remote/driver.rb +22 -12
  92. data/lib/selenium/webdriver/remote/http/common.rb +0 -5
  93. data/lib/selenium/webdriver/remote/http/default.rb +17 -20
  94. data/lib/selenium/webdriver/remote/http/persistent.rb +11 -6
  95. data/lib/selenium/webdriver/remote/response.rb +16 -47
  96. data/lib/selenium/webdriver/remote.rb +15 -12
  97. data/lib/selenium/webdriver/safari/driver.rb +3 -31
  98. data/lib/selenium/webdriver/safari/{bridge.rb → features.rb} +6 -6
  99. data/lib/selenium/webdriver/safari/options.rb +10 -29
  100. data/lib/selenium/webdriver/safari/service.rb +4 -8
  101. data/lib/selenium/webdriver/safari.rb +17 -9
  102. data/lib/selenium/webdriver/support/block_event_listener.rb +1 -1
  103. data/lib/selenium/webdriver/support/cdp/domain.rb.erb +63 -0
  104. data/lib/selenium/webdriver/support/cdp_client_generator.rb +108 -0
  105. data/lib/selenium/webdriver/support/color.rb +2 -2
  106. data/lib/selenium/webdriver/support/event_firing_bridge.rb +4 -4
  107. data/lib/selenium/webdriver/support/guards/guard.rb +89 -0
  108. data/lib/selenium/webdriver/{firefox/marionette/bridge.rb → support/guards/guard_condition.rb} +22 -19
  109. data/lib/selenium/webdriver/support/guards.rb +95 -0
  110. data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
  111. data/lib/selenium/webdriver/support/select.rb +3 -3
  112. data/lib/selenium/webdriver/support.rb +1 -0
  113. data/lib/selenium/webdriver/version.rb +1 -1
  114. data/lib/selenium/webdriver.rb +13 -13
  115. data/selenium-webdriver.gemspec +29 -13
  116. metadata +125 -73
  117. data/lib/selenium/webdriver/common/bridge_helper.rb +0 -82
  118. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +0 -64
  119. data/lib/selenium/webdriver/common/keyboard.rb +0 -70
  120. data/lib/selenium/webdriver/common/mouse.rb +0 -89
  121. data/lib/selenium/webdriver/common/touch_action_builder.rb +0 -78
  122. data/lib/selenium/webdriver/common/touch_screen.rb +0 -123
  123. data/lib/selenium/webdriver/common/w3c_action_builder.rb +0 -212
  124. data/lib/selenium/webdriver/edge/bridge.rb +0 -76
  125. data/lib/selenium/webdriver/firefox/binary.rb +0 -187
  126. data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
  127. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  128. data/lib/selenium/webdriver/firefox/launcher.rb +0 -111
  129. data/lib/selenium/webdriver/firefox/legacy/driver.rb +0 -83
  130. data/lib/selenium/webdriver/firefox/marionette/driver.rb +0 -90
  131. data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
  132. data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
  133. data/lib/selenium/webdriver/remote/oss/bridge.rb +0 -594
  134. data/lib/selenium/webdriver/remote/oss/commands.rb +0 -223
  135. data/lib/selenium/webdriver/remote/w3c/bridge.rb +0 -605
  136. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +0 -310
  137. data/lib/selenium/webdriver/remote/w3c/commands.rb +0 -157
@@ -19,31 +19,34 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- module Firefox
23
- module Marionette
24
- module Bridge
22
+ module Support
23
+ class Guards
25
24
 
26
- COMMANDS = {
27
- install_addon: [:post, 'session/:session_id/moz/addon/install'],
28
- uninstall_addon: [:post, 'session/:session_id/moz/addon/uninstall']
29
- }.freeze
25
+ #
26
+ # Guard derived from RSpec example metadata.
27
+ # @api private
28
+ #
30
29
 
31
- def commands(command)
32
- COMMANDS[command] || super
33
- end
30
+ class GuardCondition
31
+ attr_accessor :name, :execution
34
32
 
35
- def install_addon(path, temporary)
36
- payload = {path: path}
37
- payload[:temporary] = temporary unless temporary.nil?
38
- execute :install_addon, {}, payload
33
+ def initialize(name, condition = nil, &blk)
34
+ @name = name
35
+ @execution = if block_given?
36
+ proc(&blk)
37
+ else
38
+ proc { |guarded| guarded.include?(condition) }
39
+ end
39
40
  end
40
41
 
41
- def uninstall_addon(id)
42
- execute :uninstall_addon, {}, {id: id}
42
+ def satisfied?(guard)
43
+ list = Array(guard.guarded[@name])
44
+
45
+ list.empty? || @execution.call(list)
43
46
  end
44
47
 
45
- end # Bridge
46
- end # Marionette
47
- end # Firefox
48
+ end # GuardCondition
49
+ end # Guards
50
+ end # Support
48
51
  end # WebDriver
49
52
  end # Selenium
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ require_relative 'guards/guard_condition'
21
+ require_relative 'guards/guard'
22
+
23
+ module Selenium
24
+ module WebDriver
25
+ module Support
26
+ class Guards
27
+ GUARD_TYPES = %i[except only exclude exclusive].freeze
28
+
29
+ attr_reader :messages
30
+ attr_accessor :bug_tracker
31
+
32
+ def initialize(example, bug_tracker: '', conditions: nil)
33
+ @example = example
34
+ @bug_tracker = bug_tracker
35
+ @guard_conditions = conditions || []
36
+ @guards = collect_example_guards
37
+ @messages = {}
38
+ end
39
+
40
+ def add_condition(name, condition = nil, &blk)
41
+ @guard_conditions << GuardCondition.new(name, condition, &blk)
42
+ end
43
+
44
+ def add_message(name, message)
45
+ @messages[name] = message
46
+ end
47
+
48
+ def disposition
49
+ if !skipping_guard.nil?
50
+ [:skip, skipping_guard.message]
51
+ elsif !pending_guard.nil? && ENV['SKIP_PENDING']
52
+ [:skip, pending_guard.message]
53
+ elsif !pending_guard.nil?
54
+ [:pending, pending_guard.message]
55
+ end
56
+ end
57
+
58
+ def satisfied?(guard)
59
+ @guard_conditions.all? { |condition| condition.satisfied?(guard) }
60
+ end
61
+
62
+ private
63
+
64
+ def collect_example_guards
65
+ guards = []
66
+
67
+ GUARD_TYPES.each do |guard_type|
68
+ example_group = @example.metadata[:example_group]
69
+ example_guards = [@example.metadata[guard_type], example_group[guard_type]]
70
+ while example_group[:parent_example_group]
71
+ example_group = example_group[:parent_example_group]
72
+ example_guards << example_group[guard_type]
73
+ end
74
+
75
+ example_guards.flatten.uniq.compact.each do |example_guard|
76
+ guards << Guard.new(example_guard, guard_type, self)
77
+ end
78
+ end
79
+
80
+ guards
81
+ end
82
+
83
+ def skipping_guard
84
+ @guards.select(&:exclusive?).find { |guard| !satisfied?(guard) } ||
85
+ @guards.select(&:exclude?).find { |guard| satisfied?(guard) }
86
+ end
87
+
88
+ def pending_guard
89
+ @guards.select(&:except?).find { |guard| satisfied?(guard) } ||
90
+ @guards.select(&:only?).find { |guard| !satisfied?(guard) }
91
+ end
92
+ end # Guards
93
+ end # Support
94
+ end # WebDriver
95
+ end # Selenium
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Selenium
21
+ module WebDriver
22
+ module Support
23
+
24
+ #
25
+ # @api private
26
+ #
27
+
28
+ class RelativeLocator
29
+ KEYS = %w[above below left right near distance].freeze
30
+
31
+ def initialize(locator)
32
+ @filters, @root = locator.partition { |how, _| KEYS.include?(how) }.map(&:to_h)
33
+ end
34
+
35
+ def as_json
36
+ {
37
+ relative: {
38
+ root: @root,
39
+ filters: @filters.map do |kind, filter|
40
+ {
41
+ kind: kind,
42
+ args: [filter]
43
+ }
44
+ end
45
+ }
46
+ }
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -31,7 +31,7 @@ module Selenium
31
31
  raise ArgumentError, "unexpected tag name #{tag_name.inspect}" unless tag_name.casecmp('select').zero?
32
32
 
33
33
  @element = element
34
- @multi = ![nil, 'false'].include?(element.attribute(:multiple))
34
+ @multi = ![nil, 'false'].include?(element.dom_attribute(:multiple))
35
35
  end
36
36
 
37
37
  #
@@ -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?
@@ -258,7 +258,7 @@ module Selenium
258
258
  end
259
259
 
260
260
  def find_by_index(index)
261
- options.select { |option| option.attribute(:index) == index.to_s }
261
+ options.select { |option| option.property(:index) == index }
262
262
  end
263
263
 
264
264
  def find_by_value(value)
@@ -23,3 +23,4 @@ require 'selenium/webdriver/support/block_event_listener'
23
23
  require 'selenium/webdriver/support/escaper'
24
24
  require 'selenium/webdriver/support/select'
25
25
  require 'selenium/webdriver/support/color'
26
+ require 'selenium/webdriver/support/relative_locator'
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Selenium
21
21
  module WebDriver
22
- VERSION = '3.142.1'
22
+ VERSION = '4.1.0'
23
23
  end # WebDriver
24
24
  end # Selenium
@@ -23,9 +23,10 @@ require 'fileutils'
23
23
  require 'date'
24
24
  require 'json'
25
25
  require 'set'
26
+ require 'uri'
26
27
 
27
- require 'selenium/webdriver/common'
28
28
  require 'selenium/webdriver/atoms'
29
+ require 'selenium/webdriver/common'
29
30
  require 'selenium/webdriver/version'
30
31
 
31
32
  module Selenium
@@ -35,14 +36,14 @@ module Selenium
35
36
  Rectangle = Struct.new(:x, :y, :width, :height)
36
37
  Location = Struct.new(:latitude, :longitude, :altitude)
37
38
 
38
- autoload :Chrome, 'selenium/webdriver/chrome'
39
- autoload :Edge, 'selenium/webdriver/edge'
40
- autoload :Firefox, 'selenium/webdriver/firefox'
41
- autoload :IE, 'selenium/webdriver/ie'
42
- autoload :PhantomJS, 'selenium/webdriver/phantomjs'
43
- autoload :Remote, 'selenium/webdriver/remote'
44
- autoload :Safari, 'selenium/webdriver/safari'
45
- autoload :Support, 'selenium/webdriver/support'
39
+ autoload :Chrome, 'selenium/webdriver/chrome'
40
+ autoload :DevTools, 'selenium/webdriver/devtools'
41
+ autoload :Edge, 'selenium/webdriver/edge'
42
+ autoload :Firefox, 'selenium/webdriver/firefox'
43
+ autoload :IE, 'selenium/webdriver/ie'
44
+ autoload :Remote, 'selenium/webdriver/remote'
45
+ autoload :Safari, 'selenium/webdriver/safari'
46
+ autoload :Support, 'selenium/webdriver/support'
46
47
 
47
48
  # @api private
48
49
 
@@ -54,10 +55,10 @@ module Selenium
54
55
  # Create a new Driver instance with the correct bridge for the given browser
55
56
  #
56
57
  # @overload for(browser)
57
- # @param [:ie, :internet_explorer, :edge, :remote, :chrome, :firefox, :ff, :phantomjs, :safari] browser The browser to
58
+ # @param [:ie, :internet_explorer, :edge, :remote, :chrome, :firefox, :ff, :safari] browser The browser to
58
59
  # create the driver for
59
60
  # @overload for(browser, opts)
60
- # @param [:ie, :internet_explorer, :edge, :remote, :chrome, :firefox, :ff, :phantomjs, :safari] browser The browser to
61
+ # @param [:ie, :internet_explorer, :edge, :remote, :chrome, :firefox, :ff, :safari] browser The browser to
61
62
  # create the driver for
62
63
  # @param [Hash] opts Options passed to Driver.new
63
64
  #
@@ -68,14 +69,13 @@ module Selenium
68
69
  # @see Selenium::WebDriver::IE::Driver
69
70
  # @see Selenium::WebDriver::Edge::Driver
70
71
  # @see Selenium::WebDriver::Chrome::Driver
71
- # @see Selenium::WebDriver::PhantomJS::Driver
72
72
  # @see Selenium::WebDriver::Safari::Driver
73
73
  #
74
74
  # @example
75
75
  #
76
76
  # WebDriver.for :firefox, profile: 'some-profile'
77
77
  # WebDriver.for :firefox, profile: Profile.new
78
- # WebDriver.for :remote, url: "http://localhost:4444/wd/hub", desired_capabilities: caps
78
+ # WebDriver.for :remote, url: "http://localhost:4444/wd/hub", capabilities: caps
79
79
  #
80
80
  # One special argument is not passed on to the bridges, :listener.
81
81
  # You can pass a listener for this option to get notified of WebDriver events.
@@ -11,37 +11,53 @@ Gem::Specification.new do |s|
11
11
  s.version = Selenium::WebDriver::VERSION
12
12
 
13
13
  s.authors = ['Alex Rodionov', 'Titus Fortner', 'Thomas Walpole']
14
- s.email = ['p0deje@gmail.com', 'titusfortner@gmail.com', 'twalpole@gmail.com']
14
+ s.email = %w[p0deje@gmail.com titusfortner@gmail.com twalpole@gmail.com]
15
15
 
16
- s.summary = 'The next generation developer focused tool for automated testing of webapps'
17
- s.description = 'WebDriver is a tool for writing automated tests of websites. ' \
18
- 'It aims to mimic the behaviour of a real user, ' \
19
- 'and as such interacts with the HTML of the application.'
16
+ s.summary = 'Selenium is a browser automation tool for automated testing of webapps and more'
17
+ s.description = <<-DESCRIPTION
18
+ Selenium implements the W3C WebDriver protocol to automate popular browsers.
19
+ It aims to mimic the behaviour of a real user as it interacts with the application's HTML.
20
+ It's primarily intended for web application testing, but any web-based task can automated.
21
+ DESCRIPTION
20
22
 
21
23
  s.license = 'Apache-2.0'
22
- s.homepage = 'https://github.com/SeleniumHQ/selenium'
24
+ s.homepage = 'https://selenium.dev'
23
25
  s.metadata = {
24
- 'changelog_uri' => 'https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES',
25
- 'source_code_uri' => 'https://github.com/SeleniumHQ/selenium/tree/master/rb'
26
+ 'changelog_uri' => 'https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES',
27
+ 'source_code_uri' => 'https://github.com/SeleniumHQ/selenium/tree/trunk/rb'
26
28
  }
27
29
 
28
30
  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')
31
+ s.required_ruby_version = Gem::Requirement.new('>= 2.6')
32
+
33
+ s.files = [
34
+ 'CHANGES',
35
+ 'LICENSE',
36
+ 'NOTICE',
37
+ 'Gemfile',
38
+ 'README.md',
39
+ 'selenium-webdriver.gemspec',
40
+ 'lib/selenium-webdriver.rb',
41
+ 'lib/selenium/server.rb',
42
+ 'lib/selenium/webdriver.rb'
43
+ ] + Dir['lib/selenium/webdriver/**/*']
30
44
 
31
- s.files = Dir[root + '/**/*'].reject { |e| e =~ /ruby\.iml|build\.desc/ }.map { |e| e.sub(root + '/', '') }
32
45
  s.require_paths = ['lib']
33
46
 
34
- s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 2.0']
35
- s.add_runtime_dependency 'rubyzip', ['~> 1.2', '>= 1.2.2']
47
+ s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 5.0']
48
+ s.add_runtime_dependency 'rexml', ['~> 3.2', '>= 3.2.5']
49
+ s.add_runtime_dependency 'rubyzip', ['>= 1.2.2']
36
50
 
37
51
  # childprocess requires ffi on windows but doesn't declare it in its dependencies
38
52
  s.add_development_dependency 'ffi'
53
+ s.add_development_dependency 'pry', ['~> 0.14']
39
54
  s.add_development_dependency 'rack', ['~> 2.0']
40
55
  s.add_development_dependency 'rake'
41
56
  s.add_development_dependency 'rspec', ['~> 3.0']
42
- s.add_development_dependency 'rubocop', ['~> 0.67.0']
57
+ s.add_development_dependency 'rubocop', ['~> 1.8.0']
43
58
  s.add_development_dependency 'rubocop-performance'
44
59
  s.add_development_dependency 'rubocop-rspec'
45
60
  s.add_development_dependency 'webmock', ['~> 3.5']
61
+ s.add_development_dependency 'webrick', ['~> 1.7']
46
62
  s.add_development_dependency 'yard', ['~> 0.9.11']
47
63
  end