webdrivers 4.0.1 → 5.2.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: fa8f1d0b04f0eae3dc76133a1d473e524d78969a6905eaa4aaefb5b9262311d2
4
- data.tar.gz: 685a871618bcd101c24a24cca0e31effd64634cd9a67bf66a0e5c863b922316f
3
+ metadata.gz: abf2f2c3590d8497b09a84c7f2b55c2b8c5a5cf5752d178fcd4e4a852c0cfd2c
4
+ data.tar.gz: 422f61f2c96fa03e7d4ae5b8564d52058f13334d51ccda07b334805bb2403d6b
5
5
  SHA512:
6
- metadata.gz: 451f3117e49414c40bb6d1e422e81f79dc0203f9547d03eca7a7015768b6eff429a6478c1d9fc269ff4e44d0c750e617fbe1334bc2a421e5569abe353a604c93
7
- data.tar.gz: 1b02b191b395b7defdf76b9f941747f8739a938c9725aa0f13345ea8dfe8ad832da76aa2050d4561382fe5ea7bbe4a7d561ed9a0ff3d27ff5c60a18c88f8e798
6
+ metadata.gz: dad2443ef52807af22f9780064bb72c226e9101e9997bd787e6ccd3c8a2e161357eb46f476e663a046bee4b9848002f2112a3db5e03a13cd7ca87b564708f54b
7
+ data.tar.gz: 809752d1ef3e67e1fe8a5021eeafe3ab93ad1436c1c894ca6765e8f9e739caf8b4b359d2f2ced0ee61cd118cb7492a8281049f60695d2ba0ec5a51d3fa76b1f4
data/CHANGELOG.md CHANGED
@@ -1,5 +1,98 @@
1
+ # 5.2.0 (2022-09-29)
2
+ * `chromedriver` - Fix downloading on M1 macs from version 106.0.5249.61 ([#237](https://github.com/titusfortner/webdrivers/issues/237), thanks jmccure)
3
+
4
+ # 5.1.0 (2022-09-19)
5
+ * Improve error messages (#232, thanks dan-jensen)
6
+ * Fix circular require bug with railtie (#233, thanks amatsuda)
7
+ * Support downloading correct geckodriver on Apple silicon (#234 thanks stephannv)
8
+ * Update linux locations for Chrome to latest chromedriver finder (thanks entretechno-jeremiah)
9
+ * Add support for Microsoft Edge on Linux (#236)
10
+
11
+ # 5.0.0 (2021-10-19)
12
+ * Require Selenium 4+
13
+ * Remove custom Logger and use the one in Selenium 4
14
+
15
+ # 4.7.0 (2021-10-14)
16
+ * Add support for Selenium 4.x #218 (thanks yahonda )
17
+ * Allow Edge on Linux
18
+ * Update required Selenium > 3.141 because of a change in 4.6
19
+ * Require Ruby 2.6+
20
+ * Fix IE downloads with the change in location of assets
21
+
22
+ # 4.6.1 (2021-08-19)
23
+ * Fix bug in IEdriver caused by bad formatting in recent release
24
+
25
+ # 4.6.0 (2021-02-26)
26
+ * Update `Edgedriver` naming to support Selenium 4 beta (([#206](https://github.com/titusfortner/webdrivers/pull/206))
27
+
28
+ # 4.5.0 (2021-01-19)
29
+ * Improve format of README usage section. Thanks, [okuramasafumi](https://github.com/okuramasafumi)!
30
+ * `chromedriver` - Add support for Apple M1 specific builds ([#193](https://github.com/titusfortner/webdrivers/pull/193)). Thanks, [MichaelHoste](https://github.com/MichaelHoste)!
31
+ * `msedgedriver` - Add support for Apple M1 specific builds.
32
+ * `msedgedriver` - Added automatic selection of 32-bit vs 64-bit builds on Windows and WSLv1.
33
+ * When using this gem in WSLv2, Chrome installed on the Linux filesystem will be automatically used ([#196](https://github.com/titusfortner/webdrivers/pull/196)).
34
+ WSLv1 continues to automatically use Chrome from the Windows filesystem though. Thanks, [fabioxgn](https://github.com/fabioxgn)!
35
+ * We'll aim to make the behavior consistent in a future release.
36
+
37
+ ### 4.4.2 (2020-12-29)
38
+ * Use new powershell if available to enhance WSL support ([#176](https://github.com/titusfortner/webdrivers/issues/176),
39
+ [#186](https://github.com/titusfortner/webdrivers/pull/186)). Thanks, [G-Rath](https://github.com/G-Rath) and
40
+ [131](https://github.com/131)!
41
+ * Update rubocop version (development dependency only) ([#178](https://github.com/titusfortner/webdrivers/pull/178)).
42
+ Thanks, [utkarsh2102](https://github.com/utkarsh2102)!
43
+ * Replace `git ls-files` with `dir` in the gemspec for better Debian support ([#179](https://github.com/titusfortner/webdrivers/pull/179),
44
+ [#184](https://github.com/titusfortner/webdrivers/issues/184)).
45
+ Thanks again, [utkarsh2102](https://github.com/utkarsh2102)!
46
+ * Update README with `require: false` when adding gem to Gemfile ([#183](https://github.com/titusfortner/webdrivers/pull/183)).
47
+ * Make WSL detection more generic ([#187](https://github.com/titusfortner/webdrivers/pull/187)).
48
+ [rbclark](https://github.com/rbclark)!
49
+
50
+ ### 4.4.1 (2020-06-01)
51
+ * Do not include binstubs used for troubleshooting only. Fixes [#174](https://github.com/titusfortner/webdrivers/issues/174).
52
+
53
+ ### 4.4.0 (2020-05-31)
54
+ * Implement support for `chromedriver` in Windows Subsystem for Linux (WSL) v1 ([#172](https://github.com/titusfortner/webdrivers/issues/172)).
55
+ Thanks, [G-Rath](https://github.com/G-Rath)!
56
+ * Chrome/Edgedriver - Fix [#171](https://github.com/titusfortner/webdrivers/issues/171) by making sure the cached
57
+ driver build version matches the browser build version before using it.
58
+ * Chrome/Edgedriver - Driver version check now matches the driver and browser `major.minor.build` versions instead of just
59
+ the major version to be fully compliant with the `chromedriver` version selection
60
+ [document](https://chromedriver.chromium.org/downloads/version-selection).
61
+
62
+ ### 4.3.0 (2020-04-14)
63
+ * Add support for Microsoft Edge (Chromium) stable
64
+ * Drop support for Ruby < 2.4.0
65
+
66
+ ### 4.2.0 (2019-12-27)
67
+ * Add support for Microsoft Edge (Chromium) Beta releases ([#155](https://github.com/titusfortner/webdrivers/pull/155))
68
+ * Use tilde expansion to resolve user's home directory ([#166](https://github.com/titusfortner/webdrivers/pull/161))
69
+ * Add support for Chromium installed using Snap on Ubuntu ([#163](https://github.com/titusfortner/webdrivers/pull/163)). Thanks Tietew!
70
+
71
+ ### 4.1.3 (2019-10-07)
72
+ * Require rubyzip version 1.3.0 or higher to fix [rubyzip#403](https://github.com/rubyzip/rubyzip/pull/403). Thanks rhymes! ([#153](https://github.com/titusfortner/webdrivers/pull/153))
73
+ * Fix a bug where the file deletion confirmation was printed even when there were no files to delete.
74
+
75
+ ### 4.1.2 (2019-07-29)
76
+ * Fix a bug related to raising `BrowserNotFound`.
77
+
78
+ ### 4.1.1 (2019-07-18)
79
+ * Raise `BrowserNotFound` if Chrome and Edge binary are not found (issue [#144](https://github.com/titusfortner/webdrivers/issues/144)).
80
+
81
+ ### 4.1.0 (2019-07-03)
82
+ * Add support for `msedgedriver` (issue [#93](https://github.com/titusfortner/webdrivers/issues/93))
83
+ * Allow users to provide a custom binary path via `WD_CHROME_PATH`
84
+ and `WD_EDGE_CHROME_ATH` environment variables (issues #[137](https://github.com/titusfortner/webdrivers/issues/137)
85
+ and [#93](https://github.com/titusfortner/webdrivers/issues/93))
86
+ * Fix a bug where the user given Chrome binary path via `Selenium::WebDriver::Chrome.path`
87
+ was not properly escaped (issue [#139](https://github.com/titusfortner/webdrivers/issues/139))
88
+ * Fix miscellaneous code warnings.
89
+ * ~~**Announcement**: As of 06/21/2019, `heroku-buildpack-google-chrome`
90
+ no longer requires a [workaround](https://github.com/titusfortner/webdrivers/wiki/Heroku-buildpack-google-chrome)
91
+ to work with this gem. See [heroku-buildpack-google-chrome#73](https://github.com/heroku/heroku-buildpack-google-chrome/pull/73)
92
+ for more information.~~
93
+
1
94
  ### 4.0.1 (2019-06-12)
2
- * Cache time now defaults to 86,400 Seconds (24 hours). Please note the special exception for `chromedriver` in the [README](https://github.com/titusfortner/webdrivers#special-exception-for-chromedriver) (issue [#132](https://github.com/titusfortner/webdrivers/issues/132))
95
+ * Cache time now defaults to 86,400 Seconds (24 hours). Please note the special exception for `chromedriver` in the [README](https://github.com/titusfortner/webdrivers#special-exception-for-chromedriver-and-msedgedriver) (issue [#132](https://github.com/titusfortner/webdrivers/issues/132))
3
96
  * Properly escape Chrome binary path when using JRuby on Windows (issue [#130](https://github.com/titusfortner/webdrivers/issues/130))
4
97
  * Allow use of `selenium-webdriver` v4 (pre-releases only)
5
98
 
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
 
@@ -13,16 +12,18 @@ Run Selenium tests more easily with automatic installation and updates for all s
13
12
  * [chromedriver](http://chromedriver.chromium.org/)
14
13
  * [geckodriver](https://github.com/mozilla/geckodriver)
15
14
  * [IEDriverServer](https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver)
15
+ * [msedgedriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)
16
16
 
17
- Support for [`msedgedriver`](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)
18
- will be added once the next Microsoft Edge version (v75) is released. More information is available
19
- [here](https://developer.microsoft.com/en-us/microsoft-edge/).
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.
20
19
 
21
20
  ## Usage
22
21
 
23
- In your Gemfile:
22
+ In your Gemfile:
24
23
 
25
- `gem 'webdrivers', '~> 4.0'`
24
+ ```ruby
25
+ gem 'webdrivers', '~> 5.0', require: false
26
+ ```
26
27
 
27
28
  In your project:
28
29
 
@@ -31,21 +32,23 @@ require 'webdrivers'
31
32
  ```
32
33
 
33
34
  The drivers will now be automatically downloaded or updated when you launch a browser
34
- through Selenium.
35
+ through Selenium.
35
36
 
36
37
  ### Specific Drivers
37
38
 
38
39
  If you want webdrivers to only manage specific drivers you can specify one or more as follows:
40
+
39
41
  ```ruby
40
42
  require 'webdrivers/chromedriver'
41
43
  require 'webdrivers/geckodriver'
42
44
  require 'webdrivers/iedriver'
45
+ require 'webdrivers/edgedriver'
43
46
  ```
44
47
 
45
48
  ### Download Location
46
49
 
47
50
  The default download location is `~/.webdrivers` directory, and this is configurable:
48
-
51
+
49
52
  ```ruby
50
53
  Webdrivers.install_dir = '/webdrivers/install/dir'
51
54
  ```
@@ -55,7 +58,7 @@ variable.
55
58
 
56
59
  ### Version Pinning
57
60
 
58
- If you would like to use a specific (older or beta) version, you can specify it for each driver. Otherwise,
61
+ If you would like to use a specific (older or beta) version, you can specify it for each driver. Otherwise,
59
62
  the latest (stable) driver will be downloaded and passed to Selenium.
60
63
 
61
64
  ```ruby
@@ -67,6 +70,9 @@ Webdrivers::Geckodriver.required_version = '0.23.0'
67
70
 
68
71
  # Internet Explorer
69
72
  Webdrivers::IEdriver.required_version = '3.14.0'
73
+
74
+ # Edge (Chromium)
75
+ Webdrivers::Edgedriver.required_version = '76.0.183.0'
70
76
  ```
71
77
 
72
78
  You can explicitly trigger the update in your code, but this will happen
@@ -86,15 +92,14 @@ Webdrivers.cache_time = 86_400 # Default: 86,400 Seconds (24 hours)
86
92
  ```
87
93
 
88
94
  Alternatively, you can define this value via the `WD_CACHE_TIME` environment
89
- variable, which takes precedence over the `Webdrivers.cache_time` value.
90
- **Only set one to avoid confusion**.
95
+ variable. **Only set one to avoid confusion**.
91
96
 
92
- ##### Special exception for chromedriver
97
+ ##### Special exception for chromedriver and msedgedriver
93
98
 
94
- Cache time will be respected as long as a `chromedriver` binary exists and the major versions of
95
- Chrome and `chromedriver` match. For example, if you update Chrome to v76 and `chromedriver` is
96
- still at v75, `webdrivers` will ignore the cache time and update `chromedriver` to make sure you're
97
- using a compatible version.
99
+ Cache time will be respected as long as a driver binary exists and the major.minor.build versions of
100
+ the browser and the driver match. For example, if you update Chrome or Edge to v76.0.123 and its driver is
101
+ still at v76.0.100, `webdrivers` will ignore the cache time and update the driver to make sure you're
102
+ using a compatible build version.
98
103
 
99
104
  ### Proxy
100
105
 
@@ -113,7 +118,7 @@ end
113
118
  ### `SSL_connect` errors
114
119
 
115
120
  If you are getting an error like this (especially common on Windows):
116
-
121
+
117
122
  `SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed`
118
123
 
119
124
  Add the following to your Gemfile:
@@ -133,15 +138,34 @@ Other solutions are documented on the RubyGems [website](https://guides.rubygems
133
138
  ### Rake tasks
134
139
 
135
140
  Each driver has its own set of `rake` tasks (with `Railtie` support) that
136
- you can call once before executing the tests. These are especially
137
- useful if you're running tests in parallel and want to avoid performing
141
+ you can call once before executing the tests. These are especially
142
+ useful if you're running tests in parallel and want to avoid performing
138
143
  an update check per thread.
139
144
 
145
+ If you are using Rails default configuration the `webdrivers` gem will only be loaded in the test group
146
+ so you will need to specify the test environment when using the tasks:
147
+
148
+ ```ruby
149
+ RAILS_ENV=test rails webdrivers:chromedriver:update
150
+ ```
151
+
152
+ If you are not using Rails, you'll need to load them into your Rakefile like this:
153
+
154
+ ```ruby
155
+ require 'webdrivers'
156
+ load 'webdrivers/Rakefile'
157
+ ```
158
+
159
+ The full list of available tasks is:
160
+
140
161
  ```bash
141
162
  $ bundle exec rake -T
142
163
  rake webdrivers:chromedriver:remove # Force remove chromedriver
143
164
  rake webdrivers:chromedriver:update[version] # Remove and download updated chromedriver if necessary
144
165
  rake webdrivers:chromedriver:version # Print current chromedriver version
166
+ rake webdrivers:edgedriver:remove # Force remove msedgedriver
167
+ rake webdrivers:edgedriver:update[version] # Remove and download updated msedgedriver if necessary
168
+ rake webdrivers:edgedriver:version # Print current msedgedriver version
145
169
  rake webdrivers:geckodriver:remove # Force remove geckodriver
146
170
  rake webdrivers:geckodriver:update[version] # Remove and download updated geckodriver if necessary
147
171
  rake webdrivers:geckodriver:version # Print current geckodriver version
@@ -150,15 +174,9 @@ rake webdrivers:iedriver:update[version] # Remove and download updated IEDr
150
174
  rake webdrivers:iedriver:version # Print current IEDriverServer version
151
175
  ```
152
176
 
153
- If you are not using Rails, you'll need to load them into your Rakefile like this:
154
-
155
- ```ruby
156
- require 'webdrivers'
157
- load 'webdrivers/Rakefile'
158
- ```
159
-
160
- These tasks respect the `WD_INSTALL_DIR` and `WD_CACHE_TIME` environment
161
- variables which can also be passed through the `rake` command:
177
+ These tasks respect the `WD_INSTALL_DIR`, `WD_CACHE_TIME`, `WD_CHROME_PATH`,
178
+ and `WD_EDGE_CHROME_PATH` environment variables, which can also be passed
179
+ through the `rake` command:
162
180
 
163
181
  ```bash
164
182
  $ bundle exec rake webdrivers:chromedriver:update[2.46] webdrivers:geckodriver:update[0.24.0] WD_CACHE_TIME=86_400 WD_INSTALL_DIR='my_dir'
@@ -178,44 +196,67 @@ The logging level can be configured for debugging purpose:
178
196
  Webdrivers.logger.level = :DEBUG
179
197
  ```
180
198
 
181
- ### Browser Specific Notes
199
+ ### Browser & OS Specific Notes
182
200
 
183
201
  #### Chrome/Chromium
184
202
 
185
203
  The version of `chromedriver` will depend on the version of Chrome you are using it with:
186
204
 
187
- * For versions >= 70, the downloaded version of `chromedriver` will match the installed version of Google Chrome.
205
+ * For versions >= 70, the downloaded version of `chromedriver` will match the installed version of Google Chrome.
188
206
  More information [here](http://chromedriver.chromium.org/downloads/version-selection).
189
207
  * For versions <= 69, `chromedriver` version 2.41 will be downloaded.
190
- * For beta versions, you'll have to require the beta version of `chromedriver`
208
+ * For beta versions, you'll have to require the beta version of `chromedriver`
191
209
  using `Webdrivers::Chromedriver.required_version`.
192
-
193
- The gem looks for the Chrome/Chromium version that `chromedriver` will use by default.
210
+
211
+ The gem looks for the Chrome/Chromium version that `chromedriver` will use by default.
194
212
  You can override this behavior by providing a path to the browser binary you want to use:
195
213
 
196
214
  ```ruby
197
215
  Selenium::WebDriver::Chrome.path = '/chromium/install/path/to/binary'
198
216
  ```
199
217
 
200
- This is also required if Google Chrome is not installed in its
218
+ Alternatively, you can define the path via the `WD_CHROME_PATH` environment
219
+ variable.
220
+
221
+ This is also required if Google Chrome is not installed in its
201
222
  [default location](https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver).
202
223
 
203
- ##### Heroku/CircleCI Users
224
+ #### Chrome on Heroku
225
+
226
+ Follow the specific instructions [here](https://github.com/titusfortner/webdrivers/wiki/Heroku-buildpack-google-chrome) if you're using `heroku-buildpack-google-chrome`.
227
+
228
+ #### Microsoft Edge (Chromium)
229
+
230
+ Microsoft Edge (Chromium) support was added in v4.1.0. Notes
231
+ from the [Chrome/Chromium](https://github.com/titusfortner/webdrivers#chromechromium)
232
+ section apply to this browser as well.
233
+
234
+ Please note that `msedgedriver` requires `selenium-webdriver` v4.
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
204
245
 
205
- Follow the specific instructions [here](https://github.com/titusfortner/webdrivers/wiki/Heroku-buildpack-google-chrome) if your CI environment provides custom shims for Chrome or Chromium.
246
+ Webdrivers will detect WSLv2 as running on Linux and use Chrome on the Linux filesystem.
206
247
 
207
- #### Microsoft Edge
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.
208
251
 
209
- Microsoft Edge support for v18 and older has been removed for now, as it is currently
210
- unreliable. To use Microsoft Edge, please visit the [Downloads and Installation page](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads).
252
+ #### Chrome and Edge on Apple M1 (`arm64`)
211
253
 
212
- Support for [`msedgedriver`](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)
213
- will be added once the next Microsoft Edge version (v75) is released. More information is available
214
- [here](https://developer.microsoft.com/en-us/microsoft-edge/).
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)`
215
256
 
216
257
  ## Wiki
217
258
 
218
- Please see the [wiki](https://github.com/titusfortner/webdrivers/wiki)
259
+ Please see the [wiki](https://github.com/titusfortner/webdrivers/wiki)
219
260
  for solutions to commonly reported issues.
220
261
 
221
262
  Join us in the `#webdrivers-gem` channel on [Slack](https://seleniumhq.herokuapp.com/)
@@ -228,5 +269,5 @@ see LICENSE.txt for full details and copyright.
228
269
 
229
270
  ## Contributing
230
271
 
231
- Bug reports and pull requests are welcome [on GitHub](https://github.com/titusfortner/webdrivers).
272
+ Bug reports and pull requests are welcome [on GitHub](https://github.com/titusfortner/webdrivers).
232
273
  Run `bundle exec rake` and squash the commits in your PRs.
@@ -1,21 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Webdrivers
4
+ #
5
+ # @api private
6
+ #
4
7
  class ChromeFinder
5
8
  class << self
6
9
  def version
7
- location = Selenium::WebDriver::Chrome.path || send("#{System.platform}_location")
8
10
  version = send("#{System.platform}_version", location)
9
-
10
- raise VersionError, 'Failed to find Chrome binary or its version.' if version.nil? || version.empty?
11
+ raise VersionError, 'Failed to determine Chrome version.' if version.nil? || version.empty?
11
12
 
12
13
  Webdrivers.logger.debug "Browser version: #{version}"
13
14
  version[/\d+\.\d+\.\d+\.\d+/] # Google Chrome 73.0.3683.75 -> 73.0.3683.75
14
15
  end
15
16
 
16
- def win_location
17
- return Selenium::WebDriver::Chrome.path unless Selenium::WebDriver::Chrome.path.nil?
17
+ def location
18
+ chrome_bin = user_defined_location || send("#{System.platform}_location")
19
+ return chrome_bin unless chrome_bin.nil?
20
+
21
+ raise BrowserNotFound, 'Failed to determine Chrome binary location.'
22
+ end
23
+
24
+ private
25
+
26
+ def user_defined_location
27
+ if Selenium::WebDriver::Chrome.path
28
+ Webdrivers.logger.debug "Selenium::WebDriver::Chrome.path: #{Selenium::WebDriver::Chrome.path}"
29
+ return Selenium::WebDriver::Chrome.path
30
+ end
18
31
 
32
+ return if ENV['WD_CHROME_PATH'].nil?
33
+
34
+ Webdrivers.logger.debug "WD_CHROME_PATH: #{ENV['WD_CHROME_PATH']}"
35
+ ENV['WD_CHROME_PATH']
36
+ end
37
+
38
+ def win_location
19
39
  envs = %w[LOCALAPPDATA PROGRAMFILES PROGRAMFILES(X86)]
20
40
  directories = ['\\Google\\Chrome\\Application', '\\Chromium\\Application']
21
41
  file = 'chrome.exe'
@@ -23,15 +43,33 @@ module Webdrivers
23
43
  directories.each do |dir|
24
44
  envs.each do |root|
25
45
  option = "#{ENV[root]}\\#{dir}\\#{file}"
26
- next unless File.exist?(option)
46
+ return option if File.exist?(option)
47
+ end
48
+ end
27
49
 
28
- # Fix for JRuby on Windows - #41 and #130.
29
- # Escape space and parenthesis with backticks.
30
- option = option.gsub(/([\s()])/, '`\1') if RUBY_PLATFORM == 'java'
50
+ nil
51
+ end
52
+
53
+ def wsl_location
54
+ _, drive, user = ENV['PATH'].match(%r{/([a-z])/Users/([^/:]+)/AppData/}).to_a
31
55
 
32
- return System.escape_path(option)
56
+ roots = [
57
+ "#{drive}:\\Users\\#{user}\\AppData\\Local",
58
+ "#{drive}:\\Program Files (x86)",
59
+ "#{drive}:\\Program Files"
60
+ ]
61
+
62
+ directories = %w[Google\\Chrome\\Application Chromium\\Application]
63
+ file = 'chrome.exe'
64
+
65
+ directories.each do |dir|
66
+ roots.each do |root|
67
+ option = System.to_wsl_path("#{root}\\#{dir}\\#{file}")
68
+ return option if File.exist?(option)
33
69
  end
34
70
  end
71
+
72
+ nil
35
73
  end
36
74
 
37
75
  def mac_location
@@ -42,33 +80,57 @@ module Webdrivers
42
80
  directories.each do |dir|
43
81
  files.each do |file|
44
82
  option = "#{dir}/#{file}"
45
- return System.escape_path(option) if File.exist?(option)
83
+ return option if File.exist?(option)
46
84
  end
47
85
  end
86
+
87
+ nil
48
88
  end
49
89
 
50
90
  def linux_location
51
- directories = %w[/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /opt/google/chrome]
91
+ return wsl_location if System.wsl_v1?
92
+
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
+ ]
52
104
  files = %w[google-chrome chrome chromium chromium-browser]
53
105
 
54
106
  directories.each do |dir|
55
107
  files.each do |file|
56
108
  option = "#{dir}/#{file}"
57
- return System.escape_path(option) if File.exist?(option)
109
+ return option if File.exist?(option)
58
110
  end
59
111
  end
112
+
113
+ nil
60
114
  end
61
115
 
62
116
  def win_version(location)
63
- System.call("powershell (Get-ItemProperty '#{location}').VersionInfo.ProductVersion")&.strip
117
+ System.call("pwsh.exe -command \"(Get-ItemProperty '#{location}').VersionInfo.ProductVersion\"")&.strip
118
+ rescue StandardError
119
+ System.call("powershell.exe \"(Get-ItemProperty '#{location}').VersionInfo.ProductVersion\"")&.strip
120
+ end
121
+
122
+ def wsl_version(location)
123
+ win_version(System.to_win32_path(location))
64
124
  end
65
125
 
66
126
  def linux_version(location)
67
- System.call("#{location} --product-version")&.strip
127
+ return wsl_version(location) if System.wsl_v1?
128
+
129
+ System.call(location, '--product-version')&.strip
68
130
  end
69
131
 
70
132
  def mac_version(location)
71
- System.call("#{location} --version")&.strip
133
+ System.call(location, '--version')&.strip
72
134
  end
73
135
  end
74
136
  end