selenium-webdriver 4.1.0 → 4.9.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/CHANGES +221 -1
- data/LICENSE +1 -1
- data/NOTICE +1 -1
- data/bin/linux/selenium-manager +0 -0
- data/bin/macos/selenium-manager +0 -0
- data/bin/windows/selenium-manager.exe +0 -0
- data/lib/selenium/server.rb +35 -26
- data/lib/selenium/webdriver/atoms/findElements.js +0 -0
- data/lib/selenium/webdriver/atoms/getAttribute.js +0 -0
- data/lib/selenium/webdriver/atoms/isDisplayed.js +0 -0
- data/lib/selenium/webdriver/atoms/mutationListener.js +0 -0
- data/lib/selenium/webdriver/atoms.rb +2 -3
- data/lib/selenium/webdriver/bidi/browsing_context.rb +88 -0
- data/lib/selenium/webdriver/bidi/browsing_context_info.rb +35 -0
- data/lib/selenium/webdriver/bidi/log/base_log_entry.rb +35 -0
- data/lib/selenium/webdriver/bidi/log/console_log_entry.rb +35 -0
- data/lib/selenium/webdriver/bidi/log/filter_by.rb +40 -0
- data/lib/selenium/webdriver/bidi/log/generic_log_entry.rb +33 -0
- data/lib/selenium/webdriver/bidi/log/javascript_log_entry.rb +33 -0
- data/lib/selenium/webdriver/bidi/log_inspector.rb +143 -0
- data/lib/selenium/webdriver/bidi/navigate_result.rb +33 -0
- data/lib/selenium/webdriver/bidi/session.rb +51 -0
- data/lib/selenium/webdriver/bidi.rb +56 -0
- data/lib/selenium/webdriver/chrome/driver.rb +9 -29
- data/lib/selenium/webdriver/chrome/features.rb +6 -68
- data/lib/selenium/webdriver/chrome/options.rb +3 -223
- data/lib/selenium/webdriver/chrome/profile.rb +3 -83
- data/lib/selenium/webdriver/chrome/service.rb +3 -23
- data/lib/selenium/webdriver/chrome.rb +0 -14
- data/lib/selenium/webdriver/chromium/driver.rb +61 -0
- data/lib/selenium/webdriver/chromium/features.rb +103 -0
- data/lib/selenium/webdriver/chromium/options.rb +261 -0
- data/lib/selenium/webdriver/chromium/profile.rb +113 -0
- data/lib/selenium/webdriver/chromium/service.rb +42 -0
- data/lib/selenium/webdriver/chromium.rb +32 -0
- data/lib/selenium/webdriver/common/action_builder.rb +72 -22
- data/lib/selenium/webdriver/common/child_process.rb +124 -0
- data/lib/selenium/webdriver/common/driver.rb +36 -74
- data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb +0 -1
- data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/{has_remote_status.rb → has_bidi.rb} +10 -5
- data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +10 -1
- data/lib/selenium/webdriver/common/driver_extensions/has_cdp.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +1 -4
- data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +1 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +1 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +2 -69
- data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +0 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +1 -3
- data/lib/selenium/webdriver/common/driver_finder.rb +43 -0
- data/lib/selenium/webdriver/common/element.rb +8 -8
- data/lib/selenium/webdriver/common/error.rb +1 -3
- data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +2 -2
- data/lib/selenium/webdriver/common/interactions/input_device.rb +10 -4
- data/lib/selenium/webdriver/common/interactions/interaction.rb +12 -25
- data/lib/selenium/webdriver/common/interactions/interactions.rb +24 -4
- data/lib/selenium/webdriver/common/interactions/key_actions.rb +5 -1
- data/lib/selenium/webdriver/common/interactions/key_input.rb +11 -27
- data/lib/selenium/webdriver/common/interactions/none_input.rb +10 -8
- data/lib/selenium/webdriver/common/interactions/pause.rb +49 -0
- data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +59 -70
- data/lib/selenium/webdriver/common/interactions/pointer_cancel.rb +45 -0
- data/lib/selenium/webdriver/common/interactions/pointer_event_properties.rb +63 -0
- data/lib/selenium/webdriver/common/interactions/pointer_input.rb +15 -84
- data/lib/selenium/webdriver/common/interactions/pointer_move.rb +60 -0
- data/lib/selenium/webdriver/common/interactions/pointer_press.rb +85 -0
- data/lib/selenium/webdriver/common/interactions/scroll.rb +59 -0
- data/lib/selenium/webdriver/common/interactions/scroll_origin.rb +48 -0
- data/lib/selenium/webdriver/common/interactions/typing_interaction.rb +54 -0
- data/lib/selenium/webdriver/common/interactions/wheel_actions.rb +113 -0
- data/lib/selenium/webdriver/common/interactions/wheel_input.rb +42 -0
- data/lib/selenium/webdriver/common/keys.rb +1 -0
- data/lib/selenium/webdriver/common/local_driver.rb +55 -0
- data/lib/selenium/webdriver/common/logger.rb +10 -2
- data/lib/selenium/webdriver/common/manager.rb +0 -27
- data/lib/selenium/webdriver/common/options.rb +32 -17
- data/lib/selenium/webdriver/common/platform.rb +8 -5
- data/lib/selenium/webdriver/common/profile_helper.rb +1 -1
- data/lib/selenium/webdriver/common/proxy.rb +1 -1
- data/lib/selenium/webdriver/common/search_context.rb +0 -6
- data/lib/selenium/webdriver/common/selenium_manager.rb +108 -0
- data/lib/selenium/webdriver/common/service.rb +11 -22
- data/lib/selenium/webdriver/common/service_manager.rb +5 -14
- data/lib/selenium/webdriver/common/shadow_root.rb +2 -3
- data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
- data/lib/selenium/webdriver/common/socket_poller.rb +1 -1
- data/lib/selenium/webdriver/common/takes_screenshot.rb +2 -3
- data/lib/selenium/webdriver/common/target_locator.rb +2 -3
- data/lib/selenium/webdriver/common/timeouts.rb +2 -2
- data/lib/selenium/webdriver/common/virtual_authenticator/credential.rb +85 -0
- data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator.rb +72 -0
- data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator_options.rb +62 -0
- data/lib/selenium/webdriver/common/websocket_connection.rb +164 -0
- data/lib/selenium/webdriver/common/window.rb +6 -6
- data/lib/selenium/webdriver/common/zipper.rb +1 -1
- data/lib/selenium/webdriver/common.rb +21 -3
- data/lib/selenium/webdriver/devtools/console_event.rb +0 -2
- data/lib/selenium/webdriver/devtools/exception_event.rb +0 -2
- data/lib/selenium/webdriver/devtools/mutation_event.rb +0 -2
- data/lib/selenium/webdriver/devtools/network_interceptor.rb +173 -0
- data/lib/selenium/webdriver/devtools/pinned_script.rb +0 -2
- data/lib/selenium/webdriver/devtools/request.rb +1 -3
- data/lib/selenium/webdriver/devtools/response.rb +1 -3
- data/lib/selenium/webdriver/devtools.rb +17 -114
- data/lib/selenium/webdriver/edge/driver.rb +9 -3
- data/lib/selenium/webdriver/edge/features.rb +4 -4
- data/lib/selenium/webdriver/edge/options.rb +3 -5
- data/lib/selenium/webdriver/edge/profile.rb +2 -2
- data/lib/selenium/webdriver/edge/service.rb +2 -6
- data/lib/selenium/webdriver/firefox/driver.rb +9 -2
- data/lib/selenium/webdriver/firefox/features.rb +6 -6
- data/lib/selenium/webdriver/firefox/options.rb +9 -3
- data/lib/selenium/webdriver/firefox/profile.rb +7 -11
- data/lib/selenium/webdriver/firefox/service.rb +0 -6
- data/lib/selenium/webdriver/firefox/util.rb +46 -0
- data/lib/selenium/webdriver/firefox.rb +1 -14
- data/lib/selenium/webdriver/ie/driver.rb +7 -1
- data/lib/selenium/webdriver/ie/service.rb +1 -7
- data/lib/selenium/webdriver/ie.rb +0 -14
- data/lib/selenium/webdriver/remote/{commands.rb → bridge/commands.rb} +15 -8
- data/lib/selenium/webdriver/remote/bridge.rb +59 -30
- data/lib/selenium/webdriver/remote/capabilities.rb +34 -12
- data/lib/selenium/webdriver/remote/driver.rb +19 -14
- data/lib/selenium/webdriver/remote/http/curb.rb +0 -2
- data/lib/selenium/webdriver/remote/http/default.rb +7 -12
- data/lib/selenium/webdriver/remote/response.rb +2 -3
- data/lib/selenium/webdriver/remote.rb +0 -1
- data/lib/selenium/webdriver/safari/driver.rb +7 -1
- data/lib/selenium/webdriver/safari/features.rb +0 -2
- data/lib/selenium/webdriver/safari/options.rb +5 -1
- data/lib/selenium/webdriver/safari/service.rb +0 -4
- data/lib/selenium/webdriver/safari.rb +1 -15
- data/lib/selenium/webdriver/support/color.rb +20 -20
- data/lib/selenium/webdriver/support/guards/guard.rb +0 -2
- data/lib/selenium/webdriver/support/guards/guard_condition.rb +1 -3
- data/lib/selenium/webdriver/support/guards.rb +1 -1
- data/lib/selenium/webdriver/support/relative_locator.rb +0 -1
- data/lib/selenium/webdriver/support/select.rb +3 -1
- data/lib/selenium/webdriver/version.rb +1 -1
- data/lib/selenium/webdriver.rb +4 -4
- data/selenium-webdriver.gemspec +13 -11
- metadata +70 -59
- data/lib/selenium/webdriver/remote/http/persistent.rb +0 -65
- data/lib/selenium/webdriver/support/cdp/domain.rb.erb +0 -63
- data/lib/selenium/webdriver/support/cdp_client_generator.rb +0 -108
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
module Selenium
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Remote
|
|
23
|
-
|
|
24
23
|
#
|
|
25
24
|
# Driver implementation for remote server.
|
|
26
25
|
# @api private
|
|
@@ -29,19 +28,13 @@ module Selenium
|
|
|
29
28
|
class Driver < WebDriver::Driver
|
|
30
29
|
include DriverExtensions::UploadsFiles
|
|
31
30
|
include DriverExtensions::HasSessionId
|
|
32
|
-
include DriverExtensions::HasRemoteStatus
|
|
33
31
|
|
|
34
|
-
def initialize(
|
|
35
|
-
|
|
36
|
-
if desired_capabilities.is_a?(Symbol)
|
|
37
|
-
unless Remote::Capabilities.respond_to?(desired_capabilities)
|
|
38
|
-
raise Error::WebDriverError, "invalid desired capability: #{desired_capabilities.inspect}"
|
|
39
|
-
end
|
|
32
|
+
def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
|
|
33
|
+
raise ArgumentError, "Can not set :service object on #{self.class}" if service
|
|
40
34
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
super
|
|
35
|
+
url ||= "http://#{Platform.localhost}:4444/wd/hub"
|
|
36
|
+
caps = process_options(options, capabilities)
|
|
37
|
+
super(caps: caps, url: url, **opts)
|
|
45
38
|
@bridge.file_detector = ->((filename, *)) { File.exist?(filename) && filename.to_s }
|
|
46
39
|
end
|
|
47
40
|
|
|
@@ -52,8 +45,20 @@ module Selenium
|
|
|
52
45
|
end
|
|
53
46
|
|
|
54
47
|
def devtools_version
|
|
55
|
-
capabilities['se:cdpVersion']&.split('.')&.first
|
|
56
|
-
|
|
48
|
+
cdp_version = capabilities['se:cdpVersion']&.split('.')&.first
|
|
49
|
+
raise Error::WebDriverError, 'DevTools is not supported by the Remote Server' unless cdp_version
|
|
50
|
+
|
|
51
|
+
Integer(cdp_version)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def process_options(options, capabilities)
|
|
55
|
+
if options && capabilities
|
|
56
|
+
msg = "Don't use both :options and :capabilities when initializing #{self.class}, prefer :options"
|
|
57
|
+
raise ArgumentError, msg
|
|
58
|
+
elsif options.nil? && capabilities.nil?
|
|
59
|
+
raise ArgumentError, "#{self.class} needs :options to be set"
|
|
60
|
+
end
|
|
61
|
+
options ? options.as_json : generate_capabilities(capabilities)
|
|
57
62
|
end
|
|
58
63
|
end # Driver
|
|
59
64
|
end # Remote
|
|
@@ -22,7 +22,6 @@ require 'curb'
|
|
|
22
22
|
module Selenium
|
|
23
23
|
module WebDriver
|
|
24
24
|
module Remote
|
|
25
|
-
|
|
26
25
|
module Http
|
|
27
26
|
#
|
|
28
27
|
# An alternative to the default Net::HTTP client.
|
|
@@ -38,7 +37,6 @@ module Selenium
|
|
|
38
37
|
#
|
|
39
38
|
|
|
40
39
|
class Curb < Common
|
|
41
|
-
|
|
42
40
|
def quit_errors
|
|
43
41
|
[Curl::Err::RecvError] + super
|
|
44
42
|
end
|
|
@@ -75,9 +75,10 @@ module Selenium
|
|
|
75
75
|
begin
|
|
76
76
|
request = new_request_for(verb, url, headers, payload)
|
|
77
77
|
response = response_for(request)
|
|
78
|
-
rescue Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EADDRINUSE
|
|
79
|
-
# a retry is sometimes needed
|
|
80
|
-
# run out of ephemeral ports
|
|
78
|
+
rescue Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EADDRINUSE, Errno::EADDRNOTAVAIL
|
|
79
|
+
# a retry is sometimes needed:
|
|
80
|
+
# on Windows XP where we may quickly run out of ephemeral ports
|
|
81
|
+
# when the port becomes temporarily unavailable
|
|
81
82
|
#
|
|
82
83
|
# A more robust solution is bumping the MaxUserPort setting
|
|
83
84
|
# as described here:
|
|
@@ -85,13 +86,6 @@ module Selenium
|
|
|
85
86
|
# http://msdn.microsoft.com/en-us/library/aa560610%28v=bts.20%29.aspx
|
|
86
87
|
raise if retries >= MAX_RETRIES
|
|
87
88
|
|
|
88
|
-
retries += 1
|
|
89
|
-
sleep 2
|
|
90
|
-
retry
|
|
91
|
-
rescue Errno::EADDRNOTAVAIL => e
|
|
92
|
-
# a retry is sometimes needed when the port becomes temporarily unavailable
|
|
93
|
-
raise if retries >= MAX_RETRIES
|
|
94
|
-
|
|
95
89
|
retries += 1
|
|
96
90
|
sleep 2
|
|
97
91
|
retry
|
|
@@ -106,6 +100,7 @@ module Selenium
|
|
|
106
100
|
|
|
107
101
|
request(:get, URI.parse(response['Location']), DEFAULT_HEADERS.dup, nil, redirects + 1)
|
|
108
102
|
else
|
|
103
|
+
WebDriver.logger.debug(" <<< #{response.instance_variable_get(:@header).inspect}")
|
|
109
104
|
create_response response.code, response.body, response.content_type
|
|
110
105
|
end
|
|
111
106
|
end
|
|
@@ -142,8 +137,8 @@ module Selenium
|
|
|
142
137
|
|
|
143
138
|
def proxy
|
|
144
139
|
@proxy ||= begin
|
|
145
|
-
proxy = ENV
|
|
146
|
-
no_proxy = ENV
|
|
140
|
+
proxy = ENV.fetch('http_proxy', nil) || ENV.fetch('HTTP_PROXY', nil)
|
|
141
|
+
no_proxy = ENV.fetch('no_proxy', nil) || ENV.fetch('NO_PROXY', nil)
|
|
147
142
|
|
|
148
143
|
if proxy
|
|
149
144
|
proxy = "http://#{proxy}" unless proxy.start_with?('http://')
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
module Selenium
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Remote
|
|
23
|
-
|
|
24
23
|
#
|
|
25
24
|
# @api private
|
|
26
25
|
#
|
|
@@ -74,7 +73,7 @@ module Selenium
|
|
|
74
73
|
end
|
|
75
74
|
|
|
76
75
|
def backtrace_from_remote(server_trace)
|
|
77
|
-
server_trace.
|
|
76
|
+
server_trace.filter_map do |frame|
|
|
78
77
|
next unless frame.is_a?(Hash)
|
|
79
78
|
|
|
80
79
|
file = frame['fileName']
|
|
@@ -87,7 +86,7 @@ module Selenium
|
|
|
87
86
|
meth = 'unknown' if meth.nil? || meth.empty?
|
|
88
87
|
|
|
89
88
|
"[remote server] #{file}:#{line}:in `#{meth}'"
|
|
90
|
-
|
|
89
|
+
end
|
|
91
90
|
end
|
|
92
91
|
|
|
93
92
|
def process_error
|
|
@@ -27,7 +27,6 @@ module Selenium
|
|
|
27
27
|
autoload :Driver, 'selenium/webdriver/remote/driver'
|
|
28
28
|
autoload :Response, 'selenium/webdriver/remote/response'
|
|
29
29
|
autoload :Capabilities, 'selenium/webdriver/remote/capabilities'
|
|
30
|
-
autoload :COMMANDS, 'selenium/webdriver/remote/commands'
|
|
31
30
|
|
|
32
31
|
module Http
|
|
33
32
|
autoload :Common, 'selenium/webdriver/remote/http/common'
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
module Selenium
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Safari
|
|
23
|
-
|
|
24
23
|
#
|
|
25
24
|
# Driver implementation for Safari.
|
|
26
25
|
# @api private
|
|
@@ -31,6 +30,13 @@ module Selenium
|
|
|
31
30
|
DriverExtensions::HasApplePermissions,
|
|
32
31
|
DriverExtensions::HasWebStorage].freeze
|
|
33
32
|
|
|
33
|
+
include LocalDriver
|
|
34
|
+
|
|
35
|
+
def initialize(capabilities: nil, options: nil, service: nil, url: nil, **opts)
|
|
36
|
+
caps, url = initialize_local_driver(capabilities, options, service, url)
|
|
37
|
+
super(caps: caps, url: url, **opts)
|
|
38
|
+
end
|
|
39
|
+
|
|
34
40
|
def browser
|
|
35
41
|
:safari
|
|
36
42
|
end
|
|
@@ -21,7 +21,6 @@ module Selenium
|
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Safari
|
|
23
23
|
module Features
|
|
24
|
-
|
|
25
24
|
# https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/WebDriverEndpointDoc/Commands/Commands.html
|
|
26
25
|
SAFARI_COMMANDS = {
|
|
27
26
|
get_permissions: [:get, 'session/:session_id/apple/permissions'],
|
|
@@ -44,7 +43,6 @@ module Selenium
|
|
|
44
43
|
def attach_debugger
|
|
45
44
|
execute :attach_debugger, {}, {}
|
|
46
45
|
end
|
|
47
|
-
|
|
48
46
|
end # Bridge
|
|
49
47
|
end # Safari
|
|
50
48
|
end # WebDriver
|
|
@@ -26,7 +26,7 @@ module Selenium
|
|
|
26
26
|
# @see https://developer.apple.com/documentation/webkit/about_webdriver_for_safari
|
|
27
27
|
CAPABILITIES = {automatic_inspection: 'safari:automaticInspection',
|
|
28
28
|
automatic_profiling: 'safari:automaticProfiling'}.freeze
|
|
29
|
-
BROWSER = 'safari'
|
|
29
|
+
BROWSER = Selenium::WebDriver::Safari.technology_preview? ? 'Safari Technology Preview' : 'safari'
|
|
30
30
|
|
|
31
31
|
def add_option(name, value = nil)
|
|
32
32
|
key = name.is_a?(Hash) ? name.keys.first : name
|
|
@@ -35,6 +35,10 @@ module Selenium
|
|
|
35
35
|
super
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
def as_json(*)
|
|
39
|
+
@options[:browser_name] = Safari.technology_preview? ? 'Safari Technology Preview' : 'safari'
|
|
40
|
+
super
|
|
41
|
+
end
|
|
38
42
|
end # Options
|
|
39
43
|
end # Safari
|
|
40
44
|
end # WebDriver
|
|
@@ -23,10 +23,6 @@ module Selenium
|
|
|
23
23
|
class Service < WebDriver::Service
|
|
24
24
|
DEFAULT_PORT = 7050
|
|
25
25
|
EXECUTABLE = 'safaridriver'
|
|
26
|
-
MISSING_TEXT = <<~ERROR
|
|
27
|
-
Unable to find Apple's safaridriver which comes with Safari 10.
|
|
28
|
-
More info at https://webkit.org/blog/6900/webdriver-support-in-safari-10/
|
|
29
|
-
ERROR
|
|
30
26
|
SHUTDOWN_SUPPORTED = false
|
|
31
27
|
end # Service
|
|
32
28
|
end # Safari
|
|
@@ -29,7 +29,7 @@ module Selenium
|
|
|
29
29
|
attr_accessor :use_technology_preview
|
|
30
30
|
|
|
31
31
|
def technology_preview
|
|
32
|
-
|
|
32
|
+
'/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver'
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def technology_preview!
|
|
@@ -53,20 +53,6 @@ module Selenium
|
|
|
53
53
|
|
|
54
54
|
raise Error::WebDriverError, 'Unable to find Safari'
|
|
55
55
|
end
|
|
56
|
-
|
|
57
|
-
def driver_path=(path)
|
|
58
|
-
WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path=',
|
|
59
|
-
'Selenium::WebDriver::Safari::Service#driver_path=',
|
|
60
|
-
id: :driver_path
|
|
61
|
-
Selenium::WebDriver::Safari::Service.driver_path = path
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def driver_path
|
|
65
|
-
WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path',
|
|
66
|
-
'Selenium::WebDriver::Safari::Service#driver_path',
|
|
67
|
-
id: :driver_path
|
|
68
|
-
Selenium::WebDriver::Safari::Service.driver_path
|
|
69
|
-
end
|
|
70
56
|
end
|
|
71
57
|
end # Safari
|
|
72
58
|
end # WebDriver
|
|
@@ -21,29 +21,29 @@ module Selenium
|
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Support
|
|
23
23
|
class Color
|
|
24
|
-
RGB_PATTERN =
|
|
24
|
+
RGB_PATTERN = /^\s*rgb\(\s*(\d{1,3})\s*,
|
|
25
25
|
\s*(\d{1,3})\s*,
|
|
26
|
-
\s*(\d{1,3})\s*\)\s
|
|
27
|
-
RGB_PCT_PATTERN =
|
|
26
|
+
\s*(\d{1,3})\s*\)\s*$/x.freeze
|
|
27
|
+
RGB_PCT_PATTERN = /^\s*rgb\(\s*(\d{1,3}|\d{1,2}\.\d+)%\s*,
|
|
28
28
|
\s*(\d{1,3}|\d{1,2}\.\d+)%\s*,
|
|
29
|
-
\s*(\d{1,3}|\d{1,2}\.\d+)%\s*\)\s
|
|
30
|
-
RGBA_PATTERN =
|
|
29
|
+
\s*(\d{1,3}|\d{1,2}\.\d+)%\s*\)\s*$/x.freeze
|
|
30
|
+
RGBA_PATTERN = /^\s*rgba\(\s*(\d{1,3})\s*,
|
|
31
31
|
\s*(\d{1,3})\s*,
|
|
32
32
|
\s*(\d{1,3})\s*,
|
|
33
|
-
\s*(0|1|0\.\d+)\s*\)\s
|
|
34
|
-
RGBA_PCT_PATTERN =
|
|
33
|
+
\s*(0|1|0\.\d+)\s*\)\s*$/x.freeze
|
|
34
|
+
RGBA_PCT_PATTERN = /^\s*rgba\(\s*(\d{1,3}|\d{1,2}\.\d+)
|
|
35
35
|
%\s*,\s*(\d{1,3}|\d{1,2}\.\d+)
|
|
36
36
|
%\s*,\s*(\d{1,3}|\d{1,2}\.\d+)
|
|
37
|
-
%\s*,\s*(0|1|0\.\d+)\s*\)\s
|
|
37
|
+
%\s*,\s*(0|1|0\.\d+)\s*\)\s*$/x.freeze
|
|
38
38
|
HEX_PATTERN = /#(\h{2})(\h{2})(\h{2})/.freeze
|
|
39
39
|
HEX3_PATTERN = /#(\h)(\h)(\h)/.freeze
|
|
40
|
-
HSL_PATTERN =
|
|
40
|
+
HSL_PATTERN = /^\s*hsl\(\s*(\d{1,3})\s*,
|
|
41
41
|
\s*(\d{1,3})%\s*,
|
|
42
|
-
\s*(\d{1,3})%\s*\)\s
|
|
43
|
-
HSLA_PATTERN =
|
|
42
|
+
\s*(\d{1,3})%\s*\)\s*$/x.freeze
|
|
43
|
+
HSLA_PATTERN = /^\s*hsla\(\s*(\d{1,3})\s*,
|
|
44
44
|
\s*(\d{1,3})%\s*,
|
|
45
45
|
\s*(\d{1,3})%\s*,
|
|
46
|
-
\s*(0|1|0\.\d+)\s*\)\s
|
|
46
|
+
\s*(0|1|0\.\d+)\s*\)\s*$/x.freeze
|
|
47
47
|
|
|
48
48
|
attr_reader :red, :green, :blue, :alpha
|
|
49
49
|
|
|
@@ -83,12 +83,12 @@ module Selenium
|
|
|
83
83
|
g = r
|
|
84
84
|
b = r
|
|
85
85
|
else
|
|
86
|
-
luminocity2 = l < 0.5 ? l * (
|
|
87
|
-
luminocity1 =
|
|
86
|
+
luminocity2 = l < 0.5 ? l * (s + 1) : l + s - (l * s)
|
|
87
|
+
luminocity1 = (l * 2) - luminocity2
|
|
88
88
|
|
|
89
|
-
r = hue_to_rgb(luminocity1, luminocity2, h + 1.0 / 3.0)
|
|
89
|
+
r = hue_to_rgb(luminocity1, luminocity2, h + (1.0 / 3.0))
|
|
90
90
|
g = hue_to_rgb(luminocity1, luminocity2, h)
|
|
91
|
-
b = hue_to_rgb(luminocity1, luminocity2, h - 1.0 / 3.0)
|
|
91
|
+
b = hue_to_rgb(luminocity1, luminocity2, h - (1.0 / 3.0))
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
new (r * 255).round, (g * 255).round, (b * 255).round, a
|
|
@@ -99,11 +99,11 @@ module Selenium
|
|
|
99
99
|
hue -= 1 if hue > 1.0
|
|
100
100
|
|
|
101
101
|
if hue < 1.0 / 6.0
|
|
102
|
-
(lum1 + (lum2 - lum1) * 6.0 * hue)
|
|
102
|
+
(lum1 + ((lum2 - lum1) * 6.0 * hue))
|
|
103
103
|
elsif hue < 1.0 / 2.0
|
|
104
104
|
lum2
|
|
105
105
|
elsif hue < 2.0 / 3.0
|
|
106
|
-
lum1 + (lum2 - lum1) * ((2.0 / 3.0) - hue) * 6.0
|
|
106
|
+
lum1 + ((lum2 - lum1) * ((2.0 / 3.0) - hue) * 6.0)
|
|
107
107
|
else
|
|
108
108
|
lum1
|
|
109
109
|
end
|
|
@@ -122,10 +122,10 @@ module Selenium
|
|
|
122
122
|
|
|
123
123
|
[red, green, blue, alpha] == [other.red, other.green, other.blue, other.alpha]
|
|
124
124
|
end
|
|
125
|
-
|
|
125
|
+
alias eql? ==
|
|
126
126
|
|
|
127
127
|
def hash
|
|
128
|
-
[red, green, blue, alpha
|
|
128
|
+
[red, green, blue, alpha, self.class].hash
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
def rgb
|
|
@@ -21,14 +21,12 @@ module Selenium
|
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Support
|
|
23
23
|
class Guards
|
|
24
|
-
|
|
25
24
|
#
|
|
26
25
|
# Guard derived from RSpec example metadata.
|
|
27
26
|
# @api private
|
|
28
27
|
#
|
|
29
28
|
|
|
30
29
|
class Guard
|
|
31
|
-
|
|
32
30
|
attr_reader :guarded, :type, :messages, :reason
|
|
33
31
|
|
|
34
32
|
def initialize(guarded, type, guards = nil)
|
|
@@ -21,7 +21,6 @@ module Selenium
|
|
|
21
21
|
module WebDriver
|
|
22
22
|
module Support
|
|
23
23
|
class Guards
|
|
24
|
-
|
|
25
24
|
#
|
|
26
25
|
# Guard derived from RSpec example metadata.
|
|
27
26
|
# @api private
|
|
@@ -32,7 +31,7 @@ module Selenium
|
|
|
32
31
|
|
|
33
32
|
def initialize(name, condition = nil, &blk)
|
|
34
33
|
@name = name
|
|
35
|
-
@execution = if
|
|
34
|
+
@execution = if blk
|
|
36
35
|
proc(&blk)
|
|
37
36
|
else
|
|
38
37
|
proc { |guarded| guarded.include?(condition) }
|
|
@@ -44,7 +43,6 @@ module Selenium
|
|
|
44
43
|
|
|
45
44
|
list.empty? || @execution.call(list)
|
|
46
45
|
end
|
|
47
|
-
|
|
48
46
|
end # GuardCondition
|
|
49
47
|
end # Guards
|
|
50
48
|
end # Support
|
|
@@ -48,7 +48,7 @@ module Selenium
|
|
|
48
48
|
def disposition
|
|
49
49
|
if !skipping_guard.nil?
|
|
50
50
|
[:skip, skipping_guard.message]
|
|
51
|
-
elsif !pending_guard.nil? && ENV
|
|
51
|
+
elsif !pending_guard.nil? && ENV.fetch('SKIP_PENDING', nil)
|
|
52
52
|
[:skip, pending_guard.message]
|
|
53
53
|
elsif !pending_guard.nil?
|
|
54
54
|
[:pending, pending_guard.message]
|
|
@@ -86,7 +86,7 @@ module Selenium
|
|
|
86
86
|
#
|
|
87
87
|
# <option value="foo">Bar</option>
|
|
88
88
|
#
|
|
89
|
-
# When
|
|
89
|
+
# When selecting by :value, selects all options that have a value matching the argument. That is, when given "foo" this
|
|
90
90
|
# would select an option like:
|
|
91
91
|
#
|
|
92
92
|
# <option value="foo">Bar</option>
|
|
@@ -215,6 +215,8 @@ module Selenium
|
|
|
215
215
|
end
|
|
216
216
|
|
|
217
217
|
def select_option(option)
|
|
218
|
+
raise Error::UnsupportedOperationError, 'You may not select a disabled option' unless option.enabled?
|
|
219
|
+
|
|
218
220
|
option.click unless option.selected?
|
|
219
221
|
end
|
|
220
222
|
|
data/lib/selenium/webdriver.rb
CHANGED
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
# specific language governing permissions and limitations
|
|
18
18
|
# under the License.
|
|
19
19
|
|
|
20
|
-
require 'childprocess'
|
|
21
20
|
require 'tmpdir'
|
|
22
21
|
require 'fileutils'
|
|
23
22
|
require 'date'
|
|
@@ -34,8 +33,9 @@ module Selenium
|
|
|
34
33
|
Point = Struct.new(:x, :y)
|
|
35
34
|
Dimension = Struct.new(:width, :height)
|
|
36
35
|
Rectangle = Struct.new(:x, :y, :width, :height)
|
|
37
|
-
Location = Struct.new(:latitude, :longitude, :altitude)
|
|
38
36
|
|
|
37
|
+
autoload :BiDi, 'selenium/webdriver/bidi'
|
|
38
|
+
autoload :Chromium, 'selenium/webdriver/chromium'
|
|
39
39
|
autoload :Chrome, 'selenium/webdriver/chrome'
|
|
40
40
|
autoload :DevTools, 'selenium/webdriver/devtools'
|
|
41
41
|
autoload :Edge, 'selenium/webdriver/edge'
|
|
@@ -94,8 +94,8 @@ module Selenium
|
|
|
94
94
|
# @return [Logger]
|
|
95
95
|
#
|
|
96
96
|
|
|
97
|
-
def self.logger
|
|
98
|
-
@logger ||= WebDriver::Logger.new
|
|
97
|
+
def self.logger(**opts)
|
|
98
|
+
@logger ||= WebDriver::Logger.new('Selenium', **opts)
|
|
99
99
|
end
|
|
100
100
|
end # WebDriver
|
|
101
101
|
end # Selenium
|
data/selenium-webdriver.gemspec
CHANGED
|
@@ -24,11 +24,13 @@ Gem::Specification.new do |s|
|
|
|
24
24
|
s.homepage = 'https://selenium.dev'
|
|
25
25
|
s.metadata = {
|
|
26
26
|
'changelog_uri' => 'https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES',
|
|
27
|
-
'
|
|
27
|
+
'github_repo' => 'ssh://github.com/SeleniumHQ/selenium',
|
|
28
|
+
'source_code_uri' => 'https://github.com/SeleniumHQ/selenium/tree/trunk/rb',
|
|
29
|
+
'rubygems_mfa_required' => 'true'
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
s.required_rubygems_version = Gem::Requirement.new('> 1.3.1') if s.respond_to? :required_rubygems_version=
|
|
31
|
-
s.required_ruby_version = Gem::Requirement.new('>= 2.
|
|
33
|
+
s.required_ruby_version = Gem::Requirement.new('>= 2.7')
|
|
32
34
|
|
|
33
35
|
s.files = [
|
|
34
36
|
'CHANGES',
|
|
@@ -40,23 +42,23 @@ Gem::Specification.new do |s|
|
|
|
40
42
|
'lib/selenium-webdriver.rb',
|
|
41
43
|
'lib/selenium/server.rb',
|
|
42
44
|
'lib/selenium/webdriver.rb'
|
|
43
|
-
]
|
|
45
|
+
]
|
|
46
|
+
s.files += Dir['bin/**/*']
|
|
47
|
+
s.files += Dir['lib/selenium/webdriver/**/*']
|
|
44
48
|
|
|
49
|
+
s.bindir = 'bin'
|
|
45
50
|
s.require_paths = ['lib']
|
|
46
51
|
|
|
47
|
-
s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 5.0']
|
|
48
52
|
s.add_runtime_dependency 'rexml', ['~> 3.2', '>= 3.2.5']
|
|
49
|
-
s.add_runtime_dependency 'rubyzip', ['>= 1.2.2']
|
|
53
|
+
s.add_runtime_dependency 'rubyzip', ['>= 1.2.2', '< 3.0']
|
|
54
|
+
s.add_runtime_dependency 'websocket', ['~> 1.0']
|
|
50
55
|
|
|
51
|
-
# childprocess requires ffi on windows but doesn't declare it in its dependencies
|
|
52
|
-
s.add_development_dependency 'ffi'
|
|
53
56
|
s.add_development_dependency 'pry', ['~> 0.14']
|
|
54
57
|
s.add_development_dependency 'rack', ['~> 2.0']
|
|
55
|
-
s.add_development_dependency 'rake'
|
|
56
58
|
s.add_development_dependency 'rspec', ['~> 3.0']
|
|
57
|
-
s.add_development_dependency 'rubocop', ['~> 1.
|
|
58
|
-
s.add_development_dependency 'rubocop-performance'
|
|
59
|
-
s.add_development_dependency 'rubocop-rspec'
|
|
59
|
+
s.add_development_dependency 'rubocop', ['~> 1.42']
|
|
60
|
+
s.add_development_dependency 'rubocop-performance', ['~> 1.15']
|
|
61
|
+
s.add_development_dependency 'rubocop-rspec', ['~> 2.16']
|
|
60
62
|
s.add_development_dependency 'webmock', ['~> 3.5']
|
|
61
63
|
s.add_development_dependency 'webrick', ['~> 1.7']
|
|
62
64
|
s.add_development_dependency 'yard', ['~> 0.9.11']
|