webdrivers 3.7.0 → 3.7.1
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 +4 -4
- data/.gitignore +6 -6
- data/.travis.yml +4 -1
- data/CHANGELOG.md +4 -0
- data/Gemfile +4 -4
- data/LICENSE.txt +22 -22
- data/README.md +30 -6
- data/Rakefile +6 -6
- data/lib/webdrivers/chromedriver.rb +53 -11
- data/lib/webdrivers/logger.rb +109 -109
- data/lib/webdrivers/selenium.rb +29 -29
- data/spec/chromedriver_spec.rb +20 -4
- data/spec/proxy_support_spec.rb +44 -44
- data/spec/spec_helper.rb +2 -2
- data/webdrivers.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57609975e2a5d45294e3bc698ded693c3c6eef7df57b758264afb9e5d132c71a
|
4
|
+
data.tar.gz: 8975564b199c769158c5bd4cf247b84276ac4718fafbce031fc025d2a4150e19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e69935404700371ab1bad72ce3122064e850e8d89ae152b25cefe97ad7282527340c8f3e4f7fb2e45bed124ca248795f9b483393f72c6f606898c118f859b34
|
7
|
+
data.tar.gz: 4ce41c8a7fe0d16825828865bee12166557092f6ef633e728042118ffc1b05f6edb5457d69c787f513d98e319729b54b4bd0d65786a15f95c4d6063a3f956535
|
data/.gitignore
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
*.gem
|
2
|
-
.bundle
|
3
|
-
Gemfile.lock
|
4
|
-
pkg/*
|
5
|
-
chromedriver.log
|
6
|
-
/.idea/
|
1
|
+
*.gem
|
2
|
+
.bundle
|
3
|
+
Gemfile.lock
|
4
|
+
pkg/*
|
5
|
+
chromedriver.log
|
6
|
+
/.idea/
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
### 3.7.1 (2019-03-25)
|
2
|
+
* Use `Selenium::WebDriver::Chrome#path` to check for a user given browser executable before defaulting to Google Chrome. Addresses [#38](https://github.com/titusfortner/webdrivers/issues/38).
|
3
|
+
* Download `chromedriver` v2.46 if Chrome/Chromium version is less than 70.
|
4
|
+
|
1
5
|
### 3.7.0 (2019-03-19)
|
2
6
|
|
3
7
|
* `chromedriver` version now matches the installed Chrome version. See [#32](https://github.com/titusfortner/webdrivers/pull/32).
|
data/Gemfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
source "https://rubygems.org"
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in webdrivers.gemspec
|
4
|
-
gemspec
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in webdrivers.gemspec
|
4
|
+
gemspec
|
data/LICENSE.txt
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
(The MIT License)
|
2
|
-
|
3
|
-
Copyright (c) 2017: Titus Fortner
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
'Software'), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
1
|
+
(The MIT License)
|
2
|
+
|
3
|
+
Copyright (c) 2017: Titus Fortner
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
'Software'), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Webdrivers
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/webdrivers)
|
3
4
|
[](https://travis-ci.org/titusfortner/webdrivers)
|
4
5
|
|
5
6
|
Run Selenium tests more easily with automatic installation and updates for all supported webdrivers.
|
@@ -14,17 +15,23 @@ Currently supported:
|
|
14
15
|
* `IEDriverServer`
|
15
16
|
* `MicrosoftWebDriver`
|
16
17
|
|
17
|
-
Drivers are stored in `~/.webdrivers` directory
|
18
|
+
Drivers are stored in `~/.webdrivers` directory, and this is configurable:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
Webdrivers.install_dir = '/webdrivers/install/dir'
|
22
|
+
```
|
18
23
|
|
19
24
|
# Usage
|
20
25
|
|
21
|
-
|
26
|
+
In your Gemfile:
|
22
27
|
|
23
|
-
`gem
|
28
|
+
`gem 'webdrivers', '~> 3.0'`
|
24
29
|
|
25
|
-
|
30
|
+
In your project:
|
26
31
|
|
27
|
-
|
32
|
+
```ruby
|
33
|
+
require 'webdrivers'
|
34
|
+
```
|
28
35
|
|
29
36
|
If there is a proxy between you and the Internet then you will need to configure
|
30
37
|
the gem to use the proxy. You can do this by calling the `configure` method.
|
@@ -47,7 +54,24 @@ add the following to your code:
|
|
47
54
|
Webdrivers.net_http_ssl_fix
|
48
55
|
````
|
49
56
|
|
50
|
-
|
57
|
+
You can also specify the webdriver versions if you don't want the latest:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
Webdrivers::Chromedriver.version = '2.46'
|
61
|
+
Webdrivers::Geckodriver.version = '0.17.0'
|
62
|
+
Webdrivers::IEdriver.version = '3.14.0'
|
63
|
+
Webdrivers::MSWebdriver.version = '17134'
|
64
|
+
```
|
65
|
+
|
66
|
+
**Note when using Chrome/Chromium with Selenium**
|
67
|
+
|
68
|
+
You can configure the gem to use a specific browser version (Chrome vs Chromium) by providing the path to its binary:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
Selenium::WebDriver::Chrome.path = '/chromium/install/path'
|
72
|
+
```
|
73
|
+
|
74
|
+
**Note when using Microsoft Edge**
|
51
75
|
|
52
76
|
After updating Microsoft Edge on Windows 10, you will need to delete the existing binary (`%USERPROFILE%/.webdrivers/MicrosoftWebDriver.exe`) to
|
53
77
|
to be able to download the latest version through this gem.
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
require 'rspec/core/rake_task'
|
3
|
-
|
4
|
-
RSpec::Core::RakeTask.new(:spec)
|
5
|
-
|
6
|
-
task :default => :spec
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
|
6
|
+
task :default => :spec
|
@@ -5,19 +5,26 @@ module Webdrivers
|
|
5
5
|
class << self
|
6
6
|
|
7
7
|
def current_version
|
8
|
-
Webdrivers.logger.debug
|
8
|
+
Webdrivers.logger.debug 'Checking current version'
|
9
9
|
return nil unless downloaded?
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
|
11
|
+
ver = `#{binary} --version`
|
12
|
+
Webdrivers.logger.debug "Current #{binary} version: #{ver}"
|
13
|
+
|
14
|
+
# Matches 2.46, 2.46.628411 and 73.0.3683.75
|
15
|
+
normalize ver[/\d+\.\d+(\.\d+)?(\.\d+)?/]
|
13
16
|
end
|
14
17
|
|
15
18
|
def latest_version
|
16
|
-
raise StandardError,
|
19
|
+
raise StandardError, 'Can not reach site' unless site_available?
|
20
|
+
|
21
|
+
# Versions before 70 do not have a LATEST_RELEASE file
|
22
|
+
return Gem::Version.new('2.46') if release_version < '70.0.3538'
|
17
23
|
|
18
24
|
# Latest webdriver release for installed Chrome version
|
19
25
|
release_file = "LATEST_RELEASE_#{release_version}"
|
20
26
|
latest_available = get(URI.join(base_url, release_file))
|
27
|
+
Webdrivers.logger.debug "Latest version available: #{latest_available}"
|
21
28
|
Gem::Version.new(latest_available)
|
22
29
|
end
|
23
30
|
|
@@ -68,23 +75,58 @@ module Webdrivers
|
|
68
75
|
raise NotImplementedError, 'Your OS is not supported by webdrivers gem.'
|
69
76
|
end.chomp
|
70
77
|
|
78
|
+
if ver.nil? || ver.empty?
|
79
|
+
raise StandardError, 'Failed to find Chrome binary or its version.'
|
80
|
+
end
|
81
|
+
|
71
82
|
# Google Chrome 73.0.3683.75 -> 73.0.3683.75
|
72
83
|
ver[/(\d|\.)+/]
|
73
84
|
end
|
74
85
|
|
75
86
|
def chrome_on_windows
|
76
|
-
|
77
|
-
|
78
|
-
|
87
|
+
if browser_binary
|
88
|
+
Webdrivers.logger.debug "Browser executable: '#{browser_binary}'"
|
89
|
+
return `powershell (Get-ItemProperty '#{browser_binary}').VersionInfo.ProductVersion`
|
90
|
+
end
|
91
|
+
|
92
|
+
# Default to Google Chrome
|
93
|
+
reg = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe'
|
94
|
+
executable = `powershell (Get-ItemProperty '#{reg}' -Name '(default)').'(default)'`.strip
|
95
|
+
Webdrivers.logger.debug "Browser executable: '#{executable}'"
|
96
|
+
ps = "(Get-Item (Get-ItemProperty '#{reg}').'(default)').VersionInfo.ProductVersion"
|
97
|
+
`powershell #{ps}`.strip
|
79
98
|
end
|
80
99
|
|
81
100
|
def chrome_on_linux
|
82
|
-
|
101
|
+
if browser_binary
|
102
|
+
Webdrivers.logger.debug "Browser executable: '#{browser_binary}'"
|
103
|
+
return `#{browser_binary} --product-version`.strip
|
104
|
+
end
|
105
|
+
|
106
|
+
# Default to Google Chrome
|
107
|
+
executable = `which google-chrome`.strip
|
108
|
+
Webdrivers.logger.debug "Browser executable: '#{executable}'"
|
109
|
+
`#{executable} --product-version`.strip
|
83
110
|
end
|
84
111
|
|
85
112
|
def chrome_on_mac
|
86
|
-
|
87
|
-
|
113
|
+
if browser_binary
|
114
|
+
Webdrivers.logger.debug "Browser executable: '#{browser_binary}'"
|
115
|
+
return `#{browser_binary} --version`.strip
|
116
|
+
end
|
117
|
+
|
118
|
+
# Default to Google Chrome
|
119
|
+
executable = Shellwords.escape '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
|
120
|
+
Webdrivers.logger.debug "Browser executable: #{executable}"
|
121
|
+
`#{executable} --version`.strip
|
122
|
+
end
|
123
|
+
|
124
|
+
#
|
125
|
+
# Returns user defined browser executable path from Selenium::WebDrivers::Chrome#path.
|
126
|
+
#
|
127
|
+
def browser_binary
|
128
|
+
# For Chromium, Brave, or whatever else
|
129
|
+
Selenium::WebDriver::Chrome.path
|
88
130
|
end
|
89
131
|
end
|
90
132
|
end
|
data/lib/webdrivers/logger.rb
CHANGED
@@ -1,109 +1,109 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
require 'logger'
|
3
|
-
|
4
|
-
# Code adapted from Selenium Implementation
|
5
|
-
# https://github.com/SeleniumHQ/selenium/blob/master/rb/lib/selenium/webdriver/common/logger.rb
|
6
|
-
|
7
|
-
module Webdrivers
|
8
|
-
#
|
9
|
-
# @example Enable full logging
|
10
|
-
# Webdrivers.logger.level = :debug
|
11
|
-
#
|
12
|
-
# @example Log to file
|
13
|
-
# Webdrivers.logger.output = 'webdrivers.log'
|
14
|
-
#
|
15
|
-
# @example Use logger manually
|
16
|
-
# Webdrivers.logger.info('This is info message')
|
17
|
-
# Webdrivers.logger.warn('This is warning message')
|
18
|
-
#
|
19
|
-
class Logger
|
20
|
-
extend Forwardable
|
21
|
-
include ::Logger::Severity
|
22
|
-
|
23
|
-
def_delegators :@logger, :debug, :debug?,
|
24
|
-
:info, :info?,
|
25
|
-
:warn, :warn?,
|
26
|
-
:error, :error?,
|
27
|
-
:fatal, :fatal?,
|
28
|
-
:level
|
29
|
-
|
30
|
-
def initialize
|
31
|
-
@logger = create_logger($stdout)
|
32
|
-
end
|
33
|
-
|
34
|
-
def output=(io)
|
35
|
-
# `Logger#reopen` was added in Ruby 2.3
|
36
|
-
if @logger.respond_to?(:reopen)
|
37
|
-
@logger.reopen(io)
|
38
|
-
else
|
39
|
-
@logger = create_logger(io)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
#
|
44
|
-
# For Ruby < 2.3 compatibility
|
45
|
-
# Based on https://github.com/ruby/ruby/blob/ruby_2_3/lib/logger.rb#L250
|
46
|
-
#
|
47
|
-
|
48
|
-
def level=(severity)
|
49
|
-
if severity.is_a?(Integer)
|
50
|
-
@logger.level = severity
|
51
|
-
else
|
52
|
-
case severity.to_s.downcase
|
53
|
-
when 'debug'.freeze
|
54
|
-
@logger.level = DEBUG
|
55
|
-
when 'info'.freeze
|
56
|
-
@logger.level = INFO
|
57
|
-
when 'warn'.freeze
|
58
|
-
@logger.level = WARN
|
59
|
-
when 'error'.freeze
|
60
|
-
@logger.level = ERROR
|
61
|
-
when 'fatal'.freeze
|
62
|
-
@logger.level = FATAL
|
63
|
-
when 'unknown'.freeze
|
64
|
-
@logger.level = UNKNOWN
|
65
|
-
else
|
66
|
-
raise ArgumentError, "invalid log level: #{severity}"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
#
|
72
|
-
# Returns IO object used by logger internally.
|
73
|
-
#
|
74
|
-
# Normally, we would have never needed it, but we want to
|
75
|
-
# use it as IO object for all child processes to ensure their
|
76
|
-
# output is redirected there.
|
77
|
-
#
|
78
|
-
# It is only used in debug level, in other cases output is suppressed.
|
79
|
-
#
|
80
|
-
# @api private
|
81
|
-
#
|
82
|
-
def io
|
83
|
-
@logger.instance_variable_get(:@logdev).instance_variable_get(:@dev)
|
84
|
-
end
|
85
|
-
|
86
|
-
#
|
87
|
-
# Marks code as deprecated with replacement.
|
88
|
-
#
|
89
|
-
# @param [String] old
|
90
|
-
# @param [String] new
|
91
|
-
#
|
92
|
-
def deprecate(old, new)
|
93
|
-
warn "[DEPRECATION] #{old} is deprecated. Use #{new} instead."
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
def create_logger(output)
|
99
|
-
logger = ::Logger.new(output)
|
100
|
-
logger.progname = 'Webdrivers'
|
101
|
-
logger.level = ($DEBUG ? DEBUG : WARN)
|
102
|
-
logger.formatter = proc do |severity, time, progname, msg|
|
103
|
-
"#{time.strftime('%F %T')} #{severity} #{progname} #{msg}\n"
|
104
|
-
end
|
105
|
-
|
106
|
-
logger
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
1
|
+
require 'forwardable'
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
# Code adapted from Selenium Implementation
|
5
|
+
# https://github.com/SeleniumHQ/selenium/blob/master/rb/lib/selenium/webdriver/common/logger.rb
|
6
|
+
|
7
|
+
module Webdrivers
|
8
|
+
#
|
9
|
+
# @example Enable full logging
|
10
|
+
# Webdrivers.logger.level = :debug
|
11
|
+
#
|
12
|
+
# @example Log to file
|
13
|
+
# Webdrivers.logger.output = 'webdrivers.log'
|
14
|
+
#
|
15
|
+
# @example Use logger manually
|
16
|
+
# Webdrivers.logger.info('This is info message')
|
17
|
+
# Webdrivers.logger.warn('This is warning message')
|
18
|
+
#
|
19
|
+
class Logger
|
20
|
+
extend Forwardable
|
21
|
+
include ::Logger::Severity
|
22
|
+
|
23
|
+
def_delegators :@logger, :debug, :debug?,
|
24
|
+
:info, :info?,
|
25
|
+
:warn, :warn?,
|
26
|
+
:error, :error?,
|
27
|
+
:fatal, :fatal?,
|
28
|
+
:level
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
@logger = create_logger($stdout)
|
32
|
+
end
|
33
|
+
|
34
|
+
def output=(io)
|
35
|
+
# `Logger#reopen` was added in Ruby 2.3
|
36
|
+
if @logger.respond_to?(:reopen)
|
37
|
+
@logger.reopen(io)
|
38
|
+
else
|
39
|
+
@logger = create_logger(io)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# For Ruby < 2.3 compatibility
|
45
|
+
# Based on https://github.com/ruby/ruby/blob/ruby_2_3/lib/logger.rb#L250
|
46
|
+
#
|
47
|
+
|
48
|
+
def level=(severity)
|
49
|
+
if severity.is_a?(Integer)
|
50
|
+
@logger.level = severity
|
51
|
+
else
|
52
|
+
case severity.to_s.downcase
|
53
|
+
when 'debug'.freeze
|
54
|
+
@logger.level = DEBUG
|
55
|
+
when 'info'.freeze
|
56
|
+
@logger.level = INFO
|
57
|
+
when 'warn'.freeze
|
58
|
+
@logger.level = WARN
|
59
|
+
when 'error'.freeze
|
60
|
+
@logger.level = ERROR
|
61
|
+
when 'fatal'.freeze
|
62
|
+
@logger.level = FATAL
|
63
|
+
when 'unknown'.freeze
|
64
|
+
@logger.level = UNKNOWN
|
65
|
+
else
|
66
|
+
raise ArgumentError, "invalid log level: #{severity}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# Returns IO object used by logger internally.
|
73
|
+
#
|
74
|
+
# Normally, we would have never needed it, but we want to
|
75
|
+
# use it as IO object for all child processes to ensure their
|
76
|
+
# output is redirected there.
|
77
|
+
#
|
78
|
+
# It is only used in debug level, in other cases output is suppressed.
|
79
|
+
#
|
80
|
+
# @api private
|
81
|
+
#
|
82
|
+
def io
|
83
|
+
@logger.instance_variable_get(:@logdev).instance_variable_get(:@dev)
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# Marks code as deprecated with replacement.
|
88
|
+
#
|
89
|
+
# @param [String] old
|
90
|
+
# @param [String] new
|
91
|
+
#
|
92
|
+
def deprecate(old, new)
|
93
|
+
warn "[DEPRECATION] #{old} is deprecated. Use #{new} instead."
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def create_logger(output)
|
99
|
+
logger = ::Logger.new(output)
|
100
|
+
logger.progname = 'Webdrivers'
|
101
|
+
logger.level = ($DEBUG ? DEBUG : WARN)
|
102
|
+
logger.formatter = proc do |severity, time, progname, msg|
|
103
|
+
"#{time.strftime('%F %T')} #{severity} #{progname} #{msg}\n"
|
104
|
+
end
|
105
|
+
|
106
|
+
logger
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/lib/webdrivers/selenium.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
|
-
require 'selenium-webdriver'
|
2
|
-
|
3
|
-
module Selenium
|
4
|
-
module WebDriver
|
5
|
-
module Chrome
|
6
|
-
def self.driver_path
|
7
|
-
@driver_path ||= Webdrivers::Chromedriver.update
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
module Firefox
|
12
|
-
def self.driver_path
|
13
|
-
@driver_path ||= Webdrivers::Geckodriver.update
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
module Edge
|
18
|
-
def self.driver_path
|
19
|
-
@driver_path ||= Webdrivers::MSWebdriver.update
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
module IE
|
24
|
-
def self.driver_path
|
25
|
-
@driver_path ||= Webdrivers::IEdriver.update
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
1
|
+
require 'selenium-webdriver'
|
2
|
+
|
3
|
+
module Selenium
|
4
|
+
module WebDriver
|
5
|
+
module Chrome
|
6
|
+
def self.driver_path
|
7
|
+
@driver_path ||= Webdrivers::Chromedriver.update
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Firefox
|
12
|
+
def self.driver_path
|
13
|
+
@driver_path ||= Webdrivers::Geckodriver.update
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module Edge
|
18
|
+
def self.driver_path
|
19
|
+
@driver_path ||= Webdrivers::MSWebdriver.update
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module IE
|
24
|
+
def self.driver_path
|
25
|
+
@driver_path ||= Webdrivers::IEdriver.update
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/chromedriver_spec.rb
CHANGED
@@ -25,7 +25,7 @@ describe Webdrivers::Chromedriver do
|
|
25
25
|
chromedriver.remove
|
26
26
|
chromedriver.download
|
27
27
|
cur_ver = chromedriver.current_version.version
|
28
|
-
latest_ver = chromedriver.latest_version.version
|
28
|
+
latest_ver = chromedriver.latest_version.version
|
29
29
|
expect(cur_ver).to eq latest_ver
|
30
30
|
end
|
31
31
|
|
@@ -33,14 +33,14 @@ describe Webdrivers::Chromedriver do
|
|
33
33
|
chromedriver.remove
|
34
34
|
chromedriver.version = 2.29
|
35
35
|
chromedriver.download
|
36
|
-
expect(chromedriver.current_version.version).to
|
36
|
+
expect(chromedriver.current_version.version).to include '2.29'
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'downloads specified version by String' do
|
40
40
|
chromedriver.remove
|
41
|
-
chromedriver.version = '
|
41
|
+
chromedriver.version = '73.0.3683.68'
|
42
42
|
chromedriver.download
|
43
|
-
expect(chromedriver.current_version.version).to eq '
|
43
|
+
expect(chromedriver.current_version.version).to eq '73.0.3683.68'
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'removes chromedriver' do
|
@@ -48,6 +48,22 @@ describe Webdrivers::Chromedriver do
|
|
48
48
|
expect(chromedriver.current_version).to be_nil
|
49
49
|
end
|
50
50
|
|
51
|
+
if Selenium::WebDriver::Platform.linux? && ENV['TRAVIS']
|
52
|
+
# Ubuntu 14.04 (trusty) is limited to v65
|
53
|
+
context 'when using a Chromium version < 70.0.3538' do
|
54
|
+
before do
|
55
|
+
chromedriver.remove
|
56
|
+
chromedriver.version = nil
|
57
|
+
Selenium::WebDriver::Chrome.path = `which chromium-browser`.strip
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'downloads chromedriver 2.46' do
|
61
|
+
chromedriver.update
|
62
|
+
expect(chromedriver.current_version.version[/\d+.\d+/]).to eq('2.46')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
51
67
|
context 'when offline' do
|
52
68
|
before { allow(chromedriver).to receive(:site_available?).and_return(false) }
|
53
69
|
|
data/spec/proxy_support_spec.rb
CHANGED
@@ -1,45 +1,45 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class FakeDriver < Webdrivers::Common
|
4
|
-
def self.http_object
|
5
|
-
self.http
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
describe "Support for proxies" do
|
10
|
-
let(:http_object) { FakeDriver.http_object }
|
11
|
-
|
12
|
-
before do
|
13
|
-
Webdrivers.proxy_addr = nil
|
14
|
-
Webdrivers.proxy_port = nil
|
15
|
-
Webdrivers.proxy_user = nil
|
16
|
-
Webdrivers.proxy_pass = nil
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should allow the proxy values to be set via configuration' do
|
20
|
-
Webdrivers.configure do |config|
|
21
|
-
config.proxy_addr = 'proxy_addr'
|
22
|
-
config.proxy_port = '8888'
|
23
|
-
config.proxy_user = 'proxy_user'
|
24
|
-
config.proxy_pass = 'proxy_pass'
|
25
|
-
end
|
26
|
-
|
27
|
-
expect(Webdrivers.proxy_addr).to eql 'proxy_addr'
|
28
|
-
expect(Webdrivers.proxy_port).to eql '8888'
|
29
|
-
expect(Webdrivers.proxy_user).to eql 'proxy_user'
|
30
|
-
expect(Webdrivers.proxy_pass).to eql 'proxy_pass'
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should use the Proxy when the proxy_addr is set' do
|
34
|
-
Webdrivers.configure do |config|
|
35
|
-
config.proxy_addr = 'proxy_addr'
|
36
|
-
config.proxy_port = '8080'
|
37
|
-
end
|
38
|
-
|
39
|
-
expect(http_object.instance_variable_get('@is_proxy_class')).to be true
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should not use the Proxy when proxy is not configured' do
|
43
|
-
expect(http_object.instance_variable_get('@is_proxy_class')).to be false
|
44
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class FakeDriver < Webdrivers::Common
|
4
|
+
def self.http_object
|
5
|
+
self.http
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "Support for proxies" do
|
10
|
+
let(:http_object) { FakeDriver.http_object }
|
11
|
+
|
12
|
+
before do
|
13
|
+
Webdrivers.proxy_addr = nil
|
14
|
+
Webdrivers.proxy_port = nil
|
15
|
+
Webdrivers.proxy_user = nil
|
16
|
+
Webdrivers.proxy_pass = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should allow the proxy values to be set via configuration' do
|
20
|
+
Webdrivers.configure do |config|
|
21
|
+
config.proxy_addr = 'proxy_addr'
|
22
|
+
config.proxy_port = '8888'
|
23
|
+
config.proxy_user = 'proxy_user'
|
24
|
+
config.proxy_pass = 'proxy_pass'
|
25
|
+
end
|
26
|
+
|
27
|
+
expect(Webdrivers.proxy_addr).to eql 'proxy_addr'
|
28
|
+
expect(Webdrivers.proxy_port).to eql '8888'
|
29
|
+
expect(Webdrivers.proxy_user).to eql 'proxy_user'
|
30
|
+
expect(Webdrivers.proxy_pass).to eql 'proxy_pass'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should use the Proxy when the proxy_addr is set' do
|
34
|
+
Webdrivers.configure do |config|
|
35
|
+
config.proxy_addr = 'proxy_addr'
|
36
|
+
config.proxy_port = '8080'
|
37
|
+
end
|
38
|
+
|
39
|
+
expect(http_object.instance_variable_get('@is_proxy_class')).to be true
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should not use the Proxy when proxy is not configured' do
|
43
|
+
expect(http_object.instance_variable_get('@is_proxy_class')).to be false
|
44
|
+
end
|
45
45
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
require "rspec"
|
2
|
-
require "webdrivers"
|
1
|
+
require "rspec"
|
2
|
+
require "webdrivers"
|
data/webdrivers.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.push File.expand_path('../lib', __dir__)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'webdrivers'
|
7
|
-
s.version = '3.7.
|
7
|
+
s.version = '3.7.1'
|
8
8
|
s.authors = ['Titus Fortner', 'Lakshya Kapoor']
|
9
9
|
s.email = %w[titusfortner@gmail.com kapoorlakshya@gmail.com]
|
10
10
|
s.homepage = 'https://github.com/titusfortner/webdrivers'
|
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: 3.7.
|
4
|
+
version: 3.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Titus Fortner
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-03-
|
12
|
+
date: 2019-03-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '0'
|
147
147
|
requirements: []
|
148
|
-
rubygems_version: 3.0.
|
148
|
+
rubygems_version: 3.0.2
|
149
149
|
signing_key:
|
150
150
|
specification_version: 4
|
151
151
|
summary: Easy download and use of browser drivers.
|