webdrivers 4.6.0 → 5.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c31a9a9bcdbe92bc18be8e3175ca852ee58445a442647c0f6f1386b35edacb05
4
- data.tar.gz: c7f331a4cf2c67e8849e53185228189d11f41d5116b6e0743d09cfedbbefaa3a
3
+ metadata.gz: ea3a67076ea1a3e77e954a92642eed78d0bbcc041dfa0715ff08f911b20e2577
4
+ data.tar.gz: 0bc4ae97ff8d252e5201b79aa24f58d29e1e965948bc4f63bd1923cf84d0accd
5
5
  SHA512:
6
- metadata.gz: 82321bb84a03c26f595bb85a5907742ce4116cbe44b608a2ac27ea5c344452311151271b5eaa3bb7be4f6773fd1882d55e365531638aeed236c497557717a467
7
- data.tar.gz: 4d65d4764fd7655fce7a040abd3e6b1232c2ca54a8405c9f17ed9bb8005b9ebaf0e979a783da55a32516648fff6cb882eaea79cfc4113dddced022530de43531
6
+ metadata.gz: c6c95c4b5cc8f198f1df0715574bcf76018e976a311c51e498ef9e3b56277e1a9e45b6255ce721a22e415d546fdef1dcd2b02e864553bdbb1290a06ff3ad8264
7
+ data.tar.gz: d3a8876c9ee4cbe31552946e870775a9fd0aa833db5c9a8843a56ecfd85bbc92d285b9f4237de365fb8bcb1fe837afee6633c9937010442e5c6e47759899645b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # 5.3.0 (2023-07-31)
2
+ * Add support for Chrome for Testing drivers ([#237](https://github.com/titusfortner/webdrivers/issues/249), thanks sadahiro-ono)
3
+ * Support is restricted to Selenium 4.0 - 4.10 to encourage people to update to Selenium 4.11
4
+
5
+ # 5.2.0 (2022-09-29)
6
+ * `chromedriver` - Fix downloading on M1 macs from version 106.0.5249.61 ([#237](https://github.com/titusfortner/webdrivers/issues/237), thanks jmccure)
7
+
8
+ # 5.1.0 (2022-09-19)
9
+ * Improve error messages (#232, thanks dan-jensen)
10
+ * Fix circular require bug with railtie (#233, thanks amatsuda)
11
+ * Support downloading correct geckodriver on Apple silicon (#234 thanks stephannv)
12
+ * Update linux locations for Chrome to latest chromedriver finder (thanks entretechno-jeremiah)
13
+ * Add support for Microsoft Edge on Linux (#236)
14
+
15
+ # 5.0.0 (2021-10-19)
16
+ * Require Selenium 4+
17
+ * Remove custom Logger and use the one in Selenium 4
18
+
19
+ # 4.7.0 (2021-10-14)
20
+ * Add support for Selenium 4.x #218 (thanks yahonda )
21
+ * Allow Edge on Linux
22
+ * Update required Selenium > 3.141 because of a change in 4.6
23
+ * Require Ruby 2.6+
24
+ * Fix IE downloads with the change in location of assets
25
+
26
+ # 4.6.1 (2021-08-19)
27
+ * Fix bug in IEdriver caused by bad formatting in recent release
28
+
1
29
  # 4.6.0 (2021-02-26)
2
30
  * Update `Edgedriver` naming to support Selenium 4 beta (([#206](https://github.com/titusfortner/webdrivers/pull/206))
3
31
 
data/LICENSE.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2017-2019: Titus Fortner
4
- Copyright (c) 2019: Lakshya Kapoor, Thomas Walpole
3
+ Copyright (c) 2017-2023: Titus Fortner
4
+ Copyright (c) 2019-2023: Lakshya Kapoor, Thomas Walpole
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining
7
7
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -5,6 +5,30 @@
5
5
 
6
6
  Run Selenium tests more easily with automatic installation and updates for all supported webdrivers.
7
7
 
8
+ ## Update: Future of this Project
9
+
10
+ With Google's new [Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing/) project,
11
+ and Selenium's new [Selenium Manager](https://www.selenium.dev/documentation/selenium_manager/) feature,
12
+ what is required of this gem has changed.
13
+
14
+ If you can update to to the latest version of Selenium (4.11+), please do so and stop requiring this gem.
15
+ Provide feedback or raise issues to [Selenium Project](https://github.com/SeleniumHQ/selenium/issues/new/choose)
16
+
17
+ If you cannot upgrade to Selenium 4.11, Webdrivers 5.3.0 will continue to support Ruby 2.6+ and Selenium 4.0 - 4.10
18
+
19
+ If you are using an older version of webdrivers gem, and cannot upgrade, you can set
20
+ the required version of chromedriver to v114 (`Webdrivers.required_version = '114.0.5735.90'`) and
21
+ [Disable the build check](https://www.selenium.dev/documentation/webdriver/browsers/chrome/#disabling-build-check).
22
+ This is not guaranteed to continue working and will not receive bug fixes.
23
+
24
+ **Webdrivers 6.0**
25
+ To provide support for Selenium 3 and Ruby < 2.6 a 6.0 version is planned. It requires:
26
+ * Creating a `selenium-manager.gem` based off of https://github.com/SeleniumHQ/selenium/pull/12429
27
+ * Re-implementing this gem to wrap `selenium-manager.gem`
28
+ * Ensuring compatible with older versions of Selenium & Ruby
29
+
30
+ If anyone would like to help get Webdrivers 6 working, please let us know.
31
+
8
32
  ## Description
9
33
 
10
34
  `webdrivers` downloads drivers and directs Selenium to use them. Currently supports:
@@ -22,7 +46,7 @@ notes at the bottom.
22
46
  In your Gemfile:
23
47
 
24
48
  ```ruby
25
- gem 'webdrivers', '~> 4.0', require: false
49
+ gem 'webdrivers', '~> 5.0', require: false
26
50
  ```
27
51
 
28
52
  In your project:
@@ -8,7 +8,7 @@ module Webdrivers
8
8
  class << self
9
9
  def version
10
10
  version = send("#{System.platform}_version", location)
11
- raise VersionError, 'Failed to find Chrome version.' if version.nil? || version.empty?
11
+ raise VersionError, 'Failed to determine Chrome version.' if version.nil? || version.empty?
12
12
 
13
13
  Webdrivers.logger.debug "Browser version: #{version}"
14
14
  version[/\d+\.\d+\.\d+\.\d+/] # Google Chrome 73.0.3683.75 -> 73.0.3683.75
@@ -18,7 +18,7 @@ module Webdrivers
18
18
  chrome_bin = user_defined_location || send("#{System.platform}_location")
19
19
  return chrome_bin unless chrome_bin.nil?
20
20
 
21
- raise BrowserNotFound, 'Failed to find Chrome binary.'
21
+ raise BrowserNotFound, 'Failed to determine Chrome binary location.'
22
22
  end
23
23
 
24
24
  private
@@ -90,7 +90,17 @@ module Webdrivers
90
90
  def linux_location
91
91
  return wsl_location if System.wsl_v1?
92
92
 
93
- directories = %w[/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /snap/bin /opt/google/chrome]
93
+ directories = %w[
94
+ /usr/local/sbin
95
+ /usr/local/bin
96
+ /usr/sbin
97
+ /usr/bin
98
+ /sbin
99
+ /bin
100
+ /snap/bin
101
+ /opt/google/chrome
102
+ /opt/chromium.org/chromium
103
+ ]
94
104
  files = %w[google-chrome chrome chromium chromium-browser]
95
105
 
96
106
  directories.each do |dir|
@@ -63,7 +63,11 @@ module Webdrivers
63
63
  private
64
64
 
65
65
  def latest_point_release(version)
66
- normalize_version(Network.get(URI.join(base_url, "LATEST_RELEASE_#{version}")))
66
+ if version < normalize_version('115')
67
+ return normalize_version(Network.get(URI.join(base_url, "LATEST_RELEASE_#{version}")))
68
+ end
69
+
70
+ latest_patch_version(version)
67
71
  rescue NetworkError
68
72
  msg = "Unable to find latest point release version for #{version}."
69
73
  msg = begin
@@ -78,7 +82,7 @@ module Webdrivers
78
82
  end
79
83
 
80
84
  msg = "#{msg} Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` "\
81
- 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
85
+ 'to a known chromedriver version: https://chromedriver.chromium.org/downloads/version-selection'
82
86
  Webdrivers.logger.debug msg
83
87
  raise VersionError, msg
84
88
  end
@@ -97,18 +101,23 @@ module Webdrivers
97
101
  false
98
102
  end
99
103
 
100
- def download_url
101
- return @download_url if @download_url
104
+ def apple_filename(driver_version)
105
+ unless apple_m1_compatible?(driver_version)
106
+ return driver_version >= normalize_version('115') ? 'mac-x64' : 'mac64'
107
+ end
108
+
109
+ if driver_version < normalize_version('106.0.5249.61')
110
+ 'mac64_m1'
111
+ elsif driver_version < normalize_version('115')
112
+ 'mac_arm64'
113
+ else
114
+ 'mac-arm64'
115
+ end
116
+ end
102
117
 
103
- driver_version = if required_version == EMPTY_VERSION
104
- latest_version
105
- else
106
- normalize_version(required_version)
107
- end
108
- filename = driver_filename(driver_version)
109
- url = "#{base_url}/#{driver_version}/chromedriver_#{filename}.zip"
110
- Webdrivers.logger.debug "chromedriver URL: #{url}"
111
- @download_url = url
118
+ def direct_url(driver_version)
119
+ direct_url_from_api(driver_version) ||
120
+ "#{base_url}/#{driver_version}/chromedriver_#{driver_filename(driver_version)}.zip"
112
121
  end
113
122
 
114
123
  def driver_filename(driver_version)
@@ -117,8 +126,7 @@ module Webdrivers
117
126
  elsif System.platform == 'linux'
118
127
  'linux64'
119
128
  elsif System.platform == 'mac'
120
- apple_arch = apple_m1_compatible?(driver_version) ? '_m1' : ''
121
- "mac64#{apple_arch}"
129
+ apple_filename(driver_version)
122
130
  else
123
131
  raise 'Failed to determine driver filename to download for your OS.'
124
132
  end
@@ -144,6 +152,7 @@ module Webdrivers
144
152
  def browser_build_version
145
153
  normalize_version(browser_version.segments[0..2].join('.'))
146
154
  end
155
+
147
156
  alias chrome_build_version browser_build_version
148
157
 
149
158
  # Returns true if an executable driver binary exists
@@ -152,21 +161,35 @@ module Webdrivers
152
161
  super && current_version && (current_version < normalize_version('70.0.3538') ||
153
162
  current_build_version == browser_build_version)
154
163
  end
155
- end
156
- end
157
- end
158
164
 
159
- if ::Selenium::WebDriver::Service.respond_to? :driver_path=
160
- ::Selenium::WebDriver::Chrome::Service.driver_path = proc { ::Webdrivers::Chromedriver.update }
161
- else
162
- # v3.141.0 and lower
163
- module Selenium
164
- module WebDriver
165
- module Chrome
166
- def self.driver_path
167
- @driver_path ||= Webdrivers::Chromedriver.update
168
- end
165
+ def chrome_for_testing_base_url
166
+ 'https://googlechromelabs.github.io/chrome-for-testing/'
167
+ end
168
+
169
+ def latest_patch_version(driver_version)
170
+ latest_patch_version = URI.join(chrome_for_testing_base_url, 'latest-patch-versions-per-build.json')
171
+ .then { |url| Network.get(url) }
172
+ .then { |res| JSON.parse(res, symbolize_names: true) }
173
+ .then { |json| json.dig(:builds, :"#{driver_version}", :version) }
174
+ .then { |version| version ? normalize_version(version) : nil }
175
+ raise NetworkError unless latest_patch_version
176
+
177
+ latest_patch_version
178
+ end
179
+
180
+ def direct_url_from_api(driver_version)
181
+ return if normalize_version(driver_version) < normalize_version('115')
182
+
183
+ URI.join(chrome_for_testing_base_url, 'known-good-versions-with-downloads.json')
184
+ .then { |url| Network.get(url) }
185
+ .then { |res| JSON.parse(res, symbolize_names: true) }
186
+ .then { |json| json[:versions].find { |e| e[:version] == driver_version.to_s } }
187
+ .then { |json| json.dig(:downloads, :chromedriver) }
188
+ .then { |json| json.find { |e| e[:platform] == driver_filename(driver_version) } }
189
+ .then { |json| json&.dig(:url) }
169
190
  end
170
191
  end
171
192
  end
172
193
  end
194
+
195
+ ::Selenium::WebDriver::Chrome::Service.driver_path = proc { ::Webdrivers::Chromedriver.update }
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rubygems/package'
4
- require 'webdrivers/logger'
5
4
  require 'webdrivers/network'
6
5
  require 'webdrivers/system'
7
6
  require 'selenium-webdriver'
7
+ require 'webdrivers/logger'
8
8
  require 'webdrivers/version'
9
9
 
10
10
  module Webdrivers
@@ -118,12 +118,12 @@ module Webdrivers
118
118
 
119
119
  private
120
120
 
121
+ def download_version
122
+ required_version == EMPTY_VERSION ? latest_version : required_version
123
+ end
124
+
121
125
  def download_url
122
- @download_url ||= if required_version == EMPTY_VERSION
123
- downloads[downloads.keys.max]
124
- else
125
- downloads[normalize_version(required_version)]
126
- end
126
+ @download_url ||= direct_url(download_version).tap { |url| Webdrivers.logger.debug "#{file_name} URL: #{url}" }
127
127
  end
128
128
 
129
129
  def exists?
@@ -131,11 +131,7 @@ module Webdrivers
131
131
  end
132
132
 
133
133
  def correct_binary?
134
- current_version == if required_version == EMPTY_VERSION
135
- latest_version
136
- else
137
- normalize_version(required_version)
138
- end
134
+ current_version == download_version
139
135
  rescue ConnectionError, VersionError
140
136
  driver_path if sufficient_binary?
141
137
  end
@@ -69,18 +69,17 @@ module Webdrivers
69
69
  end
70
70
 
71
71
  def linux_location
72
- # directories = %w[/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /snap/bin /opt/google/chrome]
73
- # files = %w[microsoft-edge] # Based on Microsoft Edge 89.0.760.0 dev
74
- #
75
- # directories.each do |dir|
76
- # files.each do |file|
77
- # option = "#{dir}/#{file}"
78
- # return option if File.exist?(option)
79
- # end
80
- # end
81
- #
82
- # nil
83
- raise 'Default location not yet known'
72
+ directories = %w[/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /snap/bin /opt/microsoft/edge]
73
+ files = %w[microsoft-edge microsoft-edge-beta microsoft-edge-dev]
74
+
75
+ directories.each do |dir|
76
+ files.each do |file|
77
+ option = "#{dir}/#{file}"
78
+ return option if File.exist?(option)
79
+ end
80
+ end
81
+
82
+ nil
84
83
  end
85
84
 
86
85
  def win_version(location)
@@ -22,8 +22,7 @@ module Webdrivers
22
22
  #
23
23
  # @return [String]
24
24
  def base_url
25
- # 'https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/'
26
- 'https://msedgedriver.azureedge.net/'
25
+ 'https://msedgedriver.azureedge.net'
27
26
  end
28
27
 
29
28
  private
@@ -76,15 +75,11 @@ module Webdrivers
76
75
  false
77
76
  end
78
77
 
79
- # def linux_compatible?(driver_version)
80
- # System.platform == 'linux' && driver_version >= normalize_version('89.0.731.0')
81
- # end
82
-
83
78
  def driver_filename(driver_version)
84
79
  if System.platform == 'win' || System.wsl_v1?
85
80
  "win#{System.bitsize}" # 32 or 64-bit
86
- # elsif linux_compatible?(driver_version)
87
- # 'linux64'
81
+ elsif System.platform == 'linux'
82
+ 'linux64'
88
83
  elsif System.platform == 'mac'
89
84
  # Determine M1 or Intel architecture
90
85
  apple_arch = apple_m1_compatible?(driver_version) ? 'arm' : 'mac'
@@ -94,18 +89,8 @@ module Webdrivers
94
89
  end
95
90
  end
96
91
 
97
- def download_url
98
- return @download_url if @download_url
99
-
100
- driver_version = if required_version == EMPTY_VERSION
101
- latest_version
102
- else
103
- normalize_version(required_version)
104
- end
105
- filename = driver_filename(driver_version)
106
- url = "#{base_url}/#{driver_version}/edgedriver_#{filename}.zip"
107
- Webdrivers.logger.debug "msedgedriver URL: #{url}"
108
- @download_url = url
92
+ def direct_url(driver_version)
93
+ "#{base_url}/#{driver_version}/edgedriver_#{driver_filename(driver_version)}.zip"
109
94
  end
110
95
  end
111
96
  end
@@ -42,14 +42,6 @@ module Webdrivers
42
42
  System.platform == 'win' ? 'geckodriver.exe' : 'geckodriver'
43
43
  end
44
44
 
45
- def download_url
46
- @download_url ||= if required_version == EMPTY_VERSION
47
- direct_url(latest_version)
48
- else
49
- direct_url(required_version)
50
- end
51
- end
52
-
53
45
  def direct_url(version)
54
46
  "#{base_url}/download/v#{version}/geckodriver-v#{version}-#{platform_ext}"
55
47
  end
@@ -59,7 +51,7 @@ module Webdrivers
59
51
  when 'linux'
60
52
  "linux#{System.bitsize}.tar.gz"
61
53
  when 'mac'
62
- 'macos.tar.gz'
54
+ System.apple_m1_architecture? ? 'macos-aarch64.tar.gz' : 'macos.tar.gz'
63
55
  when 'win'
64
56
  "win#{System.bitsize}.zip"
65
57
  end
@@ -68,17 +60,4 @@ module Webdrivers
68
60
  end
69
61
  end
70
62
 
71
- if ::Selenium::WebDriver::Service.respond_to? :driver_path=
72
- ::Selenium::WebDriver::Firefox::Service.driver_path = proc { ::Webdrivers::Geckodriver.update }
73
- else
74
- # v3.141.0 and lower
75
- module Selenium
76
- module WebDriver
77
- module Firefox
78
- def self.driver_path
79
- @driver_path ||= Webdrivers::Geckodriver.update
80
- end
81
- end
82
- end
83
- end
84
- end
63
+ ::Selenium::WebDriver::Firefox::Service.driver_path = proc { ::Webdrivers::Geckodriver.update }
@@ -34,7 +34,7 @@ module Webdrivers
34
34
  #
35
35
  # @return [String]
36
36
  def base_url
37
- 'https://selenium-release.storage.googleapis.com/'
37
+ 'https://api.github.com/repos/seleniumhq/selenium/releases'
38
38
  end
39
39
 
40
40
  private
@@ -43,35 +43,26 @@ module Webdrivers
43
43
  'IEDriverServer.exe'
44
44
  end
45
45
 
46
+ def direct_url(version)
47
+ downloads[version]
48
+ end
49
+
46
50
  def downloads
47
51
  ds = download_manifest.each_with_object({}) do |item, hash|
48
- version = normalize_version item[/([^_]+)\.zip/, 1]
49
- hash[version] = "#{base_url}#{item}"
52
+ version = normalize_version item['name'][/\.?([^_]+)\.zip/, 1]
53
+ hash[version] = item['browser_download_url']
50
54
  end
51
55
  Webdrivers.logger.debug "Versions now located on downloads site: #{ds.keys}"
52
56
  ds
53
57
  end
54
58
 
55
59
  def download_manifest
56
- doc = Nokogiri::XML.parse(Network.get(base_url))
57
- items = doc.css('Key').collect(&:text)
58
- items.select { |item| item.include?('IEDriverServer_Win32') }
60
+ json = Network.get(base_url)
61
+ all_assets = JSON.parse(json).map { |release| release['assets'] }.flatten
62
+ all_assets.select { |asset| asset['name'].include?('IEDriverServer_Win32') }
59
63
  end
60
64
  end
61
65
  end
62
66
  end
63
67
 
64
- if ::Selenium::WebDriver::Service.respond_to? :driver_path=
65
- ::Selenium::WebDriver::IE::Service.driver_path = proc { ::Webdrivers::IEdriver.update }
66
- else
67
- # v3.141.0 and lower
68
- module Selenium
69
- module WebDriver
70
- module IE
71
- def self.driver_path
72
- @driver_path ||= Webdrivers::IEdriver.update
73
- end
74
- end
75
- end
76
- end
77
- end
68
+ ::Selenium::WebDriver::IE::Service.driver_path = proc { ::Webdrivers::IEdriver.update }
@@ -1,11 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
- require 'logger'
5
-
6
- # Code adapted from Selenium Implementation
7
- # https://github.com/SeleniumHQ/selenium/blob/master/rb/lib/selenium/webdriver/common/logger.rb
8
-
9
3
  module Webdrivers
10
4
  #
11
5
  # @example Enable full logging
@@ -18,94 +12,9 @@ module Webdrivers
18
12
  # Webdrivers.logger.info('This is info message')
19
13
  # Webdrivers.logger.warn('This is warning message')
20
14
  #
21
- class Logger
22
- extend Forwardable
23
- include ::Logger::Severity
24
-
25
- def_delegators :@logger, :debug, :debug?,
26
- :info, :info?,
27
- :warn, :warn?,
28
- :error, :error?,
29
- :fatal, :fatal?,
30
- :level
31
-
15
+ class Logger < Selenium::WebDriver::Logger
32
16
  def initialize
33
- @logger = create_logger($stdout)
34
- end
35
-
36
- def output=(io)
37
- # `Logger#reopen` was added in Ruby 2.3
38
- if @logger.respond_to?(:reopen)
39
- @logger.reopen(io)
40
- else
41
- @logger = create_logger(io)
42
- end
43
- end
44
-
45
- #
46
- # For Ruby < 2.3 compatibility
47
- # Based on https://github.com/ruby/ruby/blob/ruby_2_3/lib/logger.rb#L250
48
- #
49
-
50
- def level=(severity)
51
- if severity.is_a?(Integer)
52
- @logger.level = severity
53
- else
54
- case severity.to_s.downcase
55
- when 'debug'
56
- @logger.level = DEBUG
57
- when 'info'
58
- @logger.level = INFO
59
- when 'warn'
60
- @logger.level = WARN
61
- when 'error'
62
- @logger.level = ERROR
63
- when 'fatal'
64
- @logger.level = FATAL
65
- when 'unknown'
66
- @logger.level = UNKNOWN
67
- else
68
- raise ArgumentError, "invalid log level: #{severity}"
69
- end
70
- end
71
- end
72
-
73
- #
74
- # Returns IO object used by logger internally.
75
- #
76
- # Normally, we would have never needed it, but we want to
77
- # use it as IO object for all child processes to ensure their
78
- # output is redirected there.
79
- #
80
- # It is only used in debug level, in other cases output is suppressed.
81
- #
82
- # @api private
83
- #
84
- def io
85
- @logger.instance_variable_get(:@logdev).instance_variable_get(:@dev)
86
- end
87
-
88
- #
89
- # Marks code as deprecated with replacement.
90
- #
91
- # @param [String] old
92
- # @param [String] new
93
- #
94
- def deprecate(old, new)
95
- warn "[DEPRECATION] #{old} is deprecated. Use #{new} instead."
96
- end
97
-
98
- private
99
-
100
- def create_logger(output)
101
- logger = ::Logger.new(output)
102
- logger.progname = 'Webdrivers'
103
- logger.level = ($DEBUG ? DEBUG : WARN)
104
- logger.formatter = proc do |severity, time, progname, msg|
105
- "#{time.strftime('%F %T')} #{severity} #{progname} #{msg}\n"
106
- end
107
-
108
- logger
17
+ super('Webdrivers')
109
18
  end
110
19
  end
111
20
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'webdrivers'
4
3
  require 'rails'
5
4
 
6
5
  module Webdrivers
@@ -127,8 +127,7 @@ module Webdrivers
127
127
  Webdrivers.logger.debug "Decompressing #{filename}"
128
128
 
129
129
  Zip::File.open(filename) do |zip_file|
130
- driver = zip_file.get_entry(driver_name)
131
- f_path = File.join(Dir.pwd, driver.name)
130
+ driver, f_path = driver_and_path(zip_file, driver_name)
132
131
  delete(f_path)
133
132
  FileUtils.mkdir_p(File.dirname(f_path)) unless File.exist?(File.dirname(f_path))
134
133
  zip_file.extract(driver, f_path)
@@ -136,6 +135,18 @@ module Webdrivers
136
135
  driver_name
137
136
  end
138
137
 
138
+ def driver_and_path(zip_file, driver_name)
139
+ driver = zip_file.get_entry(driver_name)
140
+ f_path = File.join(Dir.pwd, driver.name)
141
+
142
+ [driver, f_path]
143
+ rescue Errno::ENOENT
144
+ driver = zip_file.entries.find { |e| File.basename(e.name) == driver_name }
145
+ f_path = File.join(Dir.pwd, File.basename(driver.name))
146
+
147
+ [driver, f_path]
148
+ end
149
+
139
150
  def platform
140
151
  if Selenium::WebDriver::Platform.linux?
141
152
  'linux'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Webdrivers
4
- VERSION = '4.6.0'
4
+ VERSION = '5.3.0'
5
5
  end
@@ -65,8 +65,9 @@ describe Webdrivers::Chromedriver do
65
65
  it 'raises ConnectionError when offline, and no binary exists' do
66
66
  allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
67
67
  allow(chromedriver).to receive(:exists?).and_return(false)
68
+ allow(Webdrivers::ChromeFinder).to receive(:version).and_return('115.0.5790.114')
68
69
 
69
- msg = %r{Can not reach https://chromedriver.storage.googleapis.com}
70
+ msg = %r{Can not reach https://googlechromelabs.github.io/chrome-for-testing}
70
71
  expect { chromedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
71
72
  end
72
73
  end
@@ -100,8 +101,9 @@ describe Webdrivers::Chromedriver do
100
101
 
101
102
  it 'raises ConnectionError if offline' do
102
103
  allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
104
+ chromedriver.required_version = '115.0.5790.102'
103
105
 
104
- msg = %r{Can not reach https://chromedriver.storage.googleapis.com/}
106
+ msg = %r{Can not reach https://googlechromelabs.github.io/chrome-for-testing}
105
107
  expect { chromedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
106
108
  end
107
109
  end
@@ -135,6 +137,62 @@ describe Webdrivers::Chromedriver do
135
137
  expect(chromedriver.current_version.version).to eq('72.0.3626.7')
136
138
  end
137
139
  end
140
+
141
+ context 'when using an Apple machine' do
142
+ before do
143
+ allow(Webdrivers::System).to receive(:platform).and_return('mac')
144
+ allow(Webdrivers::System).to receive(:download)
145
+ end
146
+
147
+ context 'with Intel architecture' do
148
+ it 'v114 uses correct suffix' do
149
+ allow(Webdrivers::System).to receive(:apple_m1_architecture?).and_return(false)
150
+ allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('114.0.5735.90'))
151
+ chromedriver.required_version = nil
152
+
153
+ chromedriver.update
154
+ expect(Webdrivers::System).to have_received(:download).with(end_with('_mac64.zip'), anything)
155
+ end
156
+
157
+ it 'v115 uses correct suffix' do
158
+ allow(Webdrivers::System).to receive(:apple_m1_architecture?).and_return(false)
159
+ allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('115.0.5790.102'))
160
+ chromedriver.required_version = nil
161
+
162
+ chromedriver.update
163
+ expect(Webdrivers::System).to have_received(:download).with(end_with('-mac-x64.zip'), anything)
164
+ end
165
+ end
166
+
167
+ context 'with Apple architecture' do
168
+ it 'v106.0.5249.61 uses correct suffix' do
169
+ allow(Webdrivers::System).to receive(:apple_m1_architecture?).and_return(true)
170
+ allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('106.0.5249.61'))
171
+ chromedriver.required_version = nil
172
+
173
+ chromedriver.update
174
+ expect(Webdrivers::System).to have_received(:download).with(end_with('_arm64.zip'), anything)
175
+ end
176
+
177
+ it 'less than v106.0.5249.61 uses correct suffix' do
178
+ allow(Webdrivers::System).to receive(:apple_m1_architecture?).and_return(true)
179
+ allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('106.0.5249.21'))
180
+ chromedriver.required_version = nil
181
+
182
+ chromedriver.update
183
+ expect(Webdrivers::System).to have_received(:download).with(end_with('_mac64_m1.zip'), anything)
184
+ end
185
+
186
+ it 'v115 uses correct suffix' do
187
+ allow(Webdrivers::System).to receive(:apple_m1_architecture?).and_return(true)
188
+ allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('115.0.5790.102'))
189
+ chromedriver.required_version = nil
190
+
191
+ chromedriver.update
192
+ expect(Webdrivers::System).to have_received(:download).with(end_with('-mac-arm64.zip'), anything)
193
+ end
194
+ end
195
+ end
138
196
  end
139
197
 
140
198
  describe '#current_version' do
@@ -168,11 +226,11 @@ describe Webdrivers::Chromedriver do
168
226
  end
169
227
 
170
228
  it 'raises VersionError for beta version' do
171
- allow(chromedriver).to receive(:browser_version).and_return Gem::Version.new('100.0.0')
172
- msg = 'Unable to find latest point release version for 100.0.0. '\
229
+ allow(chromedriver).to receive(:browser_version).and_return Gem::Version.new('999.0.0')
230
+ msg = 'Unable to find latest point release version for 999.0.0. '\
173
231
  'You appear to be using a non-production version of Chrome. '\
174
232
  'Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` '\
175
- 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
233
+ 'to a known chromedriver version: https://chromedriver.chromium.org/downloads/version-selection'
176
234
 
177
235
  expect { chromedriver.latest_version }.to raise_exception(Webdrivers::VersionError, msg)
178
236
  end
@@ -181,19 +239,21 @@ describe Webdrivers::Chromedriver do
181
239
  allow(chromedriver).to receive(:browser_version).and_return Gem::Version.new('72.0.9999.0000')
182
240
  msg = 'Unable to find latest point release version for 72.0.9999. '\
183
241
  'Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` '\
184
- 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
242
+ 'to a known chromedriver version: https://chromedriver.chromium.org/downloads/version-selection'
185
243
 
186
244
  expect { chromedriver.latest_version }.to raise_exception(Webdrivers::VersionError, msg)
187
245
  end
188
246
 
189
247
  it 'raises ConnectionError when offline' do
190
248
  allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
249
+ allow(Webdrivers::ChromeFinder).to receive(:version).and_return('115.0.5790.114')
191
250
 
192
- msg = %r{^Can not reach https://chromedriver.storage.googleapis.com}
251
+ msg = %r{^Can not reach https://googlechromelabs.github.io/chrome-for-testing}
193
252
  expect { chromedriver.latest_version }.to raise_error(Webdrivers::ConnectionError, msg)
194
253
  end
195
254
 
196
255
  it 'creates cached file' do
256
+ allow(chromedriver).to receive(:latest_patch_version).and_return(nil)
197
257
  allow(Webdrivers::Network).to receive(:get).and_return('71.0.3578.137')
198
258
 
199
259
  chromedriver.latest_version
@@ -224,6 +284,17 @@ describe Webdrivers::Chromedriver do
224
284
  expect(Webdrivers::Network).to have_received(:get)
225
285
  expect(Webdrivers::System).to have_received(:valid_cache?)
226
286
  end
287
+
288
+ it 'call chrome_for_testing if the browser version is greater than 115' do
289
+ allow(chromedriver).to receive(:browser_version).and_return Gem::Version.new('115.0.5790.102')
290
+ allow(Webdrivers::Network).to receive(:get).and_return(
291
+ {"builds": {'115.0.5790': {"version": '115.0.5790.102'}}}.to_json
292
+ )
293
+ uri = URI.join('https://googlechromelabs.github.io', '/chrome-for-testing/latest-patch-versions-per-build.json')
294
+
295
+ expect(chromedriver.latest_version).to eq Gem::Version.new('115.0.5790.102')
296
+ expect(Webdrivers::Network).to have_received(:get).with(uri)
297
+ end
227
298
  end
228
299
 
229
300
  describe '#required_version=' do
@@ -5,11 +5,7 @@ require 'spec_helper'
5
5
  describe Webdrivers::EdgeFinder do
6
6
  let(:edge_finder) { described_class }
7
7
 
8
- before(:all) do # rubocop:disable RSpec/BeforeAfterAll
9
- if Selenium::WebDriver::VERSION[0].to_i < 4
10
- skip "The current selenium-webdriver doesn't include Chromium based Edge support"
11
- end
12
- end
8
+ before { skip 'Edge is not yet supported on Linux' if Webdrivers::System.platform == 'linux' }
13
9
 
14
10
  context 'when the user relies on the gem to figure out the location of Edge' do
15
11
  it 'determines the location correctly based on the current OS' do
@@ -5,14 +5,10 @@ require 'spec_helper'
5
5
  describe Webdrivers::Edgedriver do
6
6
  let(:edgedriver) { described_class }
7
7
 
8
- before(:all) do # rubocop:disable RSpec/BeforeAfterAll
9
- if Selenium::WebDriver::VERSION[0].to_i < 4
10
- skip "The current selenium-webdriver doesn't include Chromium based Edge support"
11
- end
8
+ before do
9
+ edgedriver.remove
12
10
  end
13
11
 
14
- before { edgedriver.remove }
15
-
16
12
  describe '#update' do
17
13
  context 'when evaluating #correct_binary?' do
18
14
  it 'does not download when latest version and current version match' do
@@ -99,6 +95,7 @@ describe Webdrivers::Edgedriver do
99
95
  before { allow(edgedriver).to receive(:correct_binary?).and_return(false) }
100
96
 
101
97
  it 'downloads binary' do
98
+ allow(Webdrivers::EdgeFinder).to receive(:version).and_return('115.0.1901.188')
102
99
  edgedriver.update
103
100
 
104
101
  expect(edgedriver.current_version).not_to be_nil
@@ -126,19 +123,19 @@ describe Webdrivers::Edgedriver do
126
123
 
127
124
  context 'when required version is 0' do
128
125
  it 'downloads the latest version' do
129
- allow(edgedriver).to receive(:latest_version).and_return(Gem::Version.new('77.0.207.0'))
126
+ allow(edgedriver).to receive(:latest_version).and_return(Gem::Version.new('98.0.1089.1'))
130
127
  edgedriver.required_version = 0
131
128
  edgedriver.update
132
- expect(edgedriver.current_version.version).to eq('77.0.207.0')
129
+ expect(edgedriver.current_version.version).to eq('98.0.1089.1')
133
130
  end
134
131
  end
135
132
 
136
133
  context 'when required version is nil' do
137
134
  it 'downloads the latest version' do
138
- allow(edgedriver).to receive(:latest_version).and_return(Gem::Version.new('77.0.207.0'))
135
+ allow(edgedriver).to receive(:latest_version).and_return(Gem::Version.new('98.0.1089.1'))
139
136
  edgedriver.required_version = nil
140
137
  edgedriver.update
141
- expect(edgedriver.current_version.version).to eq('77.0.207.0')
138
+ expect(edgedriver.current_version.version).to eq('98.0.1089.1')
142
139
  end
143
140
  end
144
141
  end
@@ -168,21 +165,20 @@ describe Webdrivers::Edgedriver do
168
165
  end
169
166
 
170
167
  it 'raises VersionError for beta version' do
171
- allow(edgedriver).to receive(:browser_version).and_return Gem::Version.new('100.0.0')
172
- msg = 'Unable to find latest point release version for 100.0.0. '\
168
+ allow(edgedriver).to receive(:browser_version).and_return Gem::Version.new('999.0.0')
169
+ msg = 'Unable to find latest point release version for 999.0.0. '\
173
170
  'You appear to be using a non-production version of Edge. '\
174
171
  'Please set `Webdrivers::Edgedriver.required_version = <desired driver version>` '\
175
- 'to a known edgedriver version: Can not reach https://msedgedriver.azureedge.net/'
172
+ 'to a known edgedriver version: Can not reach https://msedgedriver.azureedge.net'
176
173
 
177
174
  expect { edgedriver.latest_version }.to raise_exception(Webdrivers::VersionError, msg)
178
175
  end
179
176
 
180
177
  it 'raises VersionError for unknown version' do
181
- skip "MS doesn't yet support point release latest versioning."
182
- allow(edgedriver).to receive(:browser_version).and_return('77.0.9999.0000')
178
+ allow(edgedriver).to receive(:browser_version).and_return Gem::Version.new('77.0.9999')
183
179
  msg = 'Unable to find latest point release version for 77.0.9999. '\
184
180
  'Please set `Webdrivers::Edgedriver.required_version = <desired driver version>` '\
185
- 'to a known edgedriver version: Can not reach https://msedgedriver.azureedge.net/'
181
+ 'to a known edgedriver version: Can not reach https://msedgedriver.azureedge.net'
186
182
 
187
183
  expect { edgedriver.latest_version }.to raise_exception(Webdrivers::VersionError, msg)
188
184
  end
@@ -246,6 +242,7 @@ describe Webdrivers::Edgedriver do
246
242
 
247
243
  describe '#remove' do
248
244
  it 'removes existing edgedriver' do
245
+ allow(Webdrivers::EdgeFinder).to receive(:version).and_return('115.0.1901.188')
249
246
  edgedriver.update
250
247
 
251
248
  edgedriver.remove
@@ -86,12 +86,46 @@ describe Webdrivers::Geckodriver do
86
86
  expect(Webdrivers::System).to have_received(:download).with(url, geckodriver.driver_path)
87
87
  end
88
88
 
89
- it 'does something when a wrong version is supplied' do
89
+ it 'raises error when a wrong version is supplied' do
90
90
  geckodriver.required_version = '0.2.0'
91
91
 
92
- msg = /Net::HTTPServerException: 404 "Not Found"/
92
+ msg = /404 "Not Found"/
93
93
  expect { geckodriver.update }.to raise_error(StandardError, msg)
94
94
  end
95
+
96
+ context 'when platform is Apple Sillicon' do
97
+ it 'downloads aarch64 binary' do
98
+ allow(Webdrivers::System).to receive(:platform).and_return('mac')
99
+ allow(Webdrivers::System).to receive(:apple_m1_architecture?).and_return(true)
100
+ base = 'https://github.com/mozilla/geckodriver/releases/download'
101
+ binary = 'geckodriver-v0.31.0-macos-aarch64.tar.gz'
102
+ url = "#{base}/v0.31.0/#{binary}"
103
+
104
+ allow(Webdrivers::System).to receive(:download).with(url, geckodriver.driver_path)
105
+
106
+ geckodriver.required_version = '0.31.0'
107
+ geckodriver.update
108
+
109
+ expect(Webdrivers::System).to have_received(:download).with(url, geckodriver.driver_path)
110
+ end
111
+ end
112
+
113
+ context 'when platform isn\'t Apple Sillicon' do
114
+ it 'downloads default binary' do
115
+ allow(Webdrivers::System).to receive(:platform).and_return('mac')
116
+ allow(Webdrivers::System).to receive(:apple_m1_architecture?).and_return(false)
117
+ base = 'https://github.com/mozilla/geckodriver/releases/download'
118
+ binary = 'geckodriver-v0.31.0-macos.tar.gz'
119
+ url = "#{base}/v0.31.0/#{binary}"
120
+
121
+ allow(Webdrivers::System).to receive(:download).with(url, geckodriver.driver_path)
122
+
123
+ geckodriver.required_version = '0.31.0'
124
+ geckodriver.update
125
+
126
+ expect(Webdrivers::System).to have_received(:download).with(url, geckodriver.driver_path)
127
+ end
128
+ end
95
129
  end
96
130
 
97
131
  describe '#current_version' do
@@ -192,14 +226,12 @@ You can obtain a copy of the license at https://mozilla.org/MPL/2.0/"
192
226
  end
193
227
 
194
228
  it 'uses provided value' do
195
- begin
196
- install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
197
- Webdrivers.install_dir = install_dir
229
+ install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
230
+ Webdrivers.install_dir = install_dir
198
231
 
199
- expect(Webdrivers::System.install_dir).to eq install_dir
200
- ensure
201
- Webdrivers.install_dir = nil
202
- end
232
+ expect(Webdrivers::System.install_dir).to eq install_dir
233
+ ensure
234
+ Webdrivers.install_dir = nil
203
235
  end
204
236
  end
205
237
 
@@ -6,6 +6,10 @@ describe Webdrivers::IEdriver do
6
6
  let(:iedriver) { described_class }
7
7
 
8
8
  before do
9
+ if ENV['CI'] && !Selenium::WebDriver::Platform.windows?
10
+ skip('Only run IE tests on Windows on CI because rate limiting')
11
+ end
12
+
9
13
  iedriver.remove
10
14
  iedriver.required_version = nil
11
15
  end
@@ -69,7 +73,7 @@ describe Webdrivers::IEdriver do
69
73
  it 'raises ConnectionError if offline' do
70
74
  allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
71
75
 
72
- msg = %r{Can not reach https://selenium-release.storage.googleapis.com/}
76
+ msg = %r{Can not reach https://api.github.com/repos/seleniumhq/selenium/releases}
73
77
  expect { iedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
74
78
  end
75
79
  end
@@ -109,7 +113,8 @@ describe Webdrivers::IEdriver do
109
113
  end
110
114
 
111
115
  it 'creates cached file' do
112
- allow(Webdrivers::Network).to receive(:get).and_return('3.4.0')
116
+ json = '[{"assets": [{"name":"IEDriverServer_Win32_3.150.0.zip"}]}]'
117
+ allow(Webdrivers::Network).to receive(:get).and_return(json)
113
118
 
114
119
  iedriver.latest_version
115
120
  expect(File.exist?("#{Webdrivers::System.install_dir}/IEDriverServer.version")).to eq true
@@ -174,14 +179,12 @@ describe Webdrivers::IEdriver do
174
179
  end
175
180
 
176
181
  it 'uses provided value' do
177
- begin
178
- install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
179
- Webdrivers.install_dir = install_dir
182
+ install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
183
+ Webdrivers.install_dir = install_dir
180
184
 
181
- expect(Webdrivers::System.install_dir).to eq install_dir
182
- ensure
183
- Webdrivers.install_dir = nil
184
- end
185
+ expect(Webdrivers::System.install_dir).to eq install_dir
186
+ ensure
187
+ Webdrivers.install_dir = nil
185
188
  end
186
189
  end
187
190
 
@@ -49,37 +49,31 @@ describe Webdrivers do
49
49
  end
50
50
 
51
51
  it 'uses provided value' do
52
- begin
53
- install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
54
- described_class.install_dir = install_dir
52
+ install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
53
+ described_class.install_dir = install_dir
55
54
 
56
- expect(described_class.install_dir).to eq install_dir
57
- ensure
58
- described_class.install_dir = nil
59
- end
55
+ expect(described_class.install_dir).to eq install_dir
56
+ ensure
57
+ described_class.install_dir = nil
60
58
  end
61
59
 
62
60
  context 'when ENV variable WD_INSTALL_DIR is set and Webdrivers.install_dir is not' do
63
61
  it 'uses path from the ENV variable' do
64
- begin
65
- described_class.install_dir = nil
66
- allow(ENV).to receive(:[]).with('WD_INSTALL_DIR').and_return('custom_dir')
67
- expect(described_class.install_dir).to be('custom_dir')
68
- ensure
69
- described_class.install_dir = nil
70
- end
62
+ described_class.install_dir = nil
63
+ allow(ENV).to receive(:[]).with('WD_INSTALL_DIR').and_return('custom_dir')
64
+ expect(described_class.install_dir).to be('custom_dir')
65
+ ensure
66
+ described_class.install_dir = nil
71
67
  end
72
68
  end
73
69
 
74
70
  context 'when both ENV variable WD_INSTALL_DIR and Webdrivers.install_dir are set' do
75
71
  it 'uses path from Webdrivers.install_dir' do
76
- begin
77
- described_class.install_dir = 'my_install_dir_path'
78
- allow(ENV).to receive(:[]).with('WD_INSTALL_DIR').and_return('my_env_path')
79
- expect(described_class.install_dir).to be('my_install_dir_path')
80
- ensure
81
- described_class.install_dir = nil
82
- end
72
+ described_class.install_dir = 'my_install_dir_path'
73
+ allow(ENV).to receive(:[]).with('WD_INSTALL_DIR').and_return('my_env_path')
74
+ expect(described_class.install_dir).to be('my_install_dir_path')
75
+ ensure
76
+ described_class.install_dir = nil
83
77
  end
84
78
  end
85
79
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webdrivers
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.0
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Titus Fortner
8
8
  - Lakshya Kapoor
9
9
  - Thomas Walpole
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-02-26 00:00:00.000000000 Z
13
+ date: 2023-07-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ffi
@@ -156,22 +156,22 @@ dependencies:
156
156
  name: selenium-webdriver
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - ">="
159
+ - - "~>"
160
160
  - !ruby/object:Gem::Version
161
- version: '3.0'
161
+ version: '4.0'
162
162
  - - "<"
163
163
  - !ruby/object:Gem::Version
164
- version: '4.0'
164
+ version: '4.11'
165
165
  type: :runtime
166
166
  prerelease: false
167
167
  version_requirements: !ruby/object:Gem::Requirement
168
168
  requirements:
169
- - - ">="
169
+ - - "~>"
170
170
  - !ruby/object:Gem::Version
171
- version: '3.0'
171
+ version: '4.0'
172
172
  - - "<"
173
173
  - !ruby/object:Gem::Version
174
- version: '4.0'
174
+ version: '4.11'
175
175
  description: Run Selenium tests more easily with install and updates for all supported
176
176
  webdrivers.
177
177
  email:
@@ -218,9 +218,9 @@ licenses:
218
218
  metadata:
219
219
  bug_tracker_uri: https://github.com/titusfortner/webdrivers/issues
220
220
  changelog_uri: https://github.com/titusfortner/webdrivers/blob/master/CHANGELOG.md
221
- documentation_uri: https://www.rubydoc.info/gems/webdrivers/4.6.0
222
- source_code_uri: https://github.com/titusfortner/webdrivers/tree/v4.6.0
223
- post_install_message:
221
+ documentation_uri: https://www.rubydoc.info/gems/webdrivers/5.3.0
222
+ source_code_uri: https://github.com/titusfortner/webdrivers/tree/v5.3.0
223
+ post_install_message:
224
224
  rdoc_options: []
225
225
  require_paths:
226
226
  - lib
@@ -228,25 +228,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
228
  requirements:
229
229
  - - ">="
230
230
  - !ruby/object:Gem::Version
231
- version: 2.4.0
231
+ version: 2.6.0
232
232
  required_rubygems_version: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - ">="
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
237
  requirements: []
238
- rubygems_version: 3.0.3
239
- signing_key:
238
+ rubygems_version: 3.2.33
239
+ signing_key:
240
240
  specification_version: 4
241
241
  summary: Easy download and use of browser drivers.
242
242
  test_files:
243
243
  - spec/spec_helper.rb
244
244
  - spec/webdrivers/chrome_finder_spec.rb
245
+ - spec/webdrivers/chromedriver_spec.rb
245
246
  - spec/webdrivers/edge_finder_spec.rb
246
- - spec/webdrivers/webdrivers_spec.rb
247
- - spec/webdrivers/system_spec.rb
248
247
  - spec/webdrivers/edgedriver_spec.rb
249
- - spec/webdrivers/i_edriver_spec.rb
250
248
  - spec/webdrivers/geckodriver_spec.rb
251
- - spec/webdrivers/chromedriver_spec.rb
249
+ - spec/webdrivers/i_edriver_spec.rb
250
+ - spec/webdrivers/system_spec.rb
251
+ - spec/webdrivers/webdrivers_spec.rb
252
252
  - spec/webdrivers_proxy_support_spec.rb