webdrivers 4.1.0 → 4.1.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: c836de6a779887c856d52f673efe3aa222046c32d50386f195c31e1c1f37ac4f
4
- data.tar.gz: 972c301f2b3176ad1629820779bff1174043858160e36c56f57522f263458284
3
+ metadata.gz: e9d16f809899161b5099baae7ca53e6d71d376083fe3cecf0278acef552605ec
4
+ data.tar.gz: 3c4dcab7d0e285716adfe50d0e78a172e9cab65202192c02726df3790d7b96b3
5
5
  SHA512:
6
- metadata.gz: 89f7b359fe431e1fe4092baf2867049af4876df5f38f6edc8e7b91fc22bd2a8b7f81e6ea5492c97778453f9e532e4756f5102cc0b90e9954c9b4345e1b0e697f
7
- data.tar.gz: 4c237d64c244c3e62581179b57c58d3961412ea1577d2a57f9c636c86b280db61496a156a28a341b7d6155136c855b38bc034efcc464370c9a6dc543d6a0b808
6
+ metadata.gz: 9123c087f485c843954414de9004c137bb5a7fc1619ad4bc4fc9ec79ce5ed2433f6377994347a46bd06d96f7dd69049192c8631363608088f30159f2fae2b33b
7
+ data.tar.gz: af36c0d87ffad38e87dea124abc387e79bdc2fc5127fee456d3992e6c19f912a8943d5cdb11ec8d6600ed41f92c2fa8f3f018a2a4a34e76c1338cf5ee25b5068
@@ -24,6 +24,7 @@ matrix:
24
24
  - rvm: 2.4.6
25
25
  env: RAKE_TASK=rubocop
26
26
  - rvm: jruby-9.2.7.0
27
+ jdk: openjdk8
27
28
  env: RAKE_TASK=spec
28
29
  - rvm: 2.6
29
30
  env: RAKE_TASK=spec
@@ -35,6 +36,6 @@ matrix:
35
36
  homebrew:
36
37
  taps: homebrew/cask-versions
37
38
  casks:
38
- - microsoft-edge-canary
39
+ - microsoft-edge-dev
39
40
  allow_failures:
40
41
  - gemfile: gemfiles/Gemfile.edge
