webdrivers 4.4.1 → 4.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 478610897cf82cc6520b2501b70eddfc75a6cb000d95ec8a451acff865956913
4
- data.tar.gz: ff8db96ce6a0c80df2e12354ace821f755272b385b76b0fa8f60819312132e53
3
+ metadata.gz: 543fb2ae13f36325fe5fc7cfd8a4c890e27d3eabdb239abbe2d816e656db9bda
4
+ data.tar.gz: f2cf830140dde3e9127e556cf46357fa6538b40425636dce02aa020000df8282
5
5
  SHA512:
6
- metadata.gz: f56a8c5f61d30f1beccf5a2094f32069fe6b7c5ace48b3f626f53ea67da172113e6324c3616337637843cdab103c9c7b3a87d15982943444cf596c79194dc977
7
- data.tar.gz: d461bec3bfaa089881e002f63c10e939cbcdfbc6edace671eb3a4bcfecc82f34298dc60d76a22363d48d3cf6f547e124f140fcbfc158e9e14eae6b3743f3e443
6
+ metadata.gz: 5dfa4804f4ec0342dd24df0ecbdddf8d2456e12037e73e72efc88b11b0e4c355159ab5bb818309195ab09c90fcf4a09ede79344b955763ca74c381b6d0cb378c
7
+ data.tar.gz: d5e802872d42a2a8929421872563457263f610cb2f536acded38d28b03ff8986f13094bd0efbdd32223d541cd1245425f57937de7ea262849985c80409f7c89f
data/CHANGELOG.md CHANGED
@@ -1,8 +1,37 @@
1
+ # 4.6.1 (2021-08-19)
2
+ * Fix bug in IEdriver caused by bad formatting in recent release
3
+
4
+ # 4.6.0 (2021-02-26)
5
+ * Update `Edgedriver` naming to support Selenium 4 beta (([#206](https://github.com/titusfortner/webdrivers/pull/206))
6
+
7
+ # 4.5.0 (2021-01-19)
8
+ * Improve format of README usage section. Thanks, [okuramasafumi](https://github.com/okuramasafumi)!
9
+ * `chromedriver` - Add support for Apple M1 specific builds ([#193](https://github.com/titusfortner/webdrivers/pull/193)). Thanks, [MichaelHoste](https://github.com/MichaelHoste)!
10
+ * `msedgedriver` - Add support for Apple M1 specific builds.
11
+ * `msedgedriver` - Added automatic selection of 32-bit vs 64-bit builds on Windows and WSLv1.
12
+ * When using this gem in WSLv2, Chrome installed on the Linux filesystem will be automatically used ([#196](https://github.com/titusfortner/webdrivers/pull/196)).
13
+ WSLv1 continues to automatically use Chrome from the Windows filesystem though. Thanks, [fabioxgn](https://github.com/fabioxgn)!
14
+ * We'll aim to make the behavior consistent in a future release.
15
+
16
+ ### 4.4.2 (2020-12-29)
17
+ * Use new powershell if available to enhance WSL support ([#176](https://github.com/titusfortner/webdrivers/issues/176),
18
+ [#186](https://github.com/titusfortner/webdrivers/pull/186)). Thanks, [G-Rath](https://github.com/G-Rath) and
19
+ [131](https://github.com/131)!
20
+ * Update rubocop version (development dependency only) ([#178](https://github.com/titusfortner/webdrivers/pull/178)).
21
+ Thanks, [utkarsh2102](https://github.com/utkarsh2102)!
22
+ * Replace `git ls-files` with `dir` in the gemspec for better Debian support ([#179](https://github.com/titusfortner/webdrivers/pull/179),
23
+ [#184](https://github.com/titusfortner/webdrivers/issues/184)).
24
+ Thanks again, [utkarsh2102](https://github.com/utkarsh2102)!
25
+ * Update README with `require: false` when adding gem to Gemfile ([#183](https://github.com/titusfortner/webdrivers/pull/183)).
26
+ * Make WSL detection more generic ([#187](https://github.com/titusfortner/webdrivers/pull/187)).
27
+ [rbclark](https://github.com/rbclark)!
28
+
1
29
  ### 4.4.1 (2020-06-01)
2
30
  * Do not include binstubs used for troubleshooting only. Fixes [#174](https://github.com/titusfortner/webdrivers/issues/174).
3
31
 
4
32
  ### 4.4.0 (2020-05-31)
5
- * Implement support for `chromedriver` in Windows Subsystem for Linux (WSL) v1 ([#172](https://github.com/titusfortner/webdrivers/issues/172)). Thanks G-Rath!
33
+ * Implement support for `chromedriver` in Windows Subsystem for Linux (WSL) v1 ([#172](https://github.com/titusfortner/webdrivers/issues/172)).
34
+ Thanks, [G-Rath](https://github.com/G-Rath)!
6
35
  * Chrome/Edgedriver - Fix [#171](https://github.com/titusfortner/webdrivers/issues/171) by making sure the cached
7
36
  driver build version matches the browser build version before using it.
8
37
  * Chrome/Edgedriver - Driver version check now matches the driver and browser `major.minor.build` versions instead of just
data/LICENSE.txt CHANGED
@@ -1,23 +1,23 @@
1
- (The MIT License)
2
-
3
- Copyright (c) 2017-2019: Titus Fortner
4
- Copyright (c) 2019: Lakshya Kapoor, Thomas Walpole
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining
7
- a copy of this software and associated documentation files (the
8
- 'Software'), to deal in the Software without restriction, including
9
- without limitation the rights to use, copy, modify, merge, publish,
10
- distribute, sublicense, and/or sell copies of the Software, and to
11
- permit persons to whom the Software is furnished to do so, subject to
12
- the following conditions:
13
-
14
- The above copyright notice and this permission notice shall be
15
- included in all copies or substantial portions of the Software.
16
-
17
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
18
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2017-2019: Titus Fortner
4
+ Copyright (c) 2019: Lakshya Kapoor, Thomas Walpole
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ 'Software'), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Webdrivers
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/webdrivers.svg)](https://badge.fury.io/rb/webdrivers)
4
- [![Build status](https://travis-ci.org/titusfortner/webdrivers.svg?branch=master)](https://travis-ci.org/titusfortner/webdrivers)
5
- [![AppVeyor status](https://ci.appveyor.com/api/projects/status/ejh90xqbvkphq4cy/branch/master?svg=true)](https://ci.appveyor.com/project/titusfortner/webdrivers/branch/master)
4
+ ![Tests](https://github.com/titusfortner/webdrivers/workflows/Tests/badge.svg)
6
5
 
7
6
  Run Selenium tests more easily with automatic installation and updates for all supported webdrivers.
8
7
 
@@ -15,13 +14,16 @@ Run Selenium tests more easily with automatic installation and updates for all s
15
14
  * [IEDriverServer](https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver)
16
15
  * [msedgedriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)
17
16
 
18
- Works on macOS, Linux, Windows, and Windows Subsystem for Linux (WSL) v1.
17
+ Works on macOS, Linux, Windows, and Windows Subsystem for Linux (WSL) v1 and v2. And do see the browser and OS specific
18
+ notes at the bottom.
19
19
 
20
20
  ## Usage
21
21
 
22
22
  In your Gemfile:
23
23
 
24
- `gem 'webdrivers', '~> 4.0'`
24
+ ```ruby
25
+ gem 'webdrivers', '~> 4.0', require: false
26
+ ```
25
27
 
26
28
  In your project:
27
29
 
@@ -194,7 +196,7 @@ The logging level can be configured for debugging purpose:
194
196
  Webdrivers.logger.level = :DEBUG
195
197
  ```
196
198
 
197
- ### Browser Specific Notes
199
+ ### Browser & OS Specific Notes
198
200
 
199
201
  #### Chrome/Chromium
200
202
 
@@ -219,7 +221,7 @@ variable.
219
221
  This is also required if Google Chrome is not installed in its
220
222
  [default location](https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver).
221
223
 
222
- ##### Heroku Users
224
+ #### Chrome on Heroku
223
225
 
224
226
  Follow the specific instructions [here](https://github.com/titusfortner/webdrivers/wiki/Heroku-buildpack-google-chrome) if you're using `heroku-buildpack-google-chrome`.
225
227
 
@@ -231,6 +233,27 @@ section apply to this browser as well.
231
233
 
232
234
  Please note that `msedgedriver` requires `selenium-webdriver` v4.
233
235
 
236
+ #### WSLv1 support
237
+
238
+ While WSLv1 is not designed to run headful applications like Chrome, it can run exes; as such when found to be running
239
+ in WSL, `webdrivers` will use Chrome on the Windows filesystem.
240
+
241
+ It's recommended that you install the new PowerShell (PS7) to avoid [a known issue](https://github.com/microsoft/terminal/issues/367)
242
+ with the console font being changed when calling the old PowerShell (PS5).
243
+
244
+ #### WSLv2 support
245
+
246
+ Webdrivers will detect WSLv2 as running on Linux and use Chrome on the Linux filesystem.
247
+
248
+ WSLv2 doesn't support connecting to host ports out of the box, so it isn't possible to connect to Chromedriver on
249
+ Windows without extra configurations, see: https://github.com/microsoft/WSL/issues/4619. The simplest way to use
250
+ Chromedriver with WSLv2 is to run Chrome headless on Linux.
251
+
252
+ #### Chrome and Edge on Apple M1 (`arm64`)
253
+
254
+ If you're switching from Intel to M1, you'll have to manually delete the existing Intel (`mac64`) driver before the
255
+ M1 (`arm64`) build can be downloaded. Otherwise, you'll get an error: `Bad CPU type in executable - ~/.webdrivers/chromedriver (Errno::E086)`
256
+
234
257
  ## Wiki
235
258
 
236
259
  Please see the [wiki](https://github.com/titusfortner/webdrivers/wiki)
@@ -88,7 +88,7 @@ module Webdrivers
88
88
  end
89
89
 
90
90
  def linux_location
91
- return wsl_location if System.wsl?
91
+ return wsl_location if System.wsl_v1?
92
92
 
93
93
  directories = %w[/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /snap/bin /opt/google/chrome]
94
94
  files = %w[google-chrome chrome chromium chromium-browser]
@@ -104,6 +104,8 @@ module Webdrivers
104
104
  end
105
105
 
106
106
  def win_version(location)
107
+ System.call("pwsh.exe -command \"(Get-ItemProperty '#{location}').VersionInfo.ProductVersion\"")&.strip
108
+ rescue StandardError
107
109
  System.call("powershell.exe \"(Get-ItemProperty '#{location}').VersionInfo.ProductVersion\"")&.strip
108
110
  end
109
111
 
@@ -112,7 +114,7 @@ module Webdrivers
112
114
  end
113
115
 
114
116
  def linux_version(location)
115
- return wsl_version(location) if System.wsl?
117
+ return wsl_version(location) if System.wsl_v1?
116
118
 
117
119
  System.call(location, '--product-version')&.strip
118
120
  end
@@ -73,36 +73,57 @@ module Webdrivers
73
73
  else
74
74
  msg
75
75
  end
76
- rescue NetworkError
77
- "#{msg} A network issue is preventing determination of latest chromedriver release."
76
+ rescue NetworkError
77
+ "#{msg} A network issue is preventing determination of latest chromedriver release."
78
78
  end
79
79
 
80
80
  msg = "#{msg} Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` "\
81
- 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
82
-
81
+ 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
83
82
  Webdrivers.logger.debug msg
84
83
  raise VersionError, msg
85
84
  end
86
85
 
87
86
  def file_name
88
- System.platform == 'win' || System.wsl? ? 'chromedriver.exe' : 'chromedriver'
87
+ System.platform == 'win' || System.wsl_v1? ? 'chromedriver.exe' : 'chromedriver'
88
+ end
89
+
90
+ def apple_m1_compatible?(driver_version)
91
+ if System.apple_m1_architecture? && driver_version >= normalize_version('87.0.4280.88')
92
+ Webdrivers.logger.debug 'chromedriver version is Apple M1 compatible.'
93
+ return true
94
+ end
95
+
96
+ Webdrivers.logger.debug 'chromedriver version is NOT Apple M1 compatible. Required >= 87.0.4280.88'
97
+ false
89
98
  end
90
99
 
91
100
  def download_url
92
101
  return @download_url if @download_url
93
102
 
94
- version = if required_version == EMPTY_VERSION
95
- latest_version
96
- else
97
- normalize_version(required_version)
98
- end
99
-
100
- file_name = System.platform == 'win' || System.wsl? ? 'win32' : "#{System.platform}64"
101
- url = "#{base_url}/#{version}/chromedriver_#{file_name}.zip"
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"
102
110
  Webdrivers.logger.debug "chromedriver URL: #{url}"
103
111
  @download_url = url
104
112
  end
105
113
 
114
+ def driver_filename(driver_version)
115
+ if System.platform == 'win' || System.wsl_v1?
116
+ 'win32'
117
+ elsif System.platform == 'linux'
118
+ 'linux64'
119
+ elsif System.platform == 'mac'
120
+ apple_arch = apple_m1_compatible?(driver_version) ? '_m1' : ''
121
+ "mac64#{apple_arch}"
122
+ else
123
+ raise 'Failed to determine driver filename to download for your OS.'
124
+ end
125
+ end
126
+
106
127
  # Returns major.minor.build version from the currently installed chromedriver version
107
128
  #
108
129
  # @example
@@ -24,15 +24,15 @@ module Webdrivers
24
24
  private
25
25
 
26
26
  def user_defined_location
27
- if Selenium::WebDriver::EdgeChrome.path
28
- Webdrivers.logger.debug "Selenium::WebDriver::EdgeChrome.path: #{Selenium::WebDriver::EdgeChrome.path}"
29
- return Selenium::WebDriver::EdgeChrome.path
27
+ if Selenium::WebDriver::Edge.path
28
+ Webdrivers.logger.debug "Selenium::WebDriver::Edge.path: #{Selenium::WebDriver::Edge.path}"
29
+ return Selenium::WebDriver::Edge.path
30
30
  end
31
31
 
32
- return if ENV['WD_EDGE_CHROME_PATH'].nil?
32
+ return if ENV['WD_EDGE_PATH'].nil?
33
33
 
34
- Webdrivers.logger.debug "WD_EDGE_CHROME_PATH: #{ENV['WD_EDGE_CHROME_PATH']}"
35
- ENV['WD_EDGE_CHROME_PATH']
34
+ Webdrivers.logger.debug "WD_EDGE_PATH: #{ENV['WD_EDGE_PATH']}"
35
+ ENV['WD_EDGE_PATH']
36
36
  end
37
37
 
38
38
  def win_location
@@ -69,6 +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
72
83
  raise 'Default location not yet known'
73
84
  end
74
85
 
@@ -26,10 +26,6 @@ module Webdrivers
26
26
  'https://msedgedriver.azureedge.net/'
27
27
  end
28
28
 
29
- def remove
30
- super
31
- end
32
-
33
29
  private
34
30
 
35
31
  def latest_point_release(version)
@@ -58,8 +54,8 @@ module Webdrivers
58
54
  else
59
55
  msg
60
56
  end
61
- rescue NetworkError
62
- "#{msg} A network issue is preventing determination of latest msedgedriver release."
57
+ rescue NetworkError
58
+ "#{msg} A network issue is preventing determination of latest msedgedriver release."
63
59
  end
64
60
 
65
61
  "#{msg} Please set `Webdrivers::Edgedriver.required_version = <desired driver version>` "\
@@ -70,17 +66,44 @@ module Webdrivers
70
66
  System.platform == 'win' ? 'msedgedriver.exe' : 'msedgedriver'
71
67
  end
72
68
 
69
+ def apple_m1_compatible?(driver_version)
70
+ if System.apple_m1_architecture? && driver_version >= normalize_version('87.0.669.0')
71
+ Webdrivers.logger.debug 'msedgedriver version is Apple M1 compatible.'
72
+ return true
73
+ end
74
+
75
+ Webdrivers.logger.debug 'msedgedriver version is NOT Apple M1 compatible. Required >= 87.0.669.0'
76
+ false
77
+ end
78
+
79
+ # def linux_compatible?(driver_version)
80
+ # System.platform == 'linux' && driver_version >= normalize_version('89.0.731.0')
81
+ # end
82
+
83
+ def driver_filename(driver_version)
84
+ if System.platform == 'win' || System.wsl_v1?
85
+ "win#{System.bitsize}" # 32 or 64-bit
86
+ # elsif linux_compatible?(driver_version)
87
+ # 'linux64'
88
+ elsif System.platform == 'mac'
89
+ # Determine M1 or Intel architecture
90
+ apple_arch = apple_m1_compatible?(driver_version) ? 'arm' : 'mac'
91
+ "#{apple_arch}64"
92
+ else
93
+ raise 'Failed to determine driver filename to download for your OS.'
94
+ end
95
+ end
96
+
73
97
  def download_url
74
98
  return @download_url if @download_url
75
99
 
76
- version = if required_version == EMPTY_VERSION
77
- latest_version
78
- else
79
- normalize_version(required_version)
80
- end
81
-
82
- file_name = System.platform == 'win' ? 'win32' : "#{System.platform}64"
83
- url = "#{base_url}/#{version}/edgedriver_#{file_name}.zip"
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"
84
107
  Webdrivers.logger.debug "msedgedriver URL: #{url}"
85
108
  @download_url = url
86
109
  end
@@ -88,19 +111,4 @@ module Webdrivers
88
111
  end
89
112
  end
90
113
 
91
- if defined? Selenium::WebDriver::EdgeChrome
92
- if ::Selenium::WebDriver::Service.respond_to? :driver_path=
93
- ::Selenium::WebDriver::EdgeChrome::Service.driver_path = proc { ::Webdrivers::Edgedriver.update }
94
- else
95
- # v3.141.0 and lower
96
- module Selenium
97
- module WebDriver
98
- module EdgeChrome
99
- def self.driver_path
100
- @driver_path ||= Webdrivers::Edgedriver.update
101
- end
102
- end
103
- end
104
- end
105
- end
106
- end
114
+ ::Selenium::WebDriver::Edge::Service.driver_path = proc { ::Webdrivers::Edgedriver.update }
@@ -44,16 +44,19 @@ module Webdrivers
44
44
  end
45
45
 
46
46
  def downloads
47
- doc = Nokogiri::XML.parse(Network.get(base_url))
48
- items = doc.css('Key').collect(&:text)
49
- items.select! { |item| item.include?('IEDriverServer_Win32') }
50
- ds = items.each_with_object({}) do |item, hash|
51
- key = normalize_version item[/([^_]+)\.zip/, 1]
52
- hash[key] = "#{base_url}#{item}"
47
+ ds = download_manifest.each_with_object({}) do |item, hash|
48
+ version = normalize_version item[/\.?([^_]+)\.zip/, 1]
49
+ hash[version] = "#{base_url}#{item}"
53
50
  end
54
51
  Webdrivers.logger.debug "Versions now located on downloads site: #{ds.keys}"
55
52
  ds
56
53
  end
54
+
55
+ 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') }
59
+ end
57
60
  end
58
61
  end
59
62
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'net/http'
4
+
3
5
  module Webdrivers
4
6
  #
5
7
  # @api private
@@ -148,8 +148,18 @@ module Webdrivers
148
148
  end
149
149
  end
150
150
 
151
+ def apple_m1_architecture?
152
+ if platform == 'mac' && RUBY_PLATFORM.include?('arm64-darwin')
153
+ Webdrivers.logger.debug 'Apple architecture: M1 (arm64-darwin)'
154
+ return true
155
+ end
156
+
157
+ Webdrivers.logger.debug 'Apple architecture: Intel (mac64)'
158
+ false
159
+ end
160
+
151
161
  # @return [TrueClass, FalseClass]
152
- def wsl?
162
+ def wsl_v1?
153
163
  platform == 'linux' && File.open('/proc/version').read.include?('Microsoft')
154
164
  end
155
165
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Webdrivers
4
- VERSION = '4.4.1'
4
+ VERSION = '4.6.1'
5
5
  end
@@ -52,7 +52,7 @@ describe Webdrivers::ChromeFinder do
52
52
  before do
53
53
  skip "The current platform cannot be WSL, as it's not Linux" unless Selenium::WebDriver::Platform.linux?
54
54
 
55
- allow(Webdrivers::System).to receive(:wsl?).and_return(true)
55
+ allow(Webdrivers::System).to receive(:wsl_v1?).and_return(true)
56
56
  allow(Webdrivers::System).to receive(:to_wsl_path).and_return('')
57
57
  allow(Webdrivers::System).to receive(:to_win32_path).and_return('')
58
58
  end
@@ -6,9 +6,7 @@ describe Webdrivers::EdgeFinder do
6
6
  let(:edge_finder) { described_class }
7
7
 
8
8
  before(:all) do # rubocop:disable RSpec/BeforeAfterAll
9
- # Skip these tests if version of selenium-webdriver being tested with doesn't
10
- # have Chromium based Edge support
11
- unless defined?(Selenium::WebDriver::EdgeChrome)
9
+ if Selenium::WebDriver::VERSION[0].to_i < 4
12
10
  skip "The current selenium-webdriver doesn't include Chromium based Edge support"
13
11
  end
14
12
  end
@@ -20,8 +18,8 @@ describe Webdrivers::EdgeFinder do
20
18
  end
21
19
 
22
20
  context 'when the user provides a path to the Edge binary' do
23
- it 'uses Selenium::WebDriver::EdgeChrome.path when it is defined' do
24
- Selenium::WebDriver::EdgeChrome.path = edge_finder.location
21
+ it 'uses Selenium::WebDriver::Edge.path when it is defined' do
22
+ Selenium::WebDriver::Edge.path = edge_finder.location
25
23
  locations = %i[win_location mac_location linux_location]
26
24
  allow(edge_finder).to receive_messages(locations)
27
25
 
@@ -29,8 +27,8 @@ describe Webdrivers::EdgeFinder do
29
27
  locations.each { |loc| expect(edge_finder).not_to have_received(loc) }
30
28
  end
31
29
 
32
- it "uses ENV['WD_EDGE_CHROME_PATH'] when it is defined" do
33
- allow(ENV).to receive(:[]).with('WD_EDGE_CHROME_PATH').and_return(edge_finder.location)
30
+ it "uses ENV['WD_EDGE_PATH'] when it is defined" do
31
+ allow(ENV).to receive(:[]).with('WD_EDGE_PATH').and_return(edge_finder.location)
34
32
  locations = %i[win_location mac_location linux_location]
35
33
  allow(edge_finder).to receive_messages(locations)
36
34
 
@@ -38,11 +36,11 @@ describe Webdrivers::EdgeFinder do
38
36
  locations.each { |loc| expect(edge_finder).not_to have_received(loc) }
39
37
  end
40
38
 
41
- it 'uses Selenium::WebDriver::EdgeChrome.path over WD_EDGE_CHROME_PATH' do
42
- Selenium::WebDriver::EdgeChrome.path = edge_finder.location
43
- allow(ENV).to receive(:[]).with('WD_EDGE_CHROME_PATH').and_return('my_wd_chrome_path')
39
+ it 'uses Selenium::WebDriver::Edge.path over WD_EDGE_PATH' do
40
+ Selenium::WebDriver::Edge.path = edge_finder.location
41
+ allow(ENV).to receive(:[]).with('WD_EDGE_PATH').and_return('my_wd_chrome_path')
44
42
  expect(edge_finder.version).not_to be_nil
45
- expect(ENV).not_to have_received(:[]).with('WD_EDGE_CHROME_PATH')
43
+ expect(ENV).not_to have_received(:[]).with('WD_EDGE_PATH')
46
44
  end
47
45
  end
48
46
 
@@ -6,9 +6,7 @@ describe Webdrivers::Edgedriver do
6
6
  let(:edgedriver) { described_class }
7
7
 
8
8
  before(:all) do # rubocop:disable RSpec/BeforeAfterAll
9
- # Skip these tests if version of selenium-webdriver being tested with doesn't
10
- # have Chromium based Edge support
11
- unless defined?(Selenium::WebDriver::EdgeChrome)
9
+ if Selenium::WebDriver::VERSION[0].to_i < 4
12
10
  skip "The current selenium-webdriver doesn't include Chromium based Edge support"
13
11
  end
14
12
  end
@@ -2,36 +2,42 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- wsl_proc_contents = [
6
- 'Linux version 4.4.0-18362-Microsoft',
7
- '(Microsoft@Microsoft.com)',
8
- '(gcc version 5.4.0 (GCC) )',
9
- '#836-Microsoft',
10
- 'Mon May 05 16:04:00 PST 2020'
11
- ].join ' '
12
-
13
5
  describe Webdrivers::System do
14
- describe '#wsl?' do
15
- context 'when the current platform is linux' do
16
- before { allow(described_class).to receive(:platform).and_return 'linux' }
6
+ describe '#wsl_v1?' do
7
+ subject { described_class.wsl_v1? }
8
+
9
+ before do
10
+ allow(described_class).to receive(:platform).and_return(platform)
11
+ allow(File).to receive(:open).with('/proc/version').and_return(StringIO.new(wsl_proc_version_contents))
12
+ end
17
13
 
18
- it 'checks /proc/version' do
19
- allow(File).to receive(:open).with('/proc/version').and_return(StringIO.new(wsl_proc_contents))
14
+ let(:platform) { 'linux' }
15
+ let(:wsl_proc_version_contents) { '' }
20
16
 
21
- expect(described_class.wsl?).to eq true
17
+ context 'when the current platform is linux and WSL version is 1' do
18
+ let(:wsl_proc_version_contents) do
19
+ 'Linux version 4.4.0-18362-Microsoft'\
20
+ '(Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) )'\
21
+ '#836-Microsoft Mon May 05 16:04:00 PST 2020'
22
22
  end
23
+
24
+ it { is_expected.to eq true }
23
25
  end
24
26
 
25
- context 'when the current platform is mac' do
26
- before { allow(described_class).to receive(:platform).and_return 'mac' }
27
+ context 'when the current platform is linux and WSL version is 2' do
28
+ let(:wsl_proc_version_contents) do
29
+ 'Linux version 4.19.84-microsoft-standard '\
30
+ '(oe-user@oe-host) (gcc version 8.2.0 (GCC)) '\
31
+ '#1 SMP Wed Nov 13 11:44:37 UTC 2019'
32
+ end
27
33
 
28
- it 'does not bother checking proc' do
29
- allow(File).to receive(:open).and_call_original
34
+ it { is_expected.to eq false }
35
+ end
30
36
 
31
- expect(described_class.wsl?).to eq false
37
+ context 'when the current platform is mac' do
38
+ let(:platform) { 'mac' }
32
39
 
33
- expect(File).not_to have_received(:open).with('/proc/version')
34
- end
40
+ it { is_expected.to eq false }
35
41
  end
36
42
  end
37
43
 
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.4.1
4
+ version: 4.6.1
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: 2020-06-02 00:00:00.000000000 Z
13
+ date: 2021-08-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ffi
@@ -60,14 +60,28 @@ dependencies:
60
60
  requirements:
61
61
  - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: '0.66'
63
+ version: '0.89'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: '0.66'
70
+ version: '0.89'
71
+ - !ruby/object:Gem::Dependency
72
+ name: rubocop-packaging
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: 0.5.0
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: 0.5.0
71
85
  - !ruby/object:Gem::Dependency
72
86
  name: rubocop-performance
73
87
  requirement: !ruby/object:Gem::Requirement
@@ -88,14 +102,14 @@ dependencies:
88
102
  requirements:
89
103
  - - "~>"
90
104
  - !ruby/object:Gem::Version
91
- version: '1.32'
105
+ version: '1.42'
92
106
  type: :development
93
107
  prerelease: false
94
108
  version_requirements: !ruby/object:Gem::Requirement
95
109
  requirements:
96
110
  - - "~>"
97
111
  - !ruby/object:Gem::Version
98
- version: '1.32'
112
+ version: '1.42'
99
113
  - !ruby/object:Gem::Dependency
100
114
  name: simplecov
101
115
  requirement: !ruby/object:Gem::Requirement
@@ -167,19 +181,9 @@ executables: []
167
181
  extensions: []
168
182
  extra_rdoc_files: []
169
183
  files:
170
- - ".github/ISSUE_TEMPLATE.md"
171
- - ".gitignore"
172
- - ".rubocop.yml"
173
- - ".travis.yml"
174
184
  - CHANGELOG.md
175
- - Gemfile
176
185
  - LICENSE.txt
177
186
  - README.md
178
- - Rakefile
179
- - appveyor.yml
180
- - bin/console
181
- - bin/setup
182
- - gemfiles/Gemfile.edge
183
187
  - lib/webdrivers.rb
184
188
  - lib/webdrivers/Rakefile
185
189
  - lib/webdrivers/chrome_finder.rb
@@ -208,18 +212,15 @@ files:
208
212
  - spec/webdrivers/system_spec.rb
209
213
  - spec/webdrivers/webdrivers_spec.rb
210
214
  - spec/webdrivers_proxy_support_spec.rb
211
- - support/install_jruby.ps1
212
- - support/install_msedge.ps1
213
- - webdrivers.gemspec
214
215
  homepage: https://github.com/titusfortner/webdrivers
215
216
  licenses:
216
217
  - MIT
217
218
  metadata:
218
219
  bug_tracker_uri: https://github.com/titusfortner/webdrivers/issues
219
220
  changelog_uri: https://github.com/titusfortner/webdrivers/blob/master/CHANGELOG.md
220
- documentation_uri: https://www.rubydoc.info/gems/webdrivers/4.4.1
221
- source_code_uri: https://github.com/titusfortner/webdrivers/tree/v4.4.1
222
- post_install_message:
221
+ documentation_uri: https://www.rubydoc.info/gems/webdrivers/4.6.1
222
+ source_code_uri: https://github.com/titusfortner/webdrivers/tree/v4.6.1
223
+ post_install_message:
223
224
  rdoc_options: []
224
225
  require_paths:
225
226
  - lib
@@ -234,8 +235,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
235
  - !ruby/object:Gem::Version
235
236
  version: '0'
236
237
  requirements: []
237
- rubygems_version: 3.1.2
238
- signing_key:
238
+ rubygems_version: 3.2.22
239
+ signing_key:
239
240
  specification_version: 4
240
241
  summary: Easy download and use of browser drivers.
241
- test_files: []
242
+ test_files:
243
+ - spec/spec_helper.rb
244
+ - spec/webdrivers/chrome_finder_spec.rb
245
+ - spec/webdrivers/chromedriver_spec.rb
246
+ - spec/webdrivers/edge_finder_spec.rb
247
+ - spec/webdrivers/edgedriver_spec.rb
248
+ - spec/webdrivers/geckodriver_spec.rb
249
+ - spec/webdrivers/i_edriver_spec.rb
250
+ - spec/webdrivers/system_spec.rb
251
+ - spec/webdrivers/webdrivers_spec.rb
252
+ - spec/webdrivers_proxy_support_spec.rb
@@ -1,16 +0,0 @@
1
- #### Summary
2
- Short summary of the bug or feature request.
3
-
4
- #### Debug Info
5
- Please provide the following information for bug reports:
6
-
7
- * Webdrivers version:
8
- * Ruby version:
9
- * Operating system / CI Environment:
10
- * Browser and version:
11
-
12
- #### Expected Behavior
13
- What you expect to happen.
14
-
15
- #### Actual Behavior
16
- What is actually happening: Error message, stack trace, DEBUG log if applicable (set `Webdrivers.logger.level = :DEBUG` after you require webdrivers)
data/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- chromedriver.log
6
- /.idea/
7
- coverage/
8
- gemfiles/Gemfile.*.lock
data/.rubocop.yml DELETED
@@ -1,96 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.4.10
3
-
4
- require:
5
- - rubocop-rspec
6
- - rubocop-performance
7
-
8
- Layout/SpaceInsideHashLiteralBraces:
9
- EnforcedStyle: no_space
10
-
11
- Layout/EndOfLine:
12
- EnforcedStyle: lf
13
-
14
- Layout/LineLength:
15
- Max: 120
16
- IgnoredPatterns:
17
- - '\s+# rubocop:disable'
18
-
19
- Layout/EmptyLinesAroundAttributeAccessor:
20
- Enabled: true
21
-
22
- Layout/SpaceAroundOperators:
23
- Enabled: true
24
-
25
- Layout/SpaceAroundMethodCallOperator:
26
- Enabled: true
27
-
28
- Lint/DeprecatedOpenSSLConstant:
29
- Enabled: true
30
-
31
- Lint/RaiseException:
32
- Enabled: true
33
-
34
- Lint/StructNewOverride:
35
- Enabled: true
36
-
37
- Lint/MixedRegexpCaptureTypes:
38
- Enabled: true
39
-
40
- Lint/ScriptPermission:
41
- Enabled: false
42
-
43
- Metrics/MethodLength:
44
- Max: 20
45
-
46
- Metrics/BlockLength:
47
- Exclude:
48
- - 'spec/**/*'
49
- - 'lib/webdrivers/tasks/*.rake'
50
- - 'webdrivers.gemspec'
51
-
52
- Metrics/ClassLength:
53
- Max: 116
54
- Exclude:
55
- - 'lib/webdrivers/system.rb'
56
-
57
- Metrics/CyclomaticComplexity:
58
- Max: 8
59
-
60
- Metrics/AbcSize:
61
- Max: 16
62
- Exclude:
63
- - 'lib/webdrivers/chromedriver.rb'
64
-
65
- Style/Documentation:
66
- Enabled: false
67
-
68
- Style/FrozenStringLiteralComment:
69
- Enabled: false
70
-
71
- Style/ExponentialNotation:
72
- Enabled: false
73
-
74
- Style/HashEachMethods:
75
- Enabled: true
76
-
77
- Style/HashTransformKeys:
78
- Enabled: false
79
-
80
- Style/HashTransformValues:
81
- Enabled: false
82
-
83
- Style/SlicingWithRange:
84
- Enabled: false
85
-
86
- Style/RedundantRegexpCharacterClass:
87
- Enabled: true
88
-
89
- Style/RedundantRegexpEscape:
90
- Enabled: false
91
-
92
- RSpec/ExampleLength:
93
- Enabled: false
94
-
95
- RSpec/MultipleExpectations:
96
- Enabled: false
data/.travis.yml DELETED
@@ -1,41 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- addons:
4
- apt:
5
- packages:
6
- - chromium-browser
7
- - libgconf-2-4
8
- chrome: stable
9
- script: bundle exec rake $RAKE_TASK
10
- before_install:
11
- - gem update --system -N
12
- - gem install bundler -N
13
- matrix:
14
- include:
15
- - rvm: 2.4
16
- env: RAKE_TASK=spec
17
- - rvm: 2.5
18
- env: RAKE_TASK=spec
19
- - rvm: 2.6
20
- env: RAKE_TASK=spec
21
- - rvm: 2.7
22
- os: osx
23
- env: RAKE_TASK=spec
24
- - rvm: 2.7
25
- env: RAKE_TASK=rubocop
26
- - rvm: jruby-9.2.11.1
27
- jdk: openjdk8
28
- env: RAKE_TASK=spec
29
- - rvm: 2.7
30
- env: RAKE_TASK=spec
31
- gemfile: gemfiles/Gemfile.edge
32
- os: osx
33
- osx_image: xcode11.3
34
- addons:
35
- chrome: stable
36
- homebrew:
37
- taps: homebrew/cask-versions
38
- casks:
39
- - microsoft-edge
40
- allow_failures:
41
- - gemfile: gemfiles/Gemfile.edge
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- # Specify your gem's dependencies in webdrivers.gemspec
6
- gemspec
data/Rakefile DELETED
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
5
- require 'rubocop/rake_task'
6
-
7
- RuboCop::RakeTask.new
8
-
9
- RSpec::Core::RakeTask.new(:spec)
10
-
11
- task default: %i[rubocop spec]
data/appveyor.yml DELETED
@@ -1,45 +0,0 @@
1
- build: off
2
- cache:
3
- - vendor/bundle
4
- image:
5
- - Visual Studio 2019
6
- environment:
7
- matrix:
8
- - RUBY_VERSION: Ruby24-x64
9
- RUBY_BIN: ruby
10
- RAKE_TASK: rubocop
11
- SCRIPT_CONTEXT: bundle exec
12
- - RUBY_VERSION: Ruby24-x64
13
- RUBY_BIN: ruby
14
- RAKE_TASK: spec
15
- SCRIPT_CONTEXT: bundle exec
16
- - RUBY_VERSION: Ruby25-x64
17
- RUBY_BIN: ruby
18
- RAKE_TASK: spec
19
- SCRIPT_CONTEXT: bundle exec
20
- - RUBY_VERSION: Ruby26-x64
21
- RUBY_BIN: ruby
22
- RAKE_TASK: spec
23
- SCRIPT_CONTEXT: bundle exec
24
- - RUBY_VERSION: jruby-9.2.11.1
25
- RUBY_BIN: jruby
26
- RAKE_TASK: spec
27
- SCRIPT_CONTEXT: jruby -G -S
28
- - RUBY_VERSION: Ruby26-x64
29
- RUBY_BIN: ruby
30
- RAKE_TASK: spec
31
- SCRIPT_CONTEXT: bundle exec
32
- BUNDLE_GEMFILE: gemfiles/Gemfile.edge
33
- install:
34
- - ps: if ($env:RUBY_BIN -eq 'jruby') { support\install_jruby.ps1 }
35
- - ps: support\install_msedge.ps1
36
- - set PATH=C:\%RUBY_VERSION%\bin;%PATH%
37
- - '%RUBY_BIN% -S gem update --system -N'
38
- - '%RUBY_BIN% -S gem install bundler -N'
39
- - '%RUBY_BIN% -S bundle install'
40
- before_test:
41
- - '%RUBY_BIN% -v'
42
- - '%RUBY_BIN% -S gem -v'
43
- - '%RUBY_BIN% -S bundle -v'
44
- test_script:
45
- - '%SCRIPT_CONTEXT% rake %RAKE_TASK%'
data/bin/console DELETED
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/setup'
5
- require 'webdrivers'
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
13
-
14
- require 'irb'
15
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- # Specify your gem's dependencies in webdrivers.gemspec
6
- gemspec path: '..'
7
- gem 'selenium-webdriver', github: 'seleniumhq/selenium', glob: 'rb/*.gemspec'
@@ -1,7 +0,0 @@
1
- $downloadLink = "https://repo1.maven.org/maven2/org/jruby/jruby-dist/9.2.11.1/jruby-dist-9.2.11.1-bin.zip"
2
- $zipPath = "c:\jruby-dist-9.2.11.1-bin.zip"
3
-
4
- Write-Host "Installing $($env:RUBY_VERSION)" -ForegroundColor cyan
5
- appveyor DownloadFile "$($downloadLink)" -FileName "$($zipPath)"
6
- 7z x "$($zipPath)" -oc:\ -y # Unzip to c:\
7
- Write-Host "JRuby installed.`n" -ForegroundColor green
@@ -1,11 +0,0 @@
1
- $downloadLink = "https://go.microsoft.com/fwlink/?linkid=2108834&Channel=Stable&language=en"
2
- $installerFile = "C:\MicrosoftEdgeSetup.exe"
3
-
4
- # Note: We're purposely skipping the -Wait flag in Start-Process.
5
- # This is because Edge auto-launches after the setup is done and
6
- # Start-Process continues to indefinitely wait on that process.
7
- Write-Host "Downloading Microsoft Edge (Stable)..." -ForegroundColor cyan
8
- Invoke-WebRequest $downloadLink -OutFile $installerFile
9
- Write-Host "Installing..." -ForegroundColor cyan
10
- Start-Process $installerFile
11
- Write-Host "Microsoft Edge (Stable) installed.`n" -ForegroundColor green
data/webdrivers.gemspec DELETED
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
5
- require 'webdrivers/version'
6
-
7
- Gem::Specification.new do |s|
8
- s.name = 'webdrivers'
9
- s.version = Webdrivers::VERSION
10
- s.required_ruby_version = '>= 2.4.0'
11
- s.authors = ['Titus Fortner', 'Lakshya Kapoor', 'Thomas Walpole']
12
- s.email = %w[titusfortner@gmail.com kapoorlakshya@gmail.com]
13
- s.homepage = 'https://github.com/titusfortner/webdrivers'
14
- s.summary = 'Easy download and use of browser drivers.'
15
- s.description = 'Run Selenium tests more easily with install and updates for all supported webdrivers.'
16
- s.licenses = ['MIT']
17
-
18
- s.metadata = {
19
- 'bug_tracker_uri' => 'https://github.com/titusfortner/webdrivers/issues',
20
- 'changelog_uri' => 'https://github.com/titusfortner/webdrivers/blob/master/CHANGELOG.md',
21
- 'documentation_uri' => "https://www.rubydoc.info/gems/webdrivers/#{Webdrivers::VERSION}",
22
- 'source_code_uri' => "https://github.com/titusfortner/webdrivers/tree/v#{Webdrivers::VERSION}"
23
- }
24
-
25
- s.files = `git ls-files`.split("\n")
26
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
27
- s.executables = []
28
- s.require_paths = ['lib']
29
-
30
- s.add_development_dependency 'ffi', '~> 1.0' # For selenium-webdriver on Windows
31
- s.add_development_dependency 'rake', '~> 12.0'
32
- s.add_development_dependency 'rspec', '~> 3.0'
33
- s.add_development_dependency 'rubocop', '~>0.66'
34
- s.add_development_dependency 'rubocop-performance'
35
- s.add_development_dependency 'rubocop-rspec', '~>1.32'
36
- s.add_development_dependency 'simplecov', '~>0.16'
37
-
38
- s.add_runtime_dependency 'nokogiri', '~> 1.6'
39
- s.add_runtime_dependency 'rubyzip', '>= 1.3.0'
40
- s.add_runtime_dependency 'selenium-webdriver', '>= 3.0', '< 4.0'
41
- end