selenium-webdriver 4.0.0.alpha1 → 4.0.0.alpha6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGES +139 -1
- data/LICENSE +1 -1
- data/lib/selenium/server.rb +3 -3
- data/lib/selenium/webdriver.rb +11 -7
- data/lib/selenium/webdriver/atoms/findElements.js +122 -0
- data/lib/selenium/webdriver/atoms/getAttribute.js +84 -7
- data/lib/selenium/webdriver/atoms/isDisplayed.js +75 -77
- data/lib/selenium/webdriver/chrome.rb +10 -9
- data/lib/selenium/webdriver/chrome/bridge.rb +20 -4
- data/lib/selenium/webdriver/chrome/driver.rb +3 -52
- data/lib/selenium/webdriver/chrome/options.rb +97 -57
- data/lib/selenium/webdriver/chrome/profile.rb +2 -2
- data/lib/selenium/webdriver/chrome/service.rb +0 -4
- data/lib/selenium/webdriver/common.rb +3 -0
- data/lib/selenium/webdriver/common/driver.rb +76 -17
- data/lib/selenium/webdriver/common/driver_extensions/{has_touch_screen.rb → has_devtools.rb} +10 -8
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -1
- data/lib/selenium/webdriver/common/logger.rb +48 -16
- data/lib/selenium/webdriver/common/manager.rb +5 -0
- data/lib/selenium/webdriver/common/options.rb +60 -121
- data/lib/selenium/webdriver/common/platform.rb +3 -0
- data/lib/selenium/webdriver/common/port_prober.rb +4 -6
- data/lib/selenium/webdriver/common/profile_helper.rb +10 -2
- data/lib/selenium/webdriver/common/proxy.rb +0 -0
- data/lib/selenium/webdriver/common/search_context.rb +3 -2
- data/lib/selenium/webdriver/common/service.rb +30 -113
- data/lib/selenium/webdriver/common/service_manager.rb +151 -0
- data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
- data/lib/selenium/webdriver/common/wait.rb +1 -1
- data/lib/selenium/webdriver/devtools.rb +118 -0
- data/lib/selenium/webdriver/devtools/accessibility.rb +62 -0
- data/lib/selenium/webdriver/devtools/animation.rb +98 -0
- data/lib/selenium/webdriver/devtools/application_cache.rb +64 -0
- data/lib/selenium/webdriver/devtools/audits.rb +61 -0
- data/lib/selenium/webdriver/devtools/background_service.rb +67 -0
- data/lib/selenium/webdriver/devtools/browser.rb +123 -0
- data/lib/selenium/webdriver/devtools/cache_storage.rb +73 -0
- data/lib/selenium/webdriver/devtools/cast.rb +70 -0
- data/lib/selenium/webdriver/devtools/console.rb +57 -0
- data/lib/selenium/webdriver/devtools/css.rb +165 -0
- data/lib/selenium/webdriver/devtools/database.rb +64 -0
- data/lib/selenium/webdriver/devtools/debugger.rb +229 -0
- data/lib/selenium/webdriver/devtools/device_orientation.rb +53 -0
- data/lib/selenium/webdriver/devtools/dom.rb +320 -0
- data/lib/selenium/webdriver/devtools/domdebugger.rb +93 -0
- data/lib/selenium/webdriver/devtools/domsnapshot.rb +65 -0
- data/lib/selenium/webdriver/devtools/domstorage.rb +79 -0
- data/lib/selenium/webdriver/devtools/emulation.rb +180 -0
- data/lib/selenium/webdriver/devtools/fetch.rb +97 -0
- data/lib/selenium/webdriver/devtools/headless_experimental.rb +61 -0
- data/lib/selenium/webdriver/devtools/heap_profiler.rb +107 -0
- data/lib/selenium/webdriver/devtools/indexed_db.rb +100 -0
- data/lib/selenium/webdriver/devtools/input.rb +140 -0
- data/lib/selenium/webdriver/devtools/inspector.rb +55 -0
- data/lib/selenium/webdriver/devtools/io.rb +59 -0
- data/lib/selenium/webdriver/devtools/layer_tree.rb +95 -0
- data/lib/selenium/webdriver/devtools/log.rb +66 -0
- data/lib/selenium/webdriver/devtools/media.rb +57 -0
- data/lib/selenium/webdriver/devtools/memory.rb +86 -0
- data/lib/selenium/webdriver/devtools/network.rb +228 -0
- data/lib/selenium/webdriver/devtools/overlay.rb +157 -0
- data/lib/selenium/webdriver/devtools/page.rb +374 -0
- data/lib/selenium/webdriver/devtools/performance.rb +63 -0
- data/lib/selenium/webdriver/devtools/profiler.rb +111 -0
- data/lib/selenium/webdriver/devtools/runtime.rb +193 -0
- data/lib/selenium/webdriver/devtools/schema.rb +46 -0
- data/lib/selenium/webdriver/devtools/security.rb +71 -0
- data/lib/selenium/webdriver/devtools/service_worker.rb +116 -0
- data/lib/selenium/webdriver/devtools/storage.rb +95 -0
- data/lib/selenium/webdriver/devtools/system_info.rb +50 -0
- data/lib/selenium/webdriver/devtools/target.rb +141 -0
- data/lib/selenium/webdriver/devtools/tethering.rb +55 -0
- data/lib/selenium/webdriver/devtools/tracing.rb +76 -0
- data/lib/selenium/webdriver/devtools/web_audio.rb +70 -0
- data/lib/selenium/webdriver/devtools/web_authn.rb +94 -0
- data/lib/selenium/webdriver/edge.rb +29 -9
- data/lib/selenium/webdriver/{firefox/util.rb → edge_chrome/bridge.rb} +11 -20
- data/lib/selenium/webdriver/{common/w3c_options.rb → edge_chrome/driver.rb} +14 -17
- data/lib/selenium/webdriver/edge_chrome/options.rb +36 -0
- data/lib/selenium/webdriver/edge_chrome/profile.rb +33 -0
- data/lib/selenium/webdriver/edge_chrome/service.rb +36 -0
- data/lib/selenium/webdriver/{common/w3c_manager.rb → edge_html/driver.rb} +11 -17
- data/lib/selenium/webdriver/{edge → edge_html}/options.rb +26 -22
- data/lib/selenium/webdriver/{edge → edge_html}/service.rb +2 -6
- data/lib/selenium/webdriver/firefox.rb +18 -15
- data/lib/selenium/webdriver/firefox/bridge.rb +1 -1
- data/lib/selenium/webdriver/firefox/driver.rb +2 -30
- data/lib/selenium/webdriver/firefox/extension.rb +8 -0
- data/lib/selenium/webdriver/firefox/options.rb +47 -52
- data/lib/selenium/webdriver/firefox/profile.rb +7 -78
- data/lib/selenium/webdriver/firefox/service.rb +0 -4
- data/lib/selenium/webdriver/ie.rb +8 -7
- data/lib/selenium/webdriver/ie/driver.rb +0 -32
- data/lib/selenium/webdriver/ie/options.rb +10 -33
- data/lib/selenium/webdriver/ie/service.rb +5 -9
- data/lib/selenium/webdriver/remote.rb +16 -10
- data/lib/selenium/webdriver/remote/bridge.rb +34 -42
- data/lib/selenium/webdriver/remote/capabilities.rb +22 -6
- data/lib/selenium/webdriver/remote/driver.rb +6 -12
- data/lib/selenium/webdriver/remote/http/default.rb +9 -4
- data/lib/selenium/webdriver/remote/http/persistent.rb +5 -6
- data/lib/selenium/webdriver/safari.rb +9 -8
- data/lib/selenium/webdriver/safari/bridge.rb +4 -4
- data/lib/selenium/webdriver/safari/driver.rb +3 -29
- data/lib/selenium/webdriver/safari/options.rb +18 -19
- data/lib/selenium/webdriver/safari/service.rb +0 -4
- data/lib/selenium/webdriver/support.rb +1 -0
- data/lib/selenium/webdriver/support/cdp_client_generator.rb +77 -0
- data/lib/selenium/webdriver/support/color.rb +2 -2
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +1 -1
- data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
- data/lib/selenium/webdriver/version.rb +1 -1
- data/selenium-webdriver.gemspec +5 -4
- metadata +81 -42
- data/lib/selenium/webdriver/common/bridge_helper.rb +0 -82
- data/lib/selenium/webdriver/common/keyboard.rb +0 -70
- data/lib/selenium/webdriver/common/mouse.rb +0 -89
- data/lib/selenium/webdriver/common/touch_action_builder.rb +0 -78
- data/lib/selenium/webdriver/common/touch_screen.rb +0 -123
- data/lib/selenium/webdriver/common/w3c_action_builder.rb +0 -212
- data/lib/selenium/webdriver/edge/bridge.rb +0 -76
- data/lib/selenium/webdriver/edge/driver.rb +0 -70
- data/lib/selenium/webdriver/firefox/binary.rb +0 -110
- data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/firefox/launcher.rb +0 -111
- data/lib/selenium/webdriver/firefox/legacy/driver.rb +0 -83
- data/lib/selenium/webdriver/firefox/marionette/bridge.rb +0 -49
- data/lib/selenium/webdriver/firefox/marionette/driver.rb +0 -90
- data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
- data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
- data/lib/selenium/webdriver/remote/oss/bridge.rb +0 -594
- data/lib/selenium/webdriver/remote/oss/commands.rb +0 -223
- data/lib/selenium/webdriver/remote/w3c/bridge.rb +0 -605
- data/lib/selenium/webdriver/remote/w3c/capabilities.rb +0 -310
- data/lib/selenium/webdriver/remote/w3c/commands.rb +0 -157
@@ -59,10 +59,15 @@ module Selenium
|
|
59
59
|
http.open_timeout = open_timeout
|
60
60
|
http.read_timeout = read_timeout if read_timeout
|
61
61
|
|
62
|
-
http
|
62
|
+
start(http)
|
63
|
+
http
|
63
64
|
end
|
64
65
|
end
|
65
66
|
|
67
|
+
def start(http)
|
68
|
+
http.start
|
69
|
+
end
|
70
|
+
|
66
71
|
MAX_RETRIES = 3
|
67
72
|
|
68
73
|
def request(verb, url, headers, payload, redirects = 0)
|
@@ -84,15 +89,15 @@ module Selenium
|
|
84
89
|
retries += 1
|
85
90
|
sleep 2
|
86
91
|
retry
|
87
|
-
rescue Errno::EADDRNOTAVAIL =>
|
92
|
+
rescue Errno::EADDRNOTAVAIL => e
|
88
93
|
# a retry is sometimes needed when the port becomes temporarily unavailable
|
89
94
|
raise if retries >= MAX_RETRIES
|
90
95
|
|
91
96
|
retries += 1
|
92
97
|
sleep 2
|
93
98
|
retry
|
94
|
-
rescue Errno::ECONNREFUSED =>
|
95
|
-
raise
|
99
|
+
rescue Errno::ECONNREFUSED => e
|
100
|
+
raise e.class, "using proxy: #{proxy.http}" if use_proxy?
|
96
101
|
|
97
102
|
raise
|
98
103
|
end
|
@@ -31,6 +31,10 @@ module Selenium
|
|
31
31
|
|
32
32
|
private
|
33
33
|
|
34
|
+
def start(*)
|
35
|
+
# no need to explicitly start connection
|
36
|
+
end
|
37
|
+
|
34
38
|
def new_http_client
|
35
39
|
proxy = nil
|
36
40
|
|
@@ -42,12 +46,7 @@ module Selenium
|
|
42
46
|
proxy = URI.parse(url)
|
43
47
|
end
|
44
48
|
|
45
|
-
|
46
|
-
Net::HTTP::Persistent.new name: 'webdriver', proxy: proxy
|
47
|
-
else
|
48
|
-
WebDriver.logger.warn 'Support for this version of net-http-persistent is deprecated. Please upgrade.'
|
49
|
-
Net::HTTP::Persistent.new 'webdriver', proxy
|
50
|
-
end
|
49
|
+
Net::HTTP::Persistent.new name: 'webdriver', proxy: proxy
|
51
50
|
end
|
52
51
|
|
53
52
|
def response_for(request)
|
@@ -17,13 +17,14 @@
|
|
17
17
|
# specific language governing permissions and limitations
|
18
18
|
# under the License.
|
19
19
|
|
20
|
-
require 'selenium/webdriver/safari/bridge'
|
21
|
-
require 'selenium/webdriver/safari/driver'
|
22
|
-
require 'selenium/webdriver/safari/options'
|
23
|
-
|
24
20
|
module Selenium
|
25
21
|
module WebDriver
|
26
22
|
module Safari
|
23
|
+
autoload :Bridge, 'selenium/webdriver/safari/bridge'
|
24
|
+
autoload :Driver, 'selenium/webdriver/safari/driver'
|
25
|
+
autoload :Options, 'selenium/webdriver/safari/options'
|
26
|
+
autoload :Service, 'selenium/webdriver/safari/service'
|
27
|
+
|
27
28
|
class << self
|
28
29
|
def technology_preview
|
29
30
|
"/Applications/Safari\ Technology\ Preview.app/Contents/MacOS/safaridriver"
|
@@ -48,18 +49,18 @@ module Selenium
|
|
48
49
|
|
49
50
|
def driver_path=(path)
|
50
51
|
WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path=',
|
51
|
-
'Selenium::WebDriver::Safari::Service#driver_path='
|
52
|
+
'Selenium::WebDriver::Safari::Service#driver_path=',
|
53
|
+
id: :driver_path
|
52
54
|
Selenium::WebDriver::Safari::Service.driver_path = path
|
53
55
|
end
|
54
56
|
|
55
57
|
def driver_path
|
56
58
|
WebDriver.logger.deprecate 'Selenium::WebDriver::Safari#driver_path',
|
57
|
-
'Selenium::WebDriver::Safari::Service#driver_path'
|
59
|
+
'Selenium::WebDriver::Safari::Service#driver_path',
|
60
|
+
id: :driver_path
|
58
61
|
Selenium::WebDriver::Safari::Service.driver_path
|
59
62
|
end
|
60
63
|
end
|
61
64
|
end # Safari
|
62
65
|
end # WebDriver
|
63
66
|
end # Selenium
|
64
|
-
|
65
|
-
require 'selenium/webdriver/safari/service'
|
@@ -20,13 +20,13 @@
|
|
20
20
|
module Selenium
|
21
21
|
module WebDriver
|
22
22
|
module Safari
|
23
|
-
|
23
|
+
class Bridge < WebDriver::Remote::Bridge
|
24
24
|
|
25
25
|
# https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/WebDriverEndpointDoc/Commands/Commands.html
|
26
26
|
COMMANDS = {
|
27
|
-
get_permissions: [:get, '
|
28
|
-
set_permissions: [:post, '
|
29
|
-
attach_debugger: [:post, '
|
27
|
+
get_permissions: [:get, 'session/:session_id/apple/permissions'],
|
28
|
+
set_permissions: [:post, 'session/:session_id/apple/permissions'],
|
29
|
+
attach_debugger: [:post, 'session/:session_id/apple/attach_debugger']
|
30
30
|
}.freeze
|
31
31
|
|
32
32
|
def commands(command)
|
@@ -29,42 +29,16 @@ module Selenium
|
|
29
29
|
class Driver < WebDriver::Driver
|
30
30
|
include DriverExtensions::HasDebugger
|
31
31
|
include DriverExtensions::HasPermissions
|
32
|
+
include DriverExtensions::HasWebStorage
|
32
33
|
include DriverExtensions::TakesScreenshot
|
33
34
|
|
34
|
-
def initialize(opts = {})
|
35
|
-
opts[:desired_capabilities] = create_capabilities(opts)
|
36
|
-
|
37
|
-
opts[:url] ||= service_url(opts)
|
38
|
-
|
39
|
-
listener = opts.delete(:listener)
|
40
|
-
desired_capabilities = opts.delete(:desired_capabilities)
|
41
|
-
|
42
|
-
@bridge = Remote::Bridge.new(opts)
|
43
|
-
@bridge.extend Bridge
|
44
|
-
@bridge.create_session(desired_capabilities)
|
45
|
-
|
46
|
-
super(@bridge, listener: listener)
|
47
|
-
end
|
48
|
-
|
49
35
|
def browser
|
50
36
|
:safari
|
51
37
|
end
|
52
38
|
|
53
|
-
def
|
54
|
-
|
55
|
-
ensure
|
56
|
-
@service&.stop
|
39
|
+
def bridge_class
|
40
|
+
Bridge
|
57
41
|
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
def create_capabilities(opts = {})
|
62
|
-
caps = opts.delete(:desired_capabilities) { Remote::Capabilities.safari }
|
63
|
-
options = opts.delete(:options) { Options.new }
|
64
|
-
caps.merge!(options.as_json)
|
65
|
-
caps
|
66
|
-
end
|
67
|
-
|
68
42
|
end # Driver
|
69
43
|
end # Safari
|
70
44
|
end # WebDriver
|
@@ -20,8 +20,23 @@
|
|
20
20
|
module Selenium
|
21
21
|
module WebDriver
|
22
22
|
module Safari
|
23
|
-
class Options
|
24
|
-
attr_accessor :
|
23
|
+
class Options < WebDriver::Options
|
24
|
+
attr_accessor :options
|
25
|
+
|
26
|
+
# @see https://developer.apple.com/documentation/webkit/about_webdriver_for_safari
|
27
|
+
CAPABILITIES = {automatic_inspection: 'safari:automaticInspection',
|
28
|
+
automatic_profiling: 'safari:automaticProfiling'}.freeze
|
29
|
+
BROWSER = 'safari'
|
30
|
+
|
31
|
+
CAPABILITIES.each_key do |key|
|
32
|
+
define_method key do
|
33
|
+
@options[key]
|
34
|
+
end
|
35
|
+
|
36
|
+
define_method "#{key}=" do |value|
|
37
|
+
@options[key] = value
|
38
|
+
end
|
39
|
+
end
|
25
40
|
|
26
41
|
#
|
27
42
|
# Create a new Options instance for W3C-capable versions of Safari.
|
@@ -34,25 +49,9 @@ module Selenium
|
|
34
49
|
# @option opts [Boolean] :automatic_inspection Preloads Web Inspector and JavaScript debugger. Default is false
|
35
50
|
# @option opts [Boolean] :automatic_profiling Preloads Web Inspector and starts a timeline recording. Default is false
|
36
51
|
#
|
37
|
-
# @see https://developer.apple.com/documentation/webkit/about_webdriver_for_safari
|
38
|
-
#
|
39
52
|
|
40
53
|
def initialize(**opts)
|
41
|
-
|
42
|
-
@automatic_profiling = opts.delete(:automatic_profiling) || false
|
43
|
-
end
|
44
|
-
|
45
|
-
#
|
46
|
-
# @api private
|
47
|
-
#
|
48
|
-
|
49
|
-
def as_json(*)
|
50
|
-
opts = {}
|
51
|
-
|
52
|
-
opts['safari:automaticInspection'] = true if @automatic_inspection
|
53
|
-
opts['safari:automaticProfiling'] = true if @automatic_profiling
|
54
|
-
|
55
|
-
opts
|
54
|
+
super
|
56
55
|
end
|
57
56
|
end # Options
|
58
57
|
end # Safari
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Licensed to the Software Freedom Conservancy (SFC) under one
|
4
|
+
# or more contributor license agreements. See the NOTICE file
|
5
|
+
# distributed with this work for additional information
|
6
|
+
# regarding copyright ownership. The SFC licenses this file
|
7
|
+
# to you under the Apache License, Version 2.0 (the
|
8
|
+
# "License"); you may not use this file except in compliance
|
9
|
+
# with the License. You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing,
|
14
|
+
# software distributed under the License is distributed on an
|
15
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
16
|
+
# KIND, either express or implied. See the License for the
|
17
|
+
# specific language governing permissions and limitations
|
18
|
+
# under the License.
|
19
|
+
|
20
|
+
require 'erb'
|
21
|
+
require 'json'
|
22
|
+
|
23
|
+
module Selenium
|
24
|
+
module WebDriver
|
25
|
+
module Support
|
26
|
+
class CDPClientGenerator
|
27
|
+
DEVTOOLS_DIR = File.expand_path('../devtools', __dir__)
|
28
|
+
BROWSER_PROTOCOL_PATH = File.expand_path('cdp/browser_protocol.json', __dir__)
|
29
|
+
JS_PROTOCOL_PATH = File.expand_path('cdp/js_protocol.json', __dir__)
|
30
|
+
TEMPLATE_PATH = File.expand_path('cdp/domain.rb.erb', __dir__)
|
31
|
+
|
32
|
+
RESERVED_KEYWORDS = %w[end].freeze
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
@browser_protocol = JSON.parse(File.read(BROWSER_PROTOCOL_PATH), symbolize_names: true)
|
36
|
+
@js_protocol = JSON.parse(File.read(JS_PROTOCOL_PATH), symbolize_names: true)
|
37
|
+
@template = ERB.new(File.read(TEMPLATE_PATH))
|
38
|
+
end
|
39
|
+
|
40
|
+
def call
|
41
|
+
@browser_protocol[:domains].each(&method(:process_domain))
|
42
|
+
@js_protocol[:domains].each(&method(:process_domain))
|
43
|
+
end
|
44
|
+
|
45
|
+
def process_domain(domain)
|
46
|
+
result = @template.result_with_hash(domain: domain, h: self)
|
47
|
+
filename = File.join(DEVTOOLS_DIR, "#{snake_case(domain[:domain])}.rb")
|
48
|
+
File.write(filename, remove_empty_lines(result))
|
49
|
+
end
|
50
|
+
|
51
|
+
def snake_case(string)
|
52
|
+
name = string.gsub(/([a-z])([A-Z])/, '\1_\2').downcase
|
53
|
+
# Certain CDP parameters conflict with Ruby keywords
|
54
|
+
# so we prefix the name with underscore.
|
55
|
+
name = "_#{name}" if RESERVED_KEYWORDS.include?(name)
|
56
|
+
|
57
|
+
name
|
58
|
+
end
|
59
|
+
|
60
|
+
def kwargs(parameters)
|
61
|
+
parameters = parameters.map do |parameter|
|
62
|
+
if parameter[:optional]
|
63
|
+
"#{snake_case(parameter[:name])}: nil"
|
64
|
+
else
|
65
|
+
"#{snake_case(parameter[:name])}:"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
parameters.join(', ')
|
69
|
+
end
|
70
|
+
|
71
|
+
def remove_empty_lines(string)
|
72
|
+
string.split("\n").reject { |l| l =~ /^\s+$/ }.join("\n")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -72,7 +72,7 @@ module Selenium
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
def self.from_hsl(h, s, l, a) # rubocop:disable Naming/
|
75
|
+
def self.from_hsl(h, s, l, a) # rubocop:disable Naming/MethodParameterName
|
76
76
|
h = Float(h) / 360
|
77
77
|
s = Float(s) / 100
|
78
78
|
l = Float(l) / 100
|
@@ -138,7 +138,7 @@ module Selenium
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def hex
|
141
|
-
format '
|
141
|
+
format '#%<red>02x%<green>02x%<blue>02x', red: red, green: green, blue: blue
|
142
142
|
end
|
143
143
|
end # Color
|
144
144
|
end # Support
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Licensed to the Software Freedom Conservancy (SFC) under one
|
4
|
+
# or more contributor license agreements. See the NOTICE file
|
5
|
+
# distributed with this work for additional information
|
6
|
+
# regarding copyright ownership. The SFC licenses this file
|
7
|
+
# to you under the Apache License, Version 2.0 (the
|
8
|
+
# "License"); you may not use this file except in compliance
|
9
|
+
# with the License. You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing,
|
14
|
+
# software distributed under the License is distributed on an
|
15
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
16
|
+
# KIND, either express or implied. See the License for the
|
17
|
+
# specific language governing permissions and limitations
|
18
|
+
# under the License.
|
19
|
+
|
20
|
+
module Selenium
|
21
|
+
module WebDriver
|
22
|
+
module Support
|
23
|
+
|
24
|
+
#
|
25
|
+
# @api private
|
26
|
+
#
|
27
|
+
|
28
|
+
class RelativeLocator
|
29
|
+
KEYS = %w[above below left right near distance].freeze
|
30
|
+
|
31
|
+
def initialize(locator)
|
32
|
+
@filters, @root = locator.partition { |how, _| KEYS.include?(how) }.map(&:to_h)
|
33
|
+
end
|
34
|
+
|
35
|
+
def as_json
|
36
|
+
{
|
37
|
+
relative: {
|
38
|
+
root: @root,
|
39
|
+
filters: @filters.map do |kind, filter|
|
40
|
+
{
|
41
|
+
kind: kind,
|
42
|
+
args: [filter]
|
43
|
+
}
|
44
|
+
end
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/selenium-webdriver.gemspec
CHANGED
@@ -26,20 +26,21 @@ Gem::Specification.new do |s|
|
|
26
26
|
}
|
27
27
|
|
28
28
|
s.required_rubygems_version = Gem::Requirement.new('> 1.3.1') if s.respond_to? :required_rubygems_version=
|
29
|
-
s.required_ruby_version = Gem::Requirement.new('>= 2.
|
29
|
+
s.required_ruby_version = Gem::Requirement.new('>= 2.5')
|
30
30
|
|
31
31
|
s.files = Dir[root + '/**/*'].reject { |e| e =~ /ruby\.iml|build\.desc/ }.map { |e| e.sub(root + '/', '') }
|
32
32
|
s.require_paths = ['lib']
|
33
33
|
|
34
|
-
s.add_runtime_dependency 'childprocess', ['>= 0.5', '<
|
35
|
-
s.add_runtime_dependency 'rubyzip', ['
|
34
|
+
s.add_runtime_dependency 'childprocess', ['>= 0.5', '< 4.0']
|
35
|
+
s.add_runtime_dependency 'rubyzip', ['>= 1.2.2']
|
36
|
+
s.add_runtime_dependency 'websocket', ['~> 1.0']
|
36
37
|
|
37
38
|
# childprocess requires ffi on windows but doesn't declare it in its dependencies
|
38
39
|
s.add_development_dependency 'ffi'
|
39
40
|
s.add_development_dependency 'rack', ['~> 2.0']
|
40
41
|
s.add_development_dependency 'rake'
|
41
42
|
s.add_development_dependency 'rspec', ['~> 3.0']
|
42
|
-
s.add_development_dependency 'rubocop', ['~> 0.
|
43
|
+
s.add_development_dependency 'rubocop', ['~> 0.84.0']
|
43
44
|
s.add_development_dependency 'rubocop-performance'
|
44
45
|
s.add_development_dependency 'rubocop-rspec'
|
45
46
|
s.add_development_dependency 'webmock', ['~> 3.5']
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selenium-webdriver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.alpha6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Rodionov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2020-05-28 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: '0.5'
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '4.0'
|
24
24
|
name: childprocess
|
25
25
|
prerelease: false
|
26
26
|
type: :runtime
|
@@ -31,13 +31,10 @@ dependencies:
|
|
31
31
|
version: '0.5'
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '4.0'
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.2'
|
41
38
|
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
40
|
version: 1.2.2
|
@@ -46,12 +43,23 @@ dependencies:
|
|
46
43
|
type: :runtime
|
47
44
|
version_requirements: !ruby/object:Gem::Requirement
|
48
45
|
requirements:
|
49
|
-
- - "~>"
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: '1.2'
|
52
46
|
- - ">="
|
53
47
|
- !ruby/object:Gem::Version
|
54
48
|
version: 1.2.2
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
name: websocket
|
56
|
+
prerelease: false
|
57
|
+
type: :runtime
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1.0'
|
55
63
|
- !ruby/object:Gem::Dependency
|
56
64
|
requirement: !ruby/object:Gem::Requirement
|
57
65
|
requirements:
|
@@ -113,7 +121,7 @@ dependencies:
|
|
113
121
|
requirements:
|
114
122
|
- - "~>"
|
115
123
|
- !ruby/object:Gem::Version
|
116
|
-
version: 0.
|
124
|
+
version: 0.84.0
|
117
125
|
name: rubocop
|
118
126
|
prerelease: false
|
119
127
|
type: :development
|
@@ -121,7 +129,7 @@ dependencies:
|
|
121
129
|
requirements:
|
122
130
|
- - "~>"
|
123
131
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
132
|
+
version: 0.84.0
|
125
133
|
- !ruby/object:Gem::Dependency
|
126
134
|
requirement: !ruby/object:Gem::Requirement
|
127
135
|
requirements:
|
@@ -197,6 +205,7 @@ files:
|
|
197
205
|
- lib/selenium/server.rb
|
198
206
|
- lib/selenium/webdriver.rb
|
199
207
|
- lib/selenium/webdriver/atoms.rb
|
208
|
+
- lib/selenium/webdriver/atoms/findElements.js
|
200
209
|
- lib/selenium/webdriver/atoms/getAttribute.js
|
201
210
|
- lib/selenium/webdriver/atoms/isDisplayed.js
|
202
211
|
- lib/selenium/webdriver/chrome.rb
|
@@ -208,18 +217,17 @@ files:
|
|
208
217
|
- lib/selenium/webdriver/common.rb
|
209
218
|
- lib/selenium/webdriver/common/action_builder.rb
|
210
219
|
- lib/selenium/webdriver/common/alert.rb
|
211
|
-
- lib/selenium/webdriver/common/bridge_helper.rb
|
212
220
|
- lib/selenium/webdriver/common/driver.rb
|
213
221
|
- lib/selenium/webdriver/common/driver_extensions/downloads_files.rb
|
214
222
|
- lib/selenium/webdriver/common/driver_extensions/has_addons.rb
|
215
223
|
- lib/selenium/webdriver/common/driver_extensions/has_debugger.rb
|
224
|
+
- lib/selenium/webdriver/common/driver_extensions/has_devtools.rb
|
216
225
|
- lib/selenium/webdriver/common/driver_extensions/has_location.rb
|
217
226
|
- lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb
|
218
227
|
- lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb
|
219
228
|
- lib/selenium/webdriver/common/driver_extensions/has_permissions.rb
|
220
229
|
- lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb
|
221
230
|
- lib/selenium/webdriver/common/driver_extensions/has_session_id.rb
|
222
|
-
- lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb
|
223
231
|
- lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb
|
224
232
|
- lib/selenium/webdriver/common/driver_extensions/rotatable.rb
|
225
233
|
- lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb
|
@@ -238,13 +246,11 @@ files:
|
|
238
246
|
- lib/selenium/webdriver/common/interactions/none_input.rb
|
239
247
|
- lib/selenium/webdriver/common/interactions/pointer_actions.rb
|
240
248
|
- lib/selenium/webdriver/common/interactions/pointer_input.rb
|
241
|
-
- lib/selenium/webdriver/common/keyboard.rb
|
242
249
|
- lib/selenium/webdriver/common/keys.rb
|
243
250
|
- lib/selenium/webdriver/common/log_entry.rb
|
244
251
|
- lib/selenium/webdriver/common/logger.rb
|
245
252
|
- lib/selenium/webdriver/common/logs.rb
|
246
253
|
- lib/selenium/webdriver/common/manager.rb
|
247
|
-
- lib/selenium/webdriver/common/mouse.rb
|
248
254
|
- lib/selenium/webdriver/common/navigation.rb
|
249
255
|
- lib/selenium/webdriver/common/options.rb
|
250
256
|
- lib/selenium/webdriver/common/platform.rb
|
@@ -253,41 +259,77 @@ files:
|
|
253
259
|
- lib/selenium/webdriver/common/proxy.rb
|
254
260
|
- lib/selenium/webdriver/common/search_context.rb
|
255
261
|
- lib/selenium/webdriver/common/service.rb
|
262
|
+
- lib/selenium/webdriver/common/service_manager.rb
|
256
263
|
- lib/selenium/webdriver/common/socket_lock.rb
|
257
264
|
- lib/selenium/webdriver/common/socket_poller.rb
|
258
265
|
- lib/selenium/webdriver/common/target_locator.rb
|
259
266
|
- lib/selenium/webdriver/common/timeouts.rb
|
260
|
-
- lib/selenium/webdriver/common/touch_action_builder.rb
|
261
|
-
- lib/selenium/webdriver/common/touch_screen.rb
|
262
|
-
- lib/selenium/webdriver/common/w3c_action_builder.rb
|
263
|
-
- lib/selenium/webdriver/common/w3c_manager.rb
|
264
|
-
- lib/selenium/webdriver/common/w3c_options.rb
|
265
267
|
- lib/selenium/webdriver/common/wait.rb
|
266
268
|
- lib/selenium/webdriver/common/window.rb
|
267
269
|
- lib/selenium/webdriver/common/zipper.rb
|
270
|
+
- lib/selenium/webdriver/devtools.rb
|
271
|
+
- lib/selenium/webdriver/devtools/accessibility.rb
|
272
|
+
- lib/selenium/webdriver/devtools/animation.rb
|
273
|
+
- lib/selenium/webdriver/devtools/application_cache.rb
|
274
|
+
- lib/selenium/webdriver/devtools/audits.rb
|
275
|
+
- lib/selenium/webdriver/devtools/background_service.rb
|
276
|
+
- lib/selenium/webdriver/devtools/browser.rb
|
277
|
+
- lib/selenium/webdriver/devtools/cache_storage.rb
|
278
|
+
- lib/selenium/webdriver/devtools/cast.rb
|
279
|
+
- lib/selenium/webdriver/devtools/console.rb
|
280
|
+
- lib/selenium/webdriver/devtools/css.rb
|
281
|
+
- lib/selenium/webdriver/devtools/database.rb
|
282
|
+
- lib/selenium/webdriver/devtools/debugger.rb
|
283
|
+
- lib/selenium/webdriver/devtools/device_orientation.rb
|
284
|
+
- lib/selenium/webdriver/devtools/dom.rb
|
285
|
+
- lib/selenium/webdriver/devtools/domdebugger.rb
|
286
|
+
- lib/selenium/webdriver/devtools/domsnapshot.rb
|
287
|
+
- lib/selenium/webdriver/devtools/domstorage.rb
|
288
|
+
- lib/selenium/webdriver/devtools/emulation.rb
|
289
|
+
- lib/selenium/webdriver/devtools/fetch.rb
|
290
|
+
- lib/selenium/webdriver/devtools/headless_experimental.rb
|
291
|
+
- lib/selenium/webdriver/devtools/heap_profiler.rb
|
292
|
+
- lib/selenium/webdriver/devtools/indexed_db.rb
|
293
|
+
- lib/selenium/webdriver/devtools/input.rb
|
294
|
+
- lib/selenium/webdriver/devtools/inspector.rb
|
295
|
+
- lib/selenium/webdriver/devtools/io.rb
|
296
|
+
- lib/selenium/webdriver/devtools/layer_tree.rb
|
297
|
+
- lib/selenium/webdriver/devtools/log.rb
|
298
|
+
- lib/selenium/webdriver/devtools/media.rb
|
299
|
+
- lib/selenium/webdriver/devtools/memory.rb
|
300
|
+
- lib/selenium/webdriver/devtools/network.rb
|
301
|
+
- lib/selenium/webdriver/devtools/overlay.rb
|
302
|
+
- lib/selenium/webdriver/devtools/page.rb
|
303
|
+
- lib/selenium/webdriver/devtools/performance.rb
|
304
|
+
- lib/selenium/webdriver/devtools/profiler.rb
|
305
|
+
- lib/selenium/webdriver/devtools/runtime.rb
|
306
|
+
- lib/selenium/webdriver/devtools/schema.rb
|
307
|
+
- lib/selenium/webdriver/devtools/security.rb
|
308
|
+
- lib/selenium/webdriver/devtools/service_worker.rb
|
309
|
+
- lib/selenium/webdriver/devtools/storage.rb
|
310
|
+
- lib/selenium/webdriver/devtools/system_info.rb
|
311
|
+
- lib/selenium/webdriver/devtools/target.rb
|
312
|
+
- lib/selenium/webdriver/devtools/tethering.rb
|
313
|
+
- lib/selenium/webdriver/devtools/tracing.rb
|
314
|
+
- lib/selenium/webdriver/devtools/web_audio.rb
|
315
|
+
- lib/selenium/webdriver/devtools/web_authn.rb
|
268
316
|
- lib/selenium/webdriver/edge.rb
|
269
|
-
- lib/selenium/webdriver/
|
270
|
-
- lib/selenium/webdriver/
|
271
|
-
- lib/selenium/webdriver/
|
272
|
-
- lib/selenium/webdriver/
|
317
|
+
- lib/selenium/webdriver/edge_chrome/bridge.rb
|
318
|
+
- lib/selenium/webdriver/edge_chrome/driver.rb
|
319
|
+
- lib/selenium/webdriver/edge_chrome/options.rb
|
320
|
+
- lib/selenium/webdriver/edge_chrome/profile.rb
|
321
|
+
- lib/selenium/webdriver/edge_chrome/service.rb
|
322
|
+
- lib/selenium/webdriver/edge_html/driver.rb
|
323
|
+
- lib/selenium/webdriver/edge_html/options.rb
|
324
|
+
- lib/selenium/webdriver/edge_html/service.rb
|
273
325
|
- lib/selenium/webdriver/firefox.rb
|
274
|
-
- lib/selenium/webdriver/firefox/binary.rb
|
275
326
|
- lib/selenium/webdriver/firefox/bridge.rb
|
276
327
|
- lib/selenium/webdriver/firefox/driver.rb
|
277
328
|
- lib/selenium/webdriver/firefox/extension.rb
|
278
|
-
- lib/selenium/webdriver/firefox/extension/prefs.json
|
279
|
-
- lib/selenium/webdriver/firefox/extension/webdriver.xpi
|
280
|
-
- lib/selenium/webdriver/firefox/launcher.rb
|
281
|
-
- lib/selenium/webdriver/firefox/legacy/driver.rb
|
282
|
-
- lib/selenium/webdriver/firefox/marionette/bridge.rb
|
283
|
-
- lib/selenium/webdriver/firefox/marionette/driver.rb
|
284
|
-
- lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so
|
285
|
-
- lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so
|
286
329
|
- lib/selenium/webdriver/firefox/options.rb
|
287
330
|
- lib/selenium/webdriver/firefox/profile.rb
|
288
331
|
- lib/selenium/webdriver/firefox/profiles_ini.rb
|
289
332
|
- lib/selenium/webdriver/firefox/service.rb
|
290
|
-
- lib/selenium/webdriver/firefox/util.rb
|
291
333
|
- lib/selenium/webdriver/ie.rb
|
292
334
|
- lib/selenium/webdriver/ie/driver.rb
|
293
335
|
- lib/selenium/webdriver/ie/options.rb
|
@@ -301,13 +343,8 @@ files:
|
|
301
343
|
- lib/selenium/webdriver/remote/http/curb.rb
|
302
344
|
- lib/selenium/webdriver/remote/http/default.rb
|
303
345
|
- lib/selenium/webdriver/remote/http/persistent.rb
|
304
|
-
- lib/selenium/webdriver/remote/oss/bridge.rb
|
305
|
-
- lib/selenium/webdriver/remote/oss/commands.rb
|
306
346
|
- lib/selenium/webdriver/remote/response.rb
|
307
347
|
- lib/selenium/webdriver/remote/server_error.rb
|
308
|
-
- lib/selenium/webdriver/remote/w3c/bridge.rb
|
309
|
-
- lib/selenium/webdriver/remote/w3c/capabilities.rb
|
310
|
-
- lib/selenium/webdriver/remote/w3c/commands.rb
|
311
348
|
- lib/selenium/webdriver/safari.rb
|
312
349
|
- lib/selenium/webdriver/safari/bridge.rb
|
313
350
|
- lib/selenium/webdriver/safari/driver.rb
|
@@ -316,9 +353,11 @@ files:
|
|
316
353
|
- lib/selenium/webdriver/support.rb
|
317
354
|
- lib/selenium/webdriver/support/abstract_event_listener.rb
|
318
355
|
- lib/selenium/webdriver/support/block_event_listener.rb
|
356
|
+
- lib/selenium/webdriver/support/cdp_client_generator.rb
|
319
357
|
- lib/selenium/webdriver/support/color.rb
|
320
358
|
- lib/selenium/webdriver/support/escaper.rb
|
321
359
|
- lib/selenium/webdriver/support/event_firing_bridge.rb
|
360
|
+
- lib/selenium/webdriver/support/relative_locator.rb
|
322
361
|
- lib/selenium/webdriver/support/select.rb
|
323
362
|
- lib/selenium/webdriver/version.rb
|
324
363
|
- selenium-webdriver.gemspec
|
@@ -336,7 +375,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
336
375
|
requirements:
|
337
376
|
- - ">="
|
338
377
|
- !ruby/object:Gem::Version
|
339
|
-
version: '2.
|
378
|
+
version: '2.5'
|
340
379
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
341
380
|
requirements:
|
342
381
|
- - ">"
|
@@ -344,7 +383,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
344
383
|
version: 1.3.1
|
345
384
|
requirements: []
|
346
385
|
rubyforge_project:
|
347
|
-
rubygems_version: 2.
|
386
|
+
rubygems_version: 2.7.9
|
348
387
|
signing_key:
|
349
388
|
specification_version: 4
|
350
389
|
summary: The next generation developer focused tool for automated testing of webapps
|