@@ -1,4 +1,7 @@
1
- ### 4.1.0 (2019-06-26)
1
+ ### 4.1.1 (2019-07-18)
2
+ * Raise `BrowserNotFound` if Chrome and Edge binary are not found (issue [#144](https://github.com/titusfortner/webdrivers/issues/144)).
3
+
4
+ ### 4.1.0 (2019-07-03)
2
5
  * Add support for `msedgedriver` (issue [#93](https://github.com/titusfortner/webdrivers/issues/93))
3
6
  * Allow users to provide a custom binary path via `WD_CHROME_PATH`
4
7
  and `WD_EDGE_CHROME_ATH` environment variables (issues #[137](https://github.com/titusfortner/webdrivers/issues/137)
data/README.md CHANGED
@@ -17,7 +17,7 @@ Run Selenium tests more easily with automatic installation and updates for all s
17
17
 
18
18
  ## Usage
19
19
 
20
- In your Gemfile:
20
+ In your Gemfile:
21
21
 
22
22
  `gem 'webdrivers', '~> 4.0'`
23
23
 
@@ -28,7 +28,7 @@ require 'webdrivers'
28
28
  ```
29
29
 
30
30
  The drivers will now be automatically downloaded or updated when you launch a browser
31
- through Selenium.
31
+ through Selenium.
32
32
 
33
33
  ### Specific Drivers
34
34
 
@@ -44,7 +44,7 @@ require 'webdrivers/edgedriver'
44
44
  ### Download Location
45
45
 
46
46
  The default download location is `~/.webdrivers` directory, and this is configurable:
47
-
47
+
48
48
  ```ruby
49
49
  Webdrivers.install_dir = '/webdrivers/install/dir'
50
50
  ```
@@ -54,7 +54,7 @@ variable.
54
54
 
55
55
  ### Version Pinning
56
56
 
57
- If you would like to use a specific (older or beta) version, you can specify it for each driver. Otherwise,
57
+ If you would like to use a specific (older or beta) version, you can specify it for each driver. Otherwise,
58
58
  the latest (stable) driver will be downloaded and passed to Selenium.
59
59
 
60
60
  ```ruby
@@ -92,9 +92,9 @@ variable. **Only set one to avoid confusion**.
92
92
 
93
93
  ##### Special exception for chromedriver and msedgedriver
94
94
 
95
- Cache time will be respected as long as a driver binary exists and the major versions of
96
- the browser and the driver match. For example, if you update Chrome or Edge to v76 and its driver is
97
- still at v75, `webdrivers` will ignore the cache time and update the driver to make sure you're
95
+ Cache time will be respected as long as a driver binary exists and the major versions of
96
+ the browser and the driver match. For example, if you update Chrome or Edge to v76 and its driver is
97
+ still at v75, `webdrivers` will ignore the cache time and update the driver to make sure you're
98
98
  using a compatible version.
99
99
 
100
100
  ### Proxy
@@ -114,7 +114,7 @@ end
114
114
  ### `SSL_connect` errors
115
115
 
116
116
  If you are getting an error like this (especially common on Windows):
117
-
117
+
118
118
  `SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed`
119
119
 
120
120
  Add the following to your Gemfile:
@@ -134,10 +134,26 @@ Other solutions are documented on the RubyGems [website](https://guides.rubygems
134
134
  ### Rake tasks
135
135
 
136
136
  Each driver has its own set of `rake` tasks (with `Railtie` support) that
137
- you can call once before executing the tests. These are especially
138
- useful if you're running tests in parallel and want to avoid performing
137
+ you can call once before executing the tests. These are especially
138
+ useful if you're running tests in parallel and want to avoid performing
139
139
  an update check per thread.
140
140
 
141
+ If you are using Rails default configuration the `webdrivers` gem will only be loaded in the test group
142
+ so you will need to specify the test environment when using the tasks:
143
+
144
+ ```ruby
145
+ RAILS_ENV=test rails webdrivers:chromedriver:update
146
+ ```
147
+
148
+ If you are not using Rails, you'll need to load them into your Rakefile like this:
149
+
150
+ ```ruby
151
+ require 'webdrivers'
152
+ load 'webdrivers/Rakefile'
153
+ ```
154
+
155
+ The full list of available tasks is:
156
+
141
157
  ```bash
142
158
  $ bundle exec rake -T
143
159
  rake webdrivers:chromedriver:remove # Force remove chromedriver
@@ -154,15 +170,8 @@ rake webdrivers:iedriver:update[version] # Remove and download updated IEDr
154
170
  rake webdrivers:iedriver:version # Print current IEDriverServer version
155
171
  ```
156
172
 
157
- If you are not using Rails, you'll need to load them into your Rakefile like this:
158
-
159
- ```ruby
160
- require 'webdrivers'
161
- load 'webdrivers/Rakefile'
162
- ```
163
-
164
173
  These tasks respect the `WD_INSTALL_DIR`, `WD_CACHE_TIME`, `WD_CHROME_PATH`,
165
- and `WD_EDGE_CHROME_PATH` environment variables, which can also be passed
174
+ and `WD_EDGE_CHROME_PATH` environment variables, which can also be passed
166
175
  through the `rake` command:
167
176
 
168
177
  ```bash
@@ -185,17 +194,17 @@ Webdrivers.logger.level = :DEBUG
185
194
 
186
195
  ### Browser Specific Notes
187
196
 
188
- #### Chrome/Chromium
197
+ #### Chrome/Chromium
189
198
 
190
199
  The version of `chromedriver` will depend on the version of Chrome you are using it with:
191
200
 
192
- * For versions >= 70, the downloaded version of `chromedriver` will match the installed version of Google Chrome.
201
+ * For versions >= 70, the downloaded version of `chromedriver` will match the installed version of Google Chrome.
193
202
  More information [here](http://chromedriver.chromium.org/downloads/version-selection).
194
203
  * For versions <= 69, `chromedriver` version 2.41 will be downloaded.
195
- * For beta versions, you'll have to require the beta version of `chromedriver`
204
+ * For beta versions, you'll have to require the beta version of `chromedriver`
196
205
  using `Webdrivers::Chromedriver.required_version`.
197
-
198
- The gem looks for the Chrome/Chromium version that `chromedriver` will use by default.
206
+
207
+ The gem looks for the Chrome/Chromium version that `chromedriver` will use by default.
199
208
  You can override this behavior by providing a path to the browser binary you want to use:
200
209
 
201
210
  ```ruby
@@ -205,26 +214,26 @@ Selenium::WebDriver::Chrome.path = '/chromium/install/path/to/binary'
205
214
  Alternatively, you can define the path via the `WD_CHROME_PATH` environment
206
215
  variable.
207
216
 
208
- This is also required if Google Chrome is not installed in its
217
+ This is also required if Google Chrome is not installed in its
209
218
  [default location](https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver).
210
219
 
211
220
  ##### CircleCI Users
212
221
 
213
- 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.
222
+ 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.
214
223
 
215
224
  Please note that as of 06/21/2019, [`heroku-buildpack-google-chrome`](https://github.com/heroku/heroku-buildpack-google-chrome/pull/73) no longer requires this workaround.
216
225
 
217
226
  #### Microsoft Edge (Chromium)
218
227
 
219
- Microsoft Edge (Chromium) support was added in v4.1.0. Notes
220
- from the [Chrome/Chromium](https://github.com/titusfortner/webdrivers#chromechromium)
228
+ Microsoft Edge (Chromium) support was added in v4.1.0. Notes
229
+ from the [Chrome/Chromium](https://github.com/titusfortner/webdrivers#chromechromium)
221
230
  section apply to this browser as well.
222
-
231
+
223
232
  Please note that `msedgedriver` requires `selenium-webdriver` v4.
224
233
 
225
234
  ## Wiki
226
235
 
227
- Please see the [wiki](https://github.com/titusfortner/webdrivers/wiki)
236
+ Please see the [wiki](https://github.com/titusfortner/webdrivers/wiki)
228
237
  for solutions to commonly reported issues.
229
238
 
230
239
  Join us in the `#webdrivers-gem` channel on [Slack](https://seleniumhq.herokuapp.com/)
@@ -237,5 +246,5 @@ see LICENSE.txt for full details and copyright.
237
246
 
238
247
  ## Contributing
239
248
 
240
- Bug reports and pull requests are welcome [on GitHub](https://github.com/titusfortner/webdrivers).
249
+ Bug reports and pull requests are welcome [on GitHub](https://github.com/titusfortner/webdrivers).
241
250
  Run `bundle exec rake` and squash the commits in your PRs.
@@ -8,15 +8,17 @@ module Webdrivers
8
8
  class << self
9
9
  def version
10
10
  version = send("#{System.platform}_version", location)
11
-
12
- raise VersionError, 'Failed to find Chrome binary or its version.' if version.nil? || version.empty?
11
+ raise VersionError, 'Failed to find Chrome version.' if version.nil? || version.empty?
13
12
 
14
13
  Webdrivers.logger.debug "Browser version: #{version}"
15
14
  version[/\d+\.\d+\.\d+\.\d+/] # Google Chrome 73.0.3683.75 -> 73.0.3683.75
16
15
  end
17
16
 
18
17
  def location
19
- user_defined_location || send("#{System.platform}_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 find Chrome binary.'
20
22
  end
21
23
 
22
24
  private
@@ -18,6 +18,9 @@ module Webdrivers
18
18
  class NetworkError < StandardError
19
19
  end
20
20
 
21
+ class BrowserNotFound < StandardError
22
+ end
23
+
21
24
  DEFAULT_CACHE_TIME = 86_400 # 24 hours
22
25
  DEFAULT_INSTALL_DIR = File.expand_path(File.join(ENV['HOME'], '.webdrivers'))
23
26
 
@@ -8,15 +8,17 @@ module Webdrivers
8
8
  class << self
9
9
  def version
10
10
  version = send("#{System.platform}_version", location)
11
-
12
- raise VersionError, 'Failed to find Edge binary or its version.' if version.nil? || version.empty?
11
+ raise VersionError, 'Failed to find Edge version.' if version.nil? || version.empty?
13
12
 
14
13
  Webdrivers.logger.debug "Browser version: #{version}"
15
14
  version[/\d+\.\d+\.\d+\.\d+/] # Microsoft Edge 73.0.3683.75 -> 73.0.3683.75
16
15
  end
17
16
 
18
17
  def location
19
- user_defined_location || send("#{System.platform}_location")
18
+ edge_bin = user_defined_location || send("#{System.platform}_location")
19
+ return edge_bin unless edge_bin.nil?
20
+
21
+ raise BrowserNotFound, 'Failed to find Edge binary.'
20
22
  end
21
23
 
22
24
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Webdrivers
4
- VERSION = '4.1.0'
4
+ VERSION = '4.1.1'
5
5
  end
@@ -7,38 +7,44 @@ describe Webdrivers::ChromeFinder do
7
7
 
8
8
  context 'when the user relies on the gem to figure out the location of Chrome' do
9
9
  it 'determines the location correctly based on the current OS' do
10
- expect(chrome_finder.location).not_to be_nil
10
+ expect { chrome_finder.location }.not_to raise_error
11
11
  end
12
12
  end
13
13
 
14
14
  context 'when the user provides a path to the Chrome binary' do
15
15
  it 'uses Selenium::WebDriver::Chrome.path when it is defined' do
16
16
  Selenium::WebDriver::Chrome.path = chrome_finder.location
17
- allow(chrome_finder).to receive(:win_location)
18
- allow(chrome_finder).to receive(:mac_location)
19
- allow(chrome_finder).to receive(:linux_location)
20
- expect(chrome_finder.version).not_to be_nil
21
- expect(chrome_finder).not_to have_received(:win_location)
22
- expect(chrome_finder).not_to have_received(:mac_location)
23
- expect(chrome_finder).not_to have_received(:linux_location)
24
- end
17
+ locations = %i[win_location mac_location linux_location]
18
+ allow(chrome_finder).to receive_messages(locations)
25
19
 
26
- it "uses ENV['WD_CHROME_PATH'] when it is defined" do
27
- allow(ENV).to receive(:[]).with('WD_CHROME_PATH').and_return(chrome_finder.location)
28
- allow(chrome_finder).to receive(:win_location)
29
- allow(chrome_finder).to receive(:mac_location)
30
- allow(chrome_finder).to receive(:linux_location)
31
20
  expect(chrome_finder.version).not_to be_nil
32
- expect(chrome_finder).not_to have_received(:win_location)
33
- expect(chrome_finder).not_to have_received(:mac_location)
34
- expect(chrome_finder).not_to have_received(:linux_location)
21
+ locations.each { |loc| expect(chrome_finder).not_to have_received(loc) }
35
22
  end
23
+ end
36
24
 
37
- it 'uses Selenium::WebDriver::Chrome.path over WD_CHROME_PATH' do
38
- Selenium::WebDriver::Chrome.path = chrome_finder.location
39
- allow(ENV).to receive(:[]).with('WD_CHROME_PATH').and_return('my_wd_chrome_path')
40
- expect(chrome_finder.version).not_to be_nil
41
- expect(ENV).not_to have_received(:[]).with('WD_CHROME_PATH')
25
+ it "uses ENV['WD_CHROME_PATH'] when it is defined" do
26
+ allow(ENV).to receive(:[]).with('WD_CHROME_PATH').and_return(chrome_finder.location)
27
+ locations = %i[win_location mac_location linux_location]
28
+ allow(chrome_finder).to receive_messages(locations)
29
+
30
+ expect(chrome_finder.version).not_to be_nil
31
+ locations.each { |loc| expect(chrome_finder).not_to have_received(loc) }
32
+ end
33
+
34
+ it 'uses Selenium::WebDriver::Chrome.path over WD_CHROME_PATH' do
35
+ Selenium::WebDriver::Chrome.path = chrome_finder.location
36
+ allow(ENV).to receive(:[]).with('WD_CHROME_PATH').and_return('my_wd_chrome_path')
37
+ expect(chrome_finder.version).not_to be_nil
38
+ expect(ENV).not_to have_received(:[]).with('WD_CHROME_PATH')
39
+ end
40
+
41
+ context 'when Chrome is not installed' do
42
+ it 'raises BrowserNotFound' do
43
+ locations = %i[win_location mac_location linux_location]
44
+ allow(chrome_finder).to receive_messages(locations)
45
+ allow(chrome_finder).to receive(:user_defined_location).and_return(nil)
46
+
47
+ expect { chrome_finder.version }.to raise_error(Webdrivers::BrowserNotFound)
42
48
  end
43
49
  end
44
50
  end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Webdrivers::EdgeFinder do
6
+ let(:edge_finder) { described_class }
7
+
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)
12
+ skip "The current selenium-webdriver doesn't include Chromium based Edge support"
13
+ end
14
+ end
15
+
16
+ context 'when the user relies on the gem to figure out the location of Edge' do
17
+ it 'determines the location correctly based on the current OS' do
18
+ expect { edge_finder.location }.not_to raise_error
19
+ end
20
+ end
21
+
22
+ 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
25
+ locations = %i[win_location mac_location linux_location]
26
+ allow(edge_finder).to receive_messages(locations)
27
+
28
+ expect(edge_finder.version).not_to be_nil
29
+ locations.each { |loc| expect(edge_finder).not_to have_received(loc) }
30
+ end
31
+
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)
34
+ locations = %i[win_location mac_location linux_location]
35
+ allow(edge_finder).to receive_messages(locations)
36
+
37
+ expect(edge_finder.version).not_to be_nil
38
+ locations.each { |loc| expect(edge_finder).not_to have_received(loc) }
39
+ end
40
+
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')
44
+ expect(edge_finder.version).not_to be_nil
45
+ expect(ENV).not_to have_received(:[]).with('WD_EDGE_CHROME_PATH')
46
+ end
47
+ end
48
+
49
+ context 'when Edge is not installed' do
50
+ it 'raises BrowserNotFound' do
51
+ locations = %i[win_location mac_location linux_location]
52
+ allow(edge_finder).to receive_messages(locations)
53
+ allow(edge_finder).to receive(:user_defined_location).and_return(nil)
54
+
55
+ expect { edge_finder.version }.to raise_error(Webdrivers::BrowserNotFound)
56
+ end
57
+ end
58
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webdrivers
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 4.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Titus Fortner
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-07-03 00:00:00.000000000 Z
13
+ date: 2019-07-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ffi
@@ -213,6 +213,7 @@ files:
213
213
  - spec/spec_helper.rb
214
214
  - spec/webdrivers/chrome_finder_spec.rb
215
215
  - spec/webdrivers/chromedriver_spec.rb
216
+ - spec/webdrivers/edge_finder_spec.rb
216
217
  - spec/webdrivers/edgedriver_spec.rb
217
218
  - spec/webdrivers/geckodriver_spec.rb
218
219
  - spec/webdrivers/i_edriver_spec.rb