webdrivers 3.0.1 → 3.1.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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/webdrivers.rb +7 -0
- data/lib/webdrivers/chromedriver.rb +7 -4
- data/lib/webdrivers/common.rb +27 -6
- data/lib/webdrivers/geckodriver.rb +16 -11
- data/lib/webdrivers/iedriver.rb +6 -3
- data/lib/webdrivers/logger.rb +109 -0
- data/lib/webdrivers/mswebdriver.rb +18 -4
- data/spec/chromedriver_spec.rb +2 -2
- data/webdrivers.gemspec +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3e2cdd947c31a0a97e4679da3b987d008a240c1
|
4
|
+
data.tar.gz: 40cb38781d815e54008e917667ea22de595fc755
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d73bd319ce124e487211a5150406c219e2572b2cf6eb9e836492c81e9d7270a7324d0d04b7e6a924499e8610ce87a5476c155df410635749916c916637d92e63
|
7
|
+
data.tar.gz: f83caf1cecc3f29b55c84f20edcc53115327d1e6197d52f5159cd8b3a0bf8eee42f7d897635a382bfff5fdf190669fd49a9c94ad6469c61a8055325beea2d7a0
|
data/CHANGELOG.md
CHANGED
data/lib/webdrivers.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
require "webdrivers/selenium"
|
2
|
+
require "webdrivers/logger"
|
2
3
|
require "webdrivers/common"
|
3
4
|
require "webdrivers/chromedriver"
|
4
5
|
require "webdrivers/geckodriver"
|
5
6
|
require "webdrivers/iedriver"
|
6
7
|
require "webdrivers/mswebdriver"
|
8
|
+
|
9
|
+
module Webdrivers
|
10
|
+
def self.logger
|
11
|
+
@logger ||= Webdrivers::Logger.new
|
12
|
+
end
|
13
|
+
end
|
@@ -7,10 +7,10 @@ module Webdrivers
|
|
7
7
|
class << self
|
8
8
|
|
9
9
|
def current
|
10
|
+
Webdrivers.logger.debug "Checking current version"
|
10
11
|
return nil unless downloaded?
|
11
|
-
puts binary
|
12
12
|
string = %x(#{binary} --version)
|
13
|
-
|
13
|
+
Webdrivers.logger.debug "Current version of #{binary} is #{string}"
|
14
14
|
normalize string.match(/ChromeDriver (\d\.\d+)/)[1]
|
15
15
|
end
|
16
16
|
|
@@ -29,16 +29,19 @@ module Webdrivers
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def downloads
|
32
|
-
raise StandardError, "Can not
|
32
|
+
raise StandardError, "Can not download from website" unless site_available?
|
33
|
+
Webdrivers.logger.debug "Versions previously located on downloads site: #{@downloads.keys}" if @downloads
|
33
34
|
|
34
35
|
@downloads ||= begin
|
35
36
|
doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
|
36
37
|
items = doc.css("Contents Key").collect(&:text)
|
37
38
|
items.select! {|item| item.include?(platform)}
|
38
|
-
items.each_with_object({}) do |item, hash|
|
39
|
+
ds = items.each_with_object({}) do |item, hash|
|
39
40
|
key = normalize item[/^[^\/]+/]
|
40
41
|
hash[key] = "#{base_url}/#{item}"
|
41
42
|
end
|
43
|
+
Webdrivers.logger.debug "Versions now located on downloads site: #{ds.keys}"
|
44
|
+
ds
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
data/lib/webdrivers/common.rb
CHANGED
@@ -19,6 +19,7 @@ module Webdrivers
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def remove
|
22
|
+
Webdrivers.logger.debug "Deleting #{binary}"
|
22
23
|
FileUtils.rm_f binary
|
23
24
|
end
|
24
25
|
|
@@ -35,12 +36,21 @@ module Webdrivers
|
|
35
36
|
end
|
36
37
|
end
|
37
38
|
raise "Could not download #{url}" unless File.exists? filename
|
39
|
+
Webdrivers.logger.debug "Successfully downloaded #{filename}"
|
38
40
|
dcf = decompress_file(filename)
|
39
|
-
|
40
|
-
|
41
|
+
Webdrivers.logger.debug "Decompression Complete"
|
42
|
+
if dcf
|
43
|
+
Webdrivers.logger.debug "Deleting #{filename}"
|
44
|
+
FileUtils.rm_f filename
|
45
|
+
end
|
46
|
+
if respond_to? :extract_file
|
47
|
+
Webdrivers.logger.debug "Extracting #{dcf}"
|
48
|
+
extract_file(dcf)
|
49
|
+
end
|
41
50
|
end
|
42
|
-
raise "Could not
|
51
|
+
raise "Could not decompress #{filename} to get #{binary}" unless File.exists?(binary)
|
43
52
|
FileUtils.chmod "ugo+rx", binary
|
53
|
+
Webdrivers.logger.debug "Completed download and processing of #{binary}"
|
44
54
|
binary
|
45
55
|
end
|
46
56
|
|
@@ -51,17 +61,22 @@ module Webdrivers
|
|
51
61
|
end
|
52
62
|
|
53
63
|
def downloaded?
|
54
|
-
File.exist? binary
|
64
|
+
result = File.exist? binary
|
65
|
+
Webdrivers.logger.debug "File is already downloaded: #{result}"
|
66
|
+
result
|
55
67
|
end
|
56
68
|
|
57
69
|
def binary
|
58
70
|
File.join install_dir, file_name
|
59
71
|
end
|
60
72
|
|
73
|
+
# TODO - specify what gets rescued
|
61
74
|
def site_available?
|
62
|
-
|
75
|
+
open(base_url)
|
76
|
+
Webdrivers.logger.debug "Found Site: #{base_url}"
|
77
|
+
true
|
63
78
|
rescue
|
64
|
-
Webdrivers.logger.
|
79
|
+
Webdrivers.logger.debug "Site Not Available: #{base_url}"
|
65
80
|
false
|
66
81
|
end
|
67
82
|
|
@@ -80,12 +95,18 @@ module Webdrivers
|
|
80
95
|
def decompress_file(filename)
|
81
96
|
case filename
|
82
97
|
when /tar\.gz$/
|
98
|
+
Webdrivers.logger.debug "Decompressing tar"
|
83
99
|
untargz_file(filename)
|
84
100
|
when /tar\.bz2$/
|
101
|
+
Webdrivers.logger.debug "Decompressing bz2"
|
85
102
|
system "tar xjf #{filename}"
|
86
103
|
filename.gsub('.tar.bz2', '')
|
87
104
|
when /\.zip$/
|
105
|
+
Webdrivers.logger.debug "Decompressing zip"
|
88
106
|
unzip_file(filename)
|
107
|
+
else
|
108
|
+
Webdrivers.logger.debug "No Decompression needed"
|
109
|
+
nil
|
89
110
|
end
|
90
111
|
end
|
91
112
|
|
@@ -6,29 +6,34 @@ module Webdrivers
|
|
6
6
|
class << self
|
7
7
|
|
8
8
|
def current
|
9
|
+
Webdrivers.logger.debug "Checking current version"
|
9
10
|
return nil unless downloaded?
|
10
|
-
puts binary
|
11
11
|
string = %x(#{binary} --version)
|
12
|
-
|
12
|
+
Webdrivers.logger.debug "Current version of #{binary} is #{string}"
|
13
13
|
normalize string.match(/geckodriver (\d+\.\d+\.\d+)/)[1]
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
18
|
def normalize(string)
|
19
|
-
string.match(/(\d+)\.(\d+\.\d+)/).to_a.map {|v| v.tr('.', '')
|
19
|
+
string.match(/(\d+)\.(\d+\.\d+)/).to_a.map {|v| v.tr('.', '')}[1..-1].join('.').to_f
|
20
20
|
end
|
21
21
|
|
22
22
|
def downloads
|
23
23
|
raise StandardError, "Can not reach site" unless site_available?
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
Webdrivers.logger.debug "Versions previously located on downloads site: #{@downloads.keys}" if @downloads
|
25
|
+
|
26
|
+
@downloads ||= begin
|
27
|
+
doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
|
28
|
+
items = doc.css(".release-downloads a").collect {|item| item["href"]}
|
29
|
+
items.reject! {|item| item.include?('archive')}
|
30
|
+
items.select! {|item| item.include?(platform)}
|
31
|
+
ds = items.each_with_object({}) do |item, hash|
|
32
|
+
key = normalize item[/v(\d+\.\d+\.\d+)/, 1]
|
33
|
+
hash[key] = "https://github.com#{item}"
|
34
|
+
end
|
35
|
+
Webdrivers.logger.debug "Versions now located on downloads site: #{ds.keys}"
|
36
|
+
ds
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
data/lib/webdrivers/iedriver.rb
CHANGED
@@ -6,10 +6,10 @@ module Webdrivers
|
|
6
6
|
class << self
|
7
7
|
|
8
8
|
def current
|
9
|
+
Webdrivers.logger.debug "Checking current version"
|
9
10
|
return nil unless downloaded?
|
10
|
-
puts binary
|
11
11
|
string = %x(#{binary} --version)
|
12
|
-
|
12
|
+
Webdrivers.logger.debug "Current version of #{binary} is #{string}"
|
13
13
|
normalize string.match(/IEDriverServer.exe (\d\.\d+\.\d*\.\d*)/)[1]
|
14
14
|
end
|
15
15
|
|
@@ -29,15 +29,18 @@ module Webdrivers
|
|
29
29
|
|
30
30
|
def downloads
|
31
31
|
raise StandardError, "Can not reach site" unless site_available?
|
32
|
+
Webdrivers.logger.debug "Versions previously located on downloads site: #{@downloads.keys}" if @downloads
|
32
33
|
|
33
34
|
@downloads ||= begin
|
34
35
|
doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
|
35
36
|
items = doc.css("Key").collect(&:text)
|
36
37
|
items.select! { |item| item.include?('IEDriverServer_Win32') }
|
37
|
-
items.each_with_object({}) do |item, hash|
|
38
|
+
ds = items.each_with_object({}) do |item, hash|
|
38
39
|
key = normalize item[/^[^\/]+/]
|
39
40
|
hash[key] = "#{base_url}#{item}"
|
40
41
|
end
|
42
|
+
Webdrivers.logger.debug "Versions now located on downloads site: #{ds.keys}"
|
43
|
+
ds
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
@@ -0,0 +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
|
@@ -6,7 +6,9 @@ module Webdrivers
|
|
6
6
|
class << self
|
7
7
|
|
8
8
|
def current
|
9
|
+
Webdrivers.logger.debug "Checking current version"
|
9
10
|
version = %x(ver)
|
11
|
+
Webdrivers.logger.debug "Current version of Windows Build is #{version}"
|
10
12
|
version[/\d+\.\d+\.\d+/][/[^\.]\d+$/]
|
11
13
|
end
|
12
14
|
|
@@ -17,7 +19,7 @@ module Webdrivers
|
|
17
19
|
private
|
18
20
|
|
19
21
|
def normalize(string)
|
20
|
-
string.match(/(\d+)\.(\d+\.\d+)/).to_a.map {|v| v.tr('.', '')
|
22
|
+
string.match(/(\d+)\.(\d+\.\d+)/).to_a.map {|v| v.tr('.', '')}[1..-1].join('.').to_f
|
21
23
|
end
|
22
24
|
|
23
25
|
def file_name
|
@@ -27,10 +29,22 @@ module Webdrivers
|
|
27
29
|
def download_url(_version = nil)
|
28
30
|
raise StandardError, "Can not reach site" unless site_available?
|
29
31
|
|
30
|
-
|
31
|
-
|
32
|
+
case current.to_i
|
33
|
+
when 10240
|
34
|
+
Webdrivers.logger.debug "Attempting to Download Build for 10240"
|
35
|
+
"https://download.microsoft.com/download/8/D/0/8D0D08CF-790D-4586-B726-C6469A9ED49C/MicrosoftWebDriver.msi"
|
36
|
+
when 10586
|
37
|
+
Webdrivers.logger.debug "Attempting to Download Build for 10586"
|
38
|
+
"https://download.microsoft.com/download/C/0/7/C07EBF21-5305-4EC8-83B1-A6FCC8F93F45/MicrosoftWebDriver.msi"
|
39
|
+
when 14393
|
40
|
+
Webdrivers.logger.debug "Attempting to Download Build for 14393"
|
41
|
+
"https://download.microsoft.com/download/3/2/D/32D3E464-F2EF-490F-841B-05D53C848D15/MicrosoftWebDriver.exe"
|
42
|
+
when 15063
|
43
|
+
Webdrivers.logger.debug "Attempting to Download Build for 15063"
|
44
|
+
"https://download.microsoft.com/download/3/4/2/342316D7-EBE0-4F10-ABA2-AE8E0CDF36DD/MicrosoftWebDriver.exe"
|
32
45
|
else
|
33
|
-
|
46
|
+
Webdrivers.logger.debug "Attempting to Download Latest Insider's Version"
|
47
|
+
"https://download.microsoft.com/download/1/4/1/14156DA0-D40F-460A-B14D-1B264CA081A5/MicrosoftWebDriver.exe"
|
34
48
|
end
|
35
49
|
end
|
36
50
|
|
data/spec/chromedriver_spec.rb
CHANGED
@@ -34,11 +34,11 @@ describe Webdrivers::Chromedriver do
|
|
34
34
|
before { allow(chromedriver).to receive(:site_available?).and_return(false) }
|
35
35
|
|
36
36
|
it 'raises exception finding latest version' do
|
37
|
-
expect {chromedriver.latest}.to raise_error(StandardError, "Can not
|
37
|
+
expect {chromedriver.latest}.to raise_error(StandardError, "Can not download from website")
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'raises exception downloading' do
|
41
|
-
expect {chromedriver.download}.to raise_error(StandardError, "Can not
|
41
|
+
expect {chromedriver.download}.to raise_error(StandardError, "Can not download from website")
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
data/webdrivers.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "webdrivers"
|
6
|
-
s.version = "3.0
|
6
|
+
s.version = "3.1.0"
|
7
7
|
s.authors = ["Titus Fortner"]
|
8
8
|
s.email = ["titusfortner@gmail.com"]
|
9
9
|
s.homepage = "https://github.com/titusfortner/webdrivers"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webdrivers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Titus Fortner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -100,6 +100,7 @@ files:
|
|
100
100
|
- lib/webdrivers/common.rb
|
101
101
|
- lib/webdrivers/geckodriver.rb
|
102
102
|
- lib/webdrivers/iedriver.rb
|
103
|
+
- lib/webdrivers/logger.rb
|
103
104
|
- lib/webdrivers/mswebdriver.rb
|
104
105
|
- lib/webdrivers/selenium.rb
|
105
106
|
- spec/chromedriver_spec.rb
|
@@ -128,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
129
|
version: '0'
|
129
130
|
requirements: []
|
130
131
|
rubyforge_project:
|
131
|
-
rubygems_version: 2.
|
132
|
+
rubygems_version: 2.6.11
|
132
133
|
signing_key:
|
133
134
|
specification_version: 4
|
134
135
|
summary: Easy download and use of browser drivers.
|