webdrivers 3.9.1 → 3.9.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,72 +1,80 @@
1
- # frozen_string_literal: true
2
-
3
- require 'nokogiri'
4
- require 'webdrivers/common'
5
-
6
- module Webdrivers
7
- class Geckodriver < Common
8
- class << self
9
- def current_version
10
- Webdrivers.logger.debug 'Checking current version'
11
- return nil unless exists?
12
-
13
- version = binary_version
14
- return nil if version.nil?
15
-
16
- normalize_version version.match(/geckodriver (\d+\.\d+\.\d+)/)[1]
17
- end
18
-
19
- def latest_version
20
- @latest_version ||= with_cache(file_name) { normalize_version(Network.get_url("#{base_url}/latest")[/[^v]*$/]) }
21
- end
22
-
23
- private
24
-
25
- def file_name
26
- System.platform == 'win' ? 'geckodriver.exe' : 'geckodriver'
27
- end
28
-
29
- def base_url
30
- 'https://github.com/mozilla/geckodriver/releases'
31
- end
32
-
33
- def download_url
34
- @download_url ||= if required_version == EMPTY_VERSION
35
- direct_url(latest_version)
36
- else
37
- direct_url(required_version)
38
- end
39
- end
40
-
41
- def direct_url(version)
42
- "#{base_url}/download/v#{version}/geckodriver-v#{version}-#{platform_ext}"
43
- end
44
-
45
- def platform_ext
46
- case System.platform
47
- when 'linux'
48
- "linux#{System.bitsize}.tar.gz"
49
- when 'mac'
50
- 'macos.tar.gz'
51
- when 'win'
52
- "win#{System.bitsize}.zip"
53
- end
54
- end
55
- end
56
- end
57
- end
58
-
59
- if ::Selenium::WebDriver::Service.respond_to? :driver_path=
60
- ::Selenium::WebDriver::Firefox::Service.driver_path = proc { ::Webdrivers::Geckodriver.update }
61
- else
62
- # v3.141.0 and lower
63
- module Selenium
64
- module WebDriver
65
- module Firefox
66
- def self.driver_path
67
- @driver_path ||= Webdrivers::Geckodriver.update
68
- end
69
- end
70
- end
71
- end
72
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'nokogiri'
4
+ require 'webdrivers/common'
5
+
6
+ module Webdrivers
7
+ class Geckodriver < Common
8
+ class << self
9
+ #
10
+ # Returns current geckodriver version.
11
+ #
12
+ # @return [Gem::Version]
13
+ def current_version
14
+ Webdrivers.logger.debug 'Checking current version'
15
+ return nil unless exists?
16
+
17
+ version = binary_version
18
+ return nil if version.nil?
19
+
20
+ normalize_version version.match(/geckodriver (\d+\.\d+\.\d+)/)[1]
21
+ end
22
+
23
+ #
24
+ # Returns latest available geckodriver version.
25
+ #
26
+ # @return [Gem::Version]
27
+ def latest_version
28
+ @latest_version ||= with_cache(file_name) { normalize_version(Network.get_url("#{base_url}/latest")[/[^v]*$/]) }
29
+ end
30
+
31
+ private
32
+
33
+ def file_name
34
+ System.platform == 'win' ? 'geckodriver.exe' : 'geckodriver'
35
+ end
36
+
37
+ def base_url
38
+ 'https://github.com/mozilla/geckodriver/releases'
39
+ end
40
+
41
+ def download_url
42
+ @download_url ||= if required_version == EMPTY_VERSION
43
+ direct_url(latest_version)
44
+ else
45
+ direct_url(required_version)
46
+ end
47
+ end
48
+
49
+ def direct_url(version)
50
+ "#{base_url}/download/v#{version}/geckodriver-v#{version}-#{platform_ext}"
51
+ end
52
+
53
+ def platform_ext
54
+ case System.platform
55
+ when 'linux'
56
+ "linux#{System.bitsize}.tar.gz"
57
+ when 'mac'
58
+ 'macos.tar.gz'
59
+ when 'win'
60
+ "win#{System.bitsize}.zip"
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ if ::Selenium::WebDriver::Service.respond_to? :driver_path=
68
+ ::Selenium::WebDriver::Firefox::Service.driver_path = proc { ::Webdrivers::Geckodriver.update }
69
+ else
70
+ # v3.141.0 and lower
71
+ module Selenium
72
+ module WebDriver
73
+ module Firefox
74
+ def self.driver_path
75
+ @driver_path ||= Webdrivers::Geckodriver.update
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -1,62 +1,70 @@
1
- # frozen_string_literal: true
2
-
3
- require 'nokogiri'
4
- require 'rubygems/version'
5
- require 'webdrivers/common'
6
-
7
- module Webdrivers
8
- class IEdriver < Common
9
- class << self
10
- def current_version
11
- Webdrivers.logger.debug 'Checking current version'
12
- return nil unless exists?
13
-
14
- version = binary_version
15
- return nil if version.nil?
16
-
17
- normalize_version version.match(/IEDriverServer.exe (\d\.\d+\.\d+)/)[1]
18
- end
19
-
20
- def latest_version
21
- @latest_version ||= with_cache(file_name) { downloads.keys.max }
22
- end
23
-
24
- private
25
-
26
- def file_name
27
- 'IEDriverServer.exe'
28
- end
29
-
30
- def base_url
31
- 'https://selenium-release.storage.googleapis.com/'
32
- end
33
-
34
- def downloads
35
- doc = Nokogiri::XML.parse(Network.get(base_url))
36
- items = doc.css('Key').collect(&:text)
37
- items.select! { |item| item.include?('IEDriverServer_Win32') }
38
- ds = items.each_with_object({}) do |item, hash|
39
- key = normalize_version item[/([^_]+)\.zip/, 1]
40
- hash[key] = "#{base_url}#{item}"
41
- end
42
- Webdrivers.logger.debug "Versions now located on downloads site: #{ds.keys}"
43
- ds
44
- end
45
- end
46
- end
47
- end
48
-
49
- if ::Selenium::WebDriver::Service.respond_to? :driver_path=
50
- ::Selenium::WebDriver::IE::Service.driver_path = proc { ::Webdrivers::IEdriver.update }
51
- else
52
- # v3.141.0 and lower
53
- module Selenium
54
- module WebDriver
55
- module IE
56
- def self.driver_path
57
- @driver_path ||= Webdrivers::IEdriver.update
58
- end
59
- end
60
- end
61
- end
62
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'nokogiri'
4
+ require 'rubygems/version'
5
+ require 'webdrivers/common'
6
+
7
+ module Webdrivers
8
+ class IEdriver < Common
9
+ class << self
10
+ #
11
+ # Returns current IEDriverServer.exe version.
12
+ #
13
+ # @return [Gem::Version]
14
+ def current_version
15
+ Webdrivers.logger.debug 'Checking current version'
16
+ return nil unless exists?
17
+
18
+ version = binary_version
19
+ return nil if version.nil?
20
+
21
+ normalize_version version.match(/IEDriverServer.exe (\d\.\d+\.\d+)/)[1]
22
+ end
23
+
24
+ #
25
+ # Returns latest available IEDriverServer.exe version.
26
+ #
27
+ # @return [Gem::Version]
28
+ def latest_version
29
+ @latest_version ||= with_cache(file_name) { downloads.keys.max }
30
+ end
31
+
32
+ private
33
+
34
+ def file_name
35
+ 'IEDriverServer.exe'
36
+ end
37
+
38
+ def base_url
39
+ 'https://selenium-release.storage.googleapis.com/'
40
+ end
41
+
42
+ def downloads
43
+ doc = Nokogiri::XML.parse(Network.get(base_url))
44
+ items = doc.css('Key').collect(&:text)
45
+ items.select! { |item| item.include?('IEDriverServer_Win32') }
46
+ ds = items.each_with_object({}) do |item, hash|
47
+ key = normalize_version item[/([^_]+)\.zip/, 1]
48
+ hash[key] = "#{base_url}#{item}"
49
+ end
50
+ Webdrivers.logger.debug "Versions now located on downloads site: #{ds.keys}"
51
+ ds
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ if ::Selenium::WebDriver::Service.respond_to? :driver_path=
58
+ ::Selenium::WebDriver::IE::Service.driver_path = proc { ::Webdrivers::IEdriver.update }
59
+ else
60
+ # v3.141.0 and lower
61
+ module Selenium
62
+ module WebDriver
63
+ module IE
64
+ def self.driver_path
65
+ @driver_path ||= Webdrivers::IEdriver.update
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -1,111 +1,111 @@
1
- # frozen_string_literal: true
2
-
3
- require 'forwardable'
4
- require 'logger'
5
-
6
- # Code adapted from Selenium Implementation
7
- # https://github.com/SeleniumHQ/selenium/blob/master/rb/lib/selenium/webdriver/common/logger.rb
8
-
9
- module Webdrivers
10
- #
11
- # @example Enable full logging
12
- # Webdrivers.logger.level = :debug
13
- #
14
- # @example Log to file
15
- # Webdrivers.logger.output = 'webdrivers.log'
16
- #
17
- # @example Use logger manually
18
- # Webdrivers.logger.info('This is info message')
19
- # Webdrivers.logger.warn('This is warning message')
20
- #
21
- class Logger
22
- extend Forwardable
23
- include ::Logger::Severity
24
-
25
- def_delegators :@logger, :debug, :debug?,
26
- :info, :info?,
27
- :warn, :warn?,
28
- :error, :error?,
29
- :fatal, :fatal?,
30
- :level
31
-
32
- def initialize
33
- @logger = create_logger($stdout)
34
- end
35
-
36
- def output=(io)
37
- # `Logger#reopen` was added in Ruby 2.3
38
- if @logger.respond_to?(:reopen)
39
- @logger.reopen(io)
40
- else
41
- @logger = create_logger(io)
42
- end
43
- end
44
-
45
- #
46
- # For Ruby < 2.3 compatibility
47
- # Based on https://github.com/ruby/ruby/blob/ruby_2_3/lib/logger.rb#L250
48
- #
49
-
50
- def level=(severity)
51
- if severity.is_a?(Integer)
52
- @logger.level = severity
53
- else
54
- case severity.to_s.downcase
55
- when 'debug'
56
- @logger.level = DEBUG
57
- when 'info'
58
- @logger.level = INFO
59
- when 'warn'
60
- @logger.level = WARN
61
- when 'error'
62
- @logger.level = ERROR
63
- when 'fatal'
64
- @logger.level = FATAL
65
- when 'unknown'
66
- @logger.level = UNKNOWN
67
- else
68
- raise ArgumentError, "invalid log level: #{severity}"
69
- end
70
- end
71
- end
72
-
73
- #
74
- # Returns IO object used by logger internally.
75
- #
76
- # Normally, we would have never needed it, but we want to
77
- # use it as IO object for all child processes to ensure their
78
- # output is redirected there.
79
- #
80
- # It is only used in debug level, in other cases output is suppressed.
81
- #
82
- # @api private
83
- #
84
- def io
85
- @logger.instance_variable_get(:@logdev).instance_variable_get(:@dev)
86
- end
87
-
88
- #
89
- # Marks code as deprecated with replacement.
90
- #
91
- # @param [String] old
92
- # @param [String] new
93
- #
94
- def deprecate(old, new)
95
- warn "[DEPRECATION] #{old} is deprecated. Use #{new} instead."
96
- end
97
-
98
- private
99
-
100
- def create_logger(output)
101
- logger = ::Logger.new(output)
102
- logger.progname = 'Webdrivers'
103
- logger.level = ($DEBUG ? DEBUG : WARN)
104
- logger.formatter = proc do |severity, time, progname, msg|
105
- "#{time.strftime('%F %T')} #{severity} #{progname} #{msg}\n"
106
- end
107
-
108
- logger
109
- end
110
- end
111
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+ require 'logger'
5
+
6
+ # Code adapted from Selenium Implementation
7
+ # https://github.com/SeleniumHQ/selenium/blob/master/rb/lib/selenium/webdriver/common/logger.rb
8
+
9
+ module Webdrivers
10
+ #
11
+ # @example Enable full logging
12
+ # Webdrivers.logger.level = :debug
13
+ #
14
+ # @example Log to file
15
+ # Webdrivers.logger.output = 'webdrivers.log'
16
+ #
17
+ # @example Use logger manually
18
+ # Webdrivers.logger.info('This is info message')
19
+ # Webdrivers.logger.warn('This is warning message')
20
+ #
21
+ class Logger
22
+ extend Forwardable
23
+ include ::Logger::Severity
24
+
25
+ def_delegators :@logger, :debug, :debug?,
26
+ :info, :info?,
27
+ :warn, :warn?,
28
+ :error, :error?,
29
+ :fatal, :fatal?,
30
+ :level
31
+
32
+ def initialize
33
+ @logger = create_logger($stdout)
34
+ end
35
+
36
+ def output=(io)
37
+ # `Logger#reopen` was added in Ruby 2.3
38
+ if @logger.respond_to?(:reopen)
39
+ @logger.reopen(io)
40
+ else
41
+ @logger = create_logger(io)
42
+ end
43
+ end
44
+
45
+ #
46
+ # For Ruby < 2.3 compatibility
47
+ # Based on https://github.com/ruby/ruby/blob/ruby_2_3/lib/logger.rb#L250
48
+ #
49
+
50
+ def level=(severity)
51
+ if severity.is_a?(Integer)
52
+ @logger.level = severity
53
+ else
54
+ case severity.to_s.downcase
55
+ when 'debug'
56
+ @logger.level = DEBUG
57
+ when 'info'
58
+ @logger.level = INFO
59
+ when 'warn'
60
+ @logger.level = WARN
61
+ when 'error'
62
+ @logger.level = ERROR
63
+ when 'fatal'
64
+ @logger.level = FATAL
65
+ when 'unknown'
66
+ @logger.level = UNKNOWN
67
+ else
68
+ raise ArgumentError, "invalid log level: #{severity}"
69
+ end
70
+ end
71
+ end
72
+
73
+ #
74
+ # Returns IO object used by logger internally.
75
+ #
76
+ # Normally, we would have never needed it, but we want to
77
+ # use it as IO object for all child processes to ensure their
78
+ # output is redirected there.
79
+ #
80
+ # It is only used in debug level, in other cases output is suppressed.
81
+ #
82
+ # @api private
83
+ #
84
+ def io
85
+ @logger.instance_variable_get(:@logdev).instance_variable_get(:@dev)
86
+ end
87
+
88
+ #
89
+ # Marks code as deprecated with replacement.
90
+ #
91
+ # @param [String] old
92
+ # @param [String] new
93
+ #
94
+ def deprecate(old, new)
95
+ warn "[DEPRECATION] #{old} is deprecated. Use #{new} instead."
96
+ end
97
+
98
+ private
99
+
100
+ def create_logger(output)
101
+ logger = ::Logger.new(output)
102
+ logger.progname = 'Webdrivers'
103
+ logger.level = ($DEBUG ? DEBUG : WARN)
104
+ logger.formatter = proc do |severity, time, progname, msg|
105
+ "#{time.strftime('%F %T')} #{severity} #{progname} #{msg}\n"
106
+ end
107
+
108
+ logger
109
+ end
110
+ end
111
+ end