selenium-webdriver 4.49.0 → 4.50.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 +13 -0
- data/Gemfile +0 -0
- data/LICENSE +0 -0
- data/NOTICE +0 -0
- data/README.md +0 -0
- data/bin/linux-arm64/selenium-manager +0 -0
- data/bin/linux-x86_64/selenium-manager +0 -0
- data/bin/macos/selenium-manager +0 -0
- data/bin/selenium-manager-THIRD-PARTY-NOTICES.txt +74 -43
- data/bin/selenium-manager.cdx.json +421 -421
- data/bin/windows/selenium-manager.exe +0 -0
- data/lib/selenium/server.rb +0 -0
- data/lib/selenium/webdriver/atoms/findElements.js +14 -2
- data/lib/selenium/webdriver/atoms.rb +0 -0
- data/lib/selenium/webdriver/bidi/browser.rb +0 -0
- data/lib/selenium/webdriver/bidi/browsing_context.rb +0 -0
- data/lib/selenium/webdriver/bidi/error.rb +0 -0
- data/lib/selenium/webdriver/bidi/log_handler.rb +0 -0
- data/lib/selenium/webdriver/bidi/network/cookies.rb +0 -0
- data/lib/selenium/webdriver/bidi/network/credentials.rb +0 -0
- data/lib/selenium/webdriver/bidi/network/headers.rb +0 -0
- data/lib/selenium/webdriver/bidi/network/intercepted_auth.rb +0 -0
- data/lib/selenium/webdriver/bidi/network/intercepted_item.rb +0 -0
- data/lib/selenium/webdriver/bidi/network/intercepted_request.rb +0 -0
- data/lib/selenium/webdriver/bidi/network/intercepted_response.rb +0 -0
- data/lib/selenium/webdriver/bidi/network/url_pattern.rb +0 -0
- data/lib/selenium/webdriver/bidi/network.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/bluetooth.rb +27 -23
- data/lib/selenium/webdriver/bidi/protocol/browser.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/browsing_context.rb +58 -4
- data/lib/selenium/webdriver/bidi/protocol/digital_credentials.rb +69 -0
- data/lib/selenium/webdriver/bidi/protocol/domain.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/emulation.rb +31 -0
- data/lib/selenium/webdriver/bidi/protocol/error_code.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/input.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/log.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/moz_debugging.rb +334 -0
- data/lib/selenium/webdriver/bidi/protocol/moz_profiler.rb +108 -0
- data/lib/selenium/webdriver/bidi/protocol/network.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/permissions.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/script.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/session.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/speculation.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/storage.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/user_agent_client_hints.rb +0 -0
- data/lib/selenium/webdriver/bidi/protocol/web_extension.rb +41 -5
- data/lib/selenium/webdriver/bidi/protocol.rb +3 -0
- data/lib/selenium/webdriver/bidi/serialization/record.rb +0 -0
- data/lib/selenium/webdriver/bidi/serialization/union.rb +0 -0
- data/lib/selenium/webdriver/bidi/serialization.rb +0 -0
- data/lib/selenium/webdriver/bidi/session.rb +0 -0
- data/lib/selenium/webdriver/bidi/struct.rb +0 -0
- data/lib/selenium/webdriver/bidi/support/bidi_generate.rb +154 -38
- data/lib/selenium/webdriver/bidi/support/check_generated.rb +0 -0
- data/lib/selenium/webdriver/bidi/transport.rb +0 -0
- data/lib/selenium/webdriver/bidi.rb +0 -0
- data/lib/selenium/webdriver/chrome/driver.rb +0 -0
- data/lib/selenium/webdriver/chrome/features.rb +0 -0
- data/lib/selenium/webdriver/chrome/options.rb +0 -0
- data/lib/selenium/webdriver/chrome/profile.rb +0 -0
- data/lib/selenium/webdriver/chrome/service.rb +0 -0
- data/lib/selenium/webdriver/chrome.rb +0 -0
- data/lib/selenium/webdriver/chromium/driver.rb +0 -0
- data/lib/selenium/webdriver/chromium/features.rb +0 -0
- data/lib/selenium/webdriver/chromium/options.rb +0 -0
- data/lib/selenium/webdriver/chromium/profile.rb +0 -0
- data/lib/selenium/webdriver/chromium.rb +0 -0
- data/lib/selenium/webdriver/common/action_builder.rb +0 -0
- data/lib/selenium/webdriver/common/alert.rb +0 -0
- data/lib/selenium/webdriver/common/child_process.rb +0 -0
- data/lib/selenium/webdriver/common/client_config.rb +0 -0
- data/lib/selenium/webdriver/common/driver.rb +24 -0
- data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_cdp.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_fedcm_dialog.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_logs.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_session_events.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/prints_page.rb +0 -0
- data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +0 -0
- data/lib/selenium/webdriver/common/driver_finder.rb +0 -0
- data/lib/selenium/webdriver/common/element.rb +0 -0
- data/lib/selenium/webdriver/common/error.rb +0 -0
- data/lib/selenium/webdriver/common/fedcm/account.rb +0 -0
- data/lib/selenium/webdriver/common/fedcm/dialog.rb +0 -0
- data/lib/selenium/webdriver/common/fedcm.rb +0 -0
- data/lib/selenium/webdriver/common/file_reaper.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/input_device.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/interaction.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/interactions.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/key_actions.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/key_input.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/none_input.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/pause.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/pointer_cancel.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/pointer_event_properties.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/pointer_input.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/pointer_move.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/pointer_press.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/scroll.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/scroll_origin.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/typing_interaction.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/wheel_actions.rb +0 -0
- data/lib/selenium/webdriver/common/interactions/wheel_input.rb +0 -0
- data/lib/selenium/webdriver/common/keys.rb +0 -0
- data/lib/selenium/webdriver/common/local_driver.rb +0 -0
- data/lib/selenium/webdriver/common/log_entry.rb +0 -0
- data/lib/selenium/webdriver/common/logger.rb +0 -0
- data/lib/selenium/webdriver/common/logs.rb +0 -0
- data/lib/selenium/webdriver/common/manager.rb +0 -0
- data/lib/selenium/webdriver/common/navigation.rb +0 -0
- data/lib/selenium/webdriver/common/network.rb +0 -0
- data/lib/selenium/webdriver/common/options.rb +0 -0
- data/lib/selenium/webdriver/common/platform.rb +0 -0
- data/lib/selenium/webdriver/common/port_prober.rb +0 -0
- data/lib/selenium/webdriver/common/print_options.rb +0 -0
- data/lib/selenium/webdriver/common/profile_helper.rb +0 -0
- data/lib/selenium/webdriver/common/proxy.rb +0 -0
- data/lib/selenium/webdriver/common/script.rb +0 -0
- data/lib/selenium/webdriver/common/search_context.rb +0 -0
- data/lib/selenium/webdriver/common/selenium_manager.rb +0 -0
- data/lib/selenium/webdriver/common/service.rb +0 -0
- data/lib/selenium/webdriver/common/service_manager.rb +0 -0
- data/lib/selenium/webdriver/common/shadow_root.rb +0 -0
- data/lib/selenium/webdriver/common/socket_lock.rb +0 -0
- data/lib/selenium/webdriver/common/socket_poller.rb +0 -0
- data/lib/selenium/webdriver/common/takes_screenshot.rb +0 -0
- data/lib/selenium/webdriver/common/target_locator.rb +0 -0
- data/lib/selenium/webdriver/common/timeouts.rb +0 -0
- data/lib/selenium/webdriver/common/virtual_authenticator/credential.rb +0 -0
- data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator.rb +0 -0
- data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator_options.rb +0 -0
- data/lib/selenium/webdriver/common/wait.rb +0 -0
- data/lib/selenium/webdriver/common/web_extension.rb +42 -0
- data/lib/selenium/webdriver/common/websocket_connection.rb +2 -2
- data/lib/selenium/webdriver/common/window.rb +0 -0
- data/lib/selenium/webdriver/common/zipper.rb +15 -11
- data/lib/selenium/webdriver/common.rb +1 -0
- data/lib/selenium/webdriver/devtools/console_event.rb +0 -0
- data/lib/selenium/webdriver/devtools/exception_event.rb +0 -0
- data/lib/selenium/webdriver/devtools/mutation_event.rb +0 -0
- data/lib/selenium/webdriver/devtools/network_interceptor.rb +0 -0
- data/lib/selenium/webdriver/devtools/pinned_script.rb +0 -0
- data/lib/selenium/webdriver/devtools/request.rb +0 -0
- data/lib/selenium/webdriver/devtools/response.rb +0 -0
- data/lib/selenium/webdriver/devtools.rb +0 -0
- data/lib/selenium/webdriver/edge/driver.rb +0 -0
- data/lib/selenium/webdriver/edge/features.rb +0 -0
- data/lib/selenium/webdriver/edge/options.rb +0 -0
- data/lib/selenium/webdriver/edge/profile.rb +0 -0
- data/lib/selenium/webdriver/edge/service.rb +0 -0
- data/lib/selenium/webdriver/edge.rb +0 -0
- data/lib/selenium/webdriver/firefox/driver.rb +0 -0
- data/lib/selenium/webdriver/firefox/features.rb +18 -7
- data/lib/selenium/webdriver/firefox/options.rb +0 -0
- data/lib/selenium/webdriver/firefox/profile.rb +0 -37
- data/lib/selenium/webdriver/firefox/profiles_ini.rb +0 -0
- data/lib/selenium/webdriver/firefox/service.rb +0 -0
- data/lib/selenium/webdriver/firefox/util.rb +0 -0
- data/lib/selenium/webdriver/firefox.rb +0 -2
- data/lib/selenium/webdriver/ie/driver.rb +0 -0
- data/lib/selenium/webdriver/ie/features.rb +0 -0
- data/lib/selenium/webdriver/ie/options.rb +0 -0
- data/lib/selenium/webdriver/ie/service.rb +0 -0
- data/lib/selenium/webdriver/ie.rb +0 -0
- data/lib/selenium/webdriver/remote/bidi_bridge.rb +23 -0
- data/lib/selenium/webdriver/remote/bridge/commands.rb +0 -0
- data/lib/selenium/webdriver/remote/bridge/locator_converter.rb +0 -0
- data/lib/selenium/webdriver/remote/bridge.rb +20 -6
- data/lib/selenium/webdriver/remote/capabilities.rb +0 -0
- data/lib/selenium/webdriver/remote/driver.rb +0 -0
- data/lib/selenium/webdriver/remote/features.rb +9 -8
- data/lib/selenium/webdriver/remote/http/common.rb +0 -0
- data/lib/selenium/webdriver/remote/http/curb.rb +0 -0
- data/lib/selenium/webdriver/remote/http/default.rb +0 -0
- data/lib/selenium/webdriver/remote/response.rb +0 -0
- data/lib/selenium/webdriver/remote/server_error.rb +0 -0
- data/lib/selenium/webdriver/remote.rb +0 -0
- data/lib/selenium/webdriver/safari/driver.rb +0 -0
- data/lib/selenium/webdriver/safari/features.rb +0 -0
- data/lib/selenium/webdriver/safari/options.rb +0 -0
- data/lib/selenium/webdriver/safari/service.rb +0 -0
- data/lib/selenium/webdriver/safari.rb +0 -0
- data/lib/selenium/webdriver/support/abstract_event_listener.rb +0 -0
- data/lib/selenium/webdriver/support/block_event_listener.rb +0 -0
- data/lib/selenium/webdriver/support/color.rb +0 -0
- data/lib/selenium/webdriver/support/escaper.rb +0 -0
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +0 -0
- data/lib/selenium/webdriver/support/guards/guard.rb +0 -0
- data/lib/selenium/webdriver/support/guards/guard_condition.rb +0 -0
- data/lib/selenium/webdriver/support/guards.rb +0 -0
- data/lib/selenium/webdriver/support/relative_locator.rb +0 -0
- data/lib/selenium/webdriver/support/select.rb +0 -0
- data/lib/selenium/webdriver/support.rb +0 -0
- data/lib/selenium/webdriver/version.rb +1 -1
- data/lib/selenium/webdriver.rb +0 -0
- data/lib/selenium-webdriver.rb +0 -0
- data/selenium-webdriver.gemspec +0 -1
- metadata +7 -27
- data/lib/selenium/webdriver/firefox/extension.rb +0 -103
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
#
|
|
23
|
+
# A browser extension installed via Driver#install_web_extension.
|
|
24
|
+
# Wraps the identifier the browser assigned; pass it to Driver#uninstall_web_extension.
|
|
25
|
+
#
|
|
26
|
+
class WebExtension
|
|
27
|
+
#
|
|
28
|
+
# @return [String] identifier assigned to the extension by the browser
|
|
29
|
+
#
|
|
30
|
+
|
|
31
|
+
attr_reader :id
|
|
32
|
+
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
#
|
|
36
|
+
|
|
37
|
+
def initialize(id)
|
|
38
|
+
@id = id
|
|
39
|
+
end
|
|
40
|
+
end # WebExtension
|
|
41
|
+
end # WebDriver
|
|
42
|
+
end # Selenium
|
|
@@ -105,7 +105,7 @@ module Selenium
|
|
|
105
105
|
|
|
106
106
|
id = next_id
|
|
107
107
|
data = payload.merge(id: id)
|
|
108
|
-
WebDriver.logger.debug
|
|
108
|
+
WebDriver.logger.debug('WebSocket ->', id: :ws) { data.to_s[...MAX_LOG_MESSAGE_SIZE] }
|
|
109
109
|
data = JSON.generate(data)
|
|
110
110
|
out_frame = WebSocket::Frame::Outgoing::Client.new(version: ws.version, data: data, type: 'text')
|
|
111
111
|
|
|
@@ -200,7 +200,7 @@ module Selenium
|
|
|
200
200
|
msg = JSON.parse(message)
|
|
201
201
|
@messages_mtx.synchronize { messages[msg['id']] = msg if msg.key?('id') }
|
|
202
202
|
|
|
203
|
-
WebDriver.logger.debug
|
|
203
|
+
WebDriver.logger.debug('WebSocket <-', id: :ws) { msg.to_s[...MAX_LOG_MESSAGE_SIZE] }
|
|
204
204
|
msg
|
|
205
205
|
end
|
|
206
206
|
|
|
File without changes
|
|
@@ -56,27 +56,31 @@ module Selenium
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def zip(path)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
add_zip_entry zip, file, file.sub("#{path}/", '') unless File.directory?(file)
|
|
62
|
-
end
|
|
59
|
+
encode_zip(path, path)
|
|
60
|
+
end
|
|
63
61
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
# Keeps +path+ (a file or directory) as the archive's single top-level entry, unlike #zip
|
|
63
|
+
# which flattens a directory's contents; the Grid upload endpoint returns that one entry's path.
|
|
64
|
+
def zip_root(path)
|
|
65
|
+
encode_zip(path, File.dirname(path))
|
|
67
66
|
end
|
|
68
67
|
|
|
69
|
-
|
|
68
|
+
# Backwards-compatible name for the file-only behavior #zip_root now subsumes.
|
|
69
|
+
alias zip_file zip_root
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
def encode_zip(path, base)
|
|
70
74
|
with_tmp_zip do |zip|
|
|
71
|
-
|
|
75
|
+
::Find.find(path) do |file|
|
|
76
|
+
add_zip_entry zip, file, file.sub("#{base}/", '') unless File.directory?(file)
|
|
77
|
+
end
|
|
72
78
|
|
|
73
79
|
zip.commit
|
|
74
80
|
File.open(zip.name, 'rb') { |io| Base64.strict_encode64 io.read }
|
|
75
81
|
end
|
|
76
82
|
end
|
|
77
83
|
|
|
78
|
-
private
|
|
79
|
-
|
|
80
84
|
def with_tmp_zip(&blk)
|
|
81
85
|
# Don't use Tempfile since it lacks rb_file_s_rename permission on Windows.
|
|
82
86
|
Dir.mktmpdir do |tmp_dir|
|
|
@@ -94,6 +94,7 @@ require 'selenium/webdriver/common/options'
|
|
|
94
94
|
require 'selenium/webdriver/common/takes_screenshot'
|
|
95
95
|
require 'selenium/webdriver/common/driver'
|
|
96
96
|
require 'selenium/webdriver/common/element'
|
|
97
|
+
require 'selenium/webdriver/common/web_extension'
|
|
97
98
|
require 'selenium/webdriver/common/shadow_root'
|
|
98
99
|
require 'selenium/webdriver/common/websocket_connection'
|
|
99
100
|
require 'selenium/webdriver/common/child_process'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -38,13 +38,7 @@ module Selenium
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def install_addon(path, temporary)
|
|
41
|
-
|
|
42
|
-
Zipper.zip(path)
|
|
43
|
-
else
|
|
44
|
-
File.open(path, 'rb') { |crx_file| Base64.strict_encode64 crx_file.read }
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
payload = {addon: addon}
|
|
41
|
+
payload = {addon: encode_extension(path)}
|
|
48
42
|
payload[:temporary] = temporary unless temporary.nil?
|
|
49
43
|
execute :install_addon, {}, payload
|
|
50
44
|
end
|
|
@@ -53,6 +47,23 @@ module Selenium
|
|
|
53
47
|
execute :uninstall_addon, {}, {id: id}
|
|
54
48
|
end
|
|
55
49
|
|
|
50
|
+
def install_web_extension(path, allow_private_browsing: nil, permanent: nil)
|
|
51
|
+
unless bidi?
|
|
52
|
+
temporary = !permanent unless permanent.nil?
|
|
53
|
+
options = {temporary: temporary, allowPrivateBrowsing: allow_private_browsing}.compact
|
|
54
|
+
return WebDriver::WebExtension.new(execute(:install_addon, {}, {addon: encode_extension(path), **options}))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
options = {allow_private_browsing:, permanent:}.compact
|
|
58
|
+
result = web_extension.moz.install(extension_data: web_extension_data(path), **options)
|
|
59
|
+
WebDriver::WebExtension.new(result.extension)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def uninstall_web_extension(extension_id)
|
|
63
|
+
bidi? ? web_extension.uninstall(extension: extension_id) : uninstall_addon(extension_id)
|
|
64
|
+
nil
|
|
65
|
+
end
|
|
66
|
+
|
|
56
67
|
def full_screenshot
|
|
57
68
|
execute :full_page_screenshot
|
|
58
69
|
end
|
|
File without changes
|
|
@@ -25,7 +25,6 @@ module Selenium
|
|
|
25
25
|
|
|
26
26
|
VALID_PREFERENCE_TYPES = [TrueClass, FalseClass, Integer, Float, String].freeze
|
|
27
27
|
WEBDRIVER_PREFS = {
|
|
28
|
-
port: 'webdriver_firefox_port',
|
|
29
28
|
log_file: 'webdriver.log.file'
|
|
30
29
|
}.freeze
|
|
31
30
|
|
|
@@ -74,14 +73,12 @@ module Selenium
|
|
|
74
73
|
@model = verify_model(model)
|
|
75
74
|
|
|
76
75
|
@additional_prefs = read_model_prefs
|
|
77
|
-
@extensions = {}
|
|
78
76
|
end
|
|
79
77
|
|
|
80
78
|
def layout_on_disk
|
|
81
79
|
profile_dir = @model ? create_tmp_copy(@model) : Dir.mktmpdir('webdriver-profile')
|
|
82
80
|
FileReaper << profile_dir
|
|
83
81
|
|
|
84
|
-
install_extensions(profile_dir)
|
|
85
82
|
delete_lock_files(profile_dir)
|
|
86
83
|
delete_extensions_cache(profile_dir)
|
|
87
84
|
update_user_prefs_in(profile_dir)
|
|
@@ -108,32 +105,11 @@ module Selenium
|
|
|
108
105
|
@additional_prefs[key.to_s] = value
|
|
109
106
|
end
|
|
110
107
|
|
|
111
|
-
def port=(port)
|
|
112
|
-
WebDriver.logger.deprecate('Firefox::Profile#port=', 'the Service class', id: :firefox_profile)
|
|
113
|
-
self[WEBDRIVER_PREFS[:port]] = port
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def secure_ssl=(value)
|
|
117
|
-
WebDriver.logger.deprecate('Firefox::Profile#secure_ssl=', id: :firefox_profile)
|
|
118
|
-
@secure_ssl = value
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def load_no_focus_lib=(value)
|
|
122
|
-
WebDriver.logger.deprecate('Firefox::Profile#load_no_focus_lib=', id: :firefox_profile)
|
|
123
|
-
@load_no_focus_lib = value
|
|
124
|
-
end
|
|
125
|
-
|
|
126
108
|
def log_file=(file)
|
|
127
109
|
@log_file = file
|
|
128
110
|
self[WEBDRIVER_PREFS[:log_file]] = file
|
|
129
111
|
end
|
|
130
112
|
|
|
131
|
-
def add_extension(path, name = extension_name_for(path))
|
|
132
|
-
WebDriver.logger.deprecate('Firefox::Profile#add_extension', 'Driver#install_addon',
|
|
133
|
-
id: :firefox_profile)
|
|
134
|
-
@extensions[name] = Extension.new(path)
|
|
135
|
-
end
|
|
136
|
-
|
|
137
113
|
def proxy=(proxy)
|
|
138
114
|
raise TypeError, "expected #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}" unless proxy.is_a? Proxy
|
|
139
115
|
|
|
@@ -169,15 +145,6 @@ module Selenium
|
|
|
169
145
|
self["network.proxy.#{key}_port"] = Integer(port) if port
|
|
170
146
|
end
|
|
171
147
|
|
|
172
|
-
def install_extensions(directory)
|
|
173
|
-
destination = File.join(directory, 'extensions')
|
|
174
|
-
|
|
175
|
-
@extensions.each do |name, extension|
|
|
176
|
-
WebDriver.logger.debug({extension: name}.inspect, id: :firefox_profile)
|
|
177
|
-
extension.write_to(destination)
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
148
|
def read_model_prefs
|
|
182
149
|
return {} unless @model
|
|
183
150
|
|
|
@@ -194,10 +161,6 @@ module Selenium
|
|
|
194
161
|
end
|
|
195
162
|
end
|
|
196
163
|
|
|
197
|
-
def extension_name_for(path)
|
|
198
|
-
File.basename(path, File.extname(path))
|
|
199
|
-
end
|
|
200
|
-
|
|
201
164
|
def update_user_prefs_in(directory)
|
|
202
165
|
path = File.join(directory, 'user.js')
|
|
203
166
|
prefs = read_user_prefs(path)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -19,13 +19,11 @@
|
|
|
19
19
|
|
|
20
20
|
require 'timeout'
|
|
21
21
|
require 'socket'
|
|
22
|
-
require 'rexml/document'
|
|
23
22
|
|
|
24
23
|
module Selenium
|
|
25
24
|
module WebDriver
|
|
26
25
|
module Firefox
|
|
27
26
|
autoload :Util, 'selenium/webdriver/firefox/util'
|
|
28
|
-
autoload :Extension, 'selenium/webdriver/firefox/extension'
|
|
29
27
|
autoload :ProfilesIni, 'selenium/webdriver/firefox/profiles_ini'
|
|
30
28
|
autoload :Profile, 'selenium/webdriver/firefox/profile'
|
|
31
29
|
autoload :Features, 'selenium/webdriver/firefox/features'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -45,6 +45,16 @@ module Selenium
|
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
def install_web_extension(path)
|
|
49
|
+
result = web_extension.install(extension_data: web_extension_data(path))
|
|
50
|
+
WebExtension.new(result.extension)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def uninstall_web_extension(id)
|
|
54
|
+
web_extension.uninstall(extension: id)
|
|
55
|
+
nil
|
|
56
|
+
end
|
|
57
|
+
|
|
48
58
|
def get(url)
|
|
49
59
|
browsing_context.navigate(context: window_handle, url: url, wait: readiness_state)
|
|
50
60
|
nil
|
|
@@ -91,6 +101,19 @@ module Selenium
|
|
|
91
101
|
@browsing_context ||= BiDi::Protocol::BrowsingContext.new(connection)
|
|
92
102
|
end
|
|
93
103
|
|
|
104
|
+
def web_extension
|
|
105
|
+
@web_extension ||= BiDi::Protocol::WebExtension.new(connection)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# A directory only resolves on the machine running the browser, so upload it to the remote
|
|
109
|
+
# end and reference the returned path; archives and base64 bytes travel inline.
|
|
110
|
+
def web_extension_data(path)
|
|
111
|
+
return web_extension.extension_base64_encoded(value: encode_extension(path)) unless File.directory?(path)
|
|
112
|
+
|
|
113
|
+
path = upload(path) if respond_to?(:upload)
|
|
114
|
+
web_extension.extension_path(path: path)
|
|
115
|
+
end
|
|
116
|
+
|
|
94
117
|
def readiness_state
|
|
95
118
|
READINESS_STATE.fetch(capabilities[:page_load_strategy] || 'normal')
|
|
96
119
|
end
|
|
File without changes
|
|
File without changes
|
|
@@ -593,14 +593,18 @@ module Selenium
|
|
|
593
593
|
execute :click_fedcm_dialog_button, {}, {dialogButton: 'ConfirmIdpLoginContinue'}
|
|
594
594
|
end
|
|
595
595
|
|
|
596
|
-
def bidi
|
|
597
|
-
|
|
598
|
-
|
|
596
|
+
def bidi(*)
|
|
597
|
+
raise WebDriver::Error::WebDriverError,
|
|
598
|
+
'BiDi must be enabled by setting #web_socket_url to true in options class'
|
|
599
599
|
end
|
|
600
|
+
alias connection bidi
|
|
601
|
+
alias web_extension bidi
|
|
602
|
+
alias install_web_extension bidi
|
|
603
|
+
alias uninstall_web_extension bidi
|
|
604
|
+
private :web_extension
|
|
600
605
|
|
|
601
|
-
def
|
|
602
|
-
|
|
603
|
-
raise(WebDriver::Error::WebDriverError, msg)
|
|
606
|
+
def bidi?
|
|
607
|
+
!@bidi.nil?
|
|
604
608
|
end
|
|
605
609
|
|
|
606
610
|
def command_list
|
|
@@ -609,6 +613,16 @@ module Selenium
|
|
|
609
613
|
|
|
610
614
|
private
|
|
611
615
|
|
|
616
|
+
def encode_extension(path)
|
|
617
|
+
if File.directory?(path)
|
|
618
|
+
Zipper.zip(path)
|
|
619
|
+
elsif File.file?(path)
|
|
620
|
+
File.open(path, 'rb') { |file| Base64.strict_encode64(file.read) }
|
|
621
|
+
else
|
|
622
|
+
path # already base64-encoded bytes
|
|
623
|
+
end
|
|
624
|
+
end
|
|
625
|
+
|
|
612
626
|
#
|
|
613
627
|
# executes a command on the remote server.
|
|
614
628
|
#
|
|
File without changes
|
|
File without changes
|
|
@@ -42,20 +42,21 @@ module Selenium
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def upload(local_file)
|
|
45
|
-
|
|
46
|
-
WebDriver.logger.error("File detector only works with files. #{local_file.inspect} isn`t a file!",
|
|
47
|
-
id: :file_detector)
|
|
48
|
-
raise Error::WebDriverError, "You are trying to upload something that isn't a file."
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
execute :upload_file, {}, {file: Zipper.zip_file(local_file)}
|
|
45
|
+
execute :upload_file, {}, {file: Zipper.zip_root(local_file)}
|
|
52
46
|
end
|
|
53
47
|
|
|
54
48
|
def upload_if_necessary(keys)
|
|
55
49
|
local_files = keys.first&.split("\n")&.filter_map { |key| @file_detector.call(Array(key)) }
|
|
56
50
|
return keys unless local_files&.any?
|
|
57
51
|
|
|
58
|
-
keys = local_files.map
|
|
52
|
+
keys = local_files.map do |local_file|
|
|
53
|
+
unless File.file?(local_file)
|
|
54
|
+
WebDriver.logger.error("File detector only works with files. #{local_file.inspect} isn`t a file!",
|
|
55
|
+
id: :file_detector)
|
|
56
|
+
raise Error::WebDriverError, "You are trying to upload something that isn't a file."
|
|
57
|
+
end
|
|
58
|
+
upload(local_file)
|
|
59
|
+
end
|
|
59
60
|
Array(keys.join("\n"))
|
|
60
61
|
end
|
|
61
62
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/selenium/webdriver.rb
CHANGED
|
File without changes
|
data/lib/selenium-webdriver.rb
CHANGED
|
File without changes
|
data/selenium-webdriver.gemspec
CHANGED
|
@@ -51,7 +51,6 @@ Gem::Specification.new do |s|
|
|
|
51
51
|
|
|
52
52
|
s.add_dependency 'base64', ['~> 0.2']
|
|
53
53
|
s.add_dependency 'logger', ['~> 1.4']
|
|
54
|
-
s.add_dependency 'rexml', ['~> 3.2', '>= 3.2.5']
|
|
55
54
|
s.add_dependency 'rubyzip', ['>= 1.2.2', '< 4.0']
|
|
56
55
|
s.add_dependency 'websocket', ['~> 1.0']
|
|
57
56
|
|
metadata
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: selenium-webdriver
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.50.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alex Rodionov
|
|
8
8
|
- Titus Fortner
|
|
9
9
|
- Thomas Walpole
|
|
10
|
-
autorequire:
|
|
11
10
|
bindir: bin
|
|
12
11
|
cert_chain: []
|
|
13
|
-
date:
|
|
12
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
14
13
|
dependencies:
|
|
15
14
|
- !ruby/object:Gem::Dependency
|
|
16
15
|
name: base64
|
|
@@ -40,26 +39,6 @@ dependencies:
|
|
|
40
39
|
- - "~>"
|
|
41
40
|
- !ruby/object:Gem::Version
|
|
42
41
|
version: '1.4'
|
|
43
|
-
- !ruby/object:Gem::Dependency
|
|
44
|
-
name: rexml
|
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
|
46
|
-
requirements:
|
|
47
|
-
- - "~>"
|
|
48
|
-
- !ruby/object:Gem::Version
|
|
49
|
-
version: '3.2'
|
|
50
|
-
- - ">="
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: 3.2.5
|
|
53
|
-
type: :runtime
|
|
54
|
-
prerelease: false
|
|
55
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
56
|
-
requirements:
|
|
57
|
-
- - "~>"
|
|
58
|
-
- !ruby/object:Gem::Version
|
|
59
|
-
version: '3.2'
|
|
60
|
-
- - ">="
|
|
61
|
-
- !ruby/object:Gem::Version
|
|
62
|
-
version: 3.2.5
|
|
63
42
|
- !ruby/object:Gem::Dependency
|
|
64
43
|
name: rubyzip
|
|
65
44
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -303,11 +282,14 @@ files:
|
|
|
303
282
|
- lib/selenium/webdriver/bidi/protocol/bluetooth.rb
|
|
304
283
|
- lib/selenium/webdriver/bidi/protocol/browser.rb
|
|
305
284
|
- lib/selenium/webdriver/bidi/protocol/browsing_context.rb
|
|
285
|
+
- lib/selenium/webdriver/bidi/protocol/digital_credentials.rb
|
|
306
286
|
- lib/selenium/webdriver/bidi/protocol/domain.rb
|
|
307
287
|
- lib/selenium/webdriver/bidi/protocol/emulation.rb
|
|
308
288
|
- lib/selenium/webdriver/bidi/protocol/error_code.rb
|
|
309
289
|
- lib/selenium/webdriver/bidi/protocol/input.rb
|
|
310
290
|
- lib/selenium/webdriver/bidi/protocol/log.rb
|
|
291
|
+
- lib/selenium/webdriver/bidi/protocol/moz_debugging.rb
|
|
292
|
+
- lib/selenium/webdriver/bidi/protocol/moz_profiler.rb
|
|
311
293
|
- lib/selenium/webdriver/bidi/protocol/network.rb
|
|
312
294
|
- lib/selenium/webdriver/bidi/protocol/permissions.rb
|
|
313
295
|
- lib/selenium/webdriver/bidi/protocol/script.rb
|
|
@@ -418,6 +400,7 @@ files:
|
|
|
418
400
|
- lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator.rb
|
|
419
401
|
- lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator_options.rb
|
|
420
402
|
- lib/selenium/webdriver/common/wait.rb
|
|
403
|
+
- lib/selenium/webdriver/common/web_extension.rb
|
|
421
404
|
- lib/selenium/webdriver/common/websocket_connection.rb
|
|
422
405
|
- lib/selenium/webdriver/common/window.rb
|
|
423
406
|
- lib/selenium/webdriver/common/zipper.rb
|
|
@@ -437,7 +420,6 @@ files:
|
|
|
437
420
|
- lib/selenium/webdriver/edge/service.rb
|
|
438
421
|
- lib/selenium/webdriver/firefox.rb
|
|
439
422
|
- lib/selenium/webdriver/firefox/driver.rb
|
|
440
|
-
- lib/selenium/webdriver/firefox/extension.rb
|
|
441
423
|
- lib/selenium/webdriver/firefox/features.rb
|
|
442
424
|
- lib/selenium/webdriver/firefox/options.rb
|
|
443
425
|
- lib/selenium/webdriver/firefox/profile.rb
|
|
@@ -490,7 +472,6 @@ metadata:
|
|
|
490
472
|
source_code_uri: https://github.com/SeleniumHQ/selenium/tree/trunk/rb
|
|
491
473
|
rubygems_mfa_required: 'true'
|
|
492
474
|
funding_uri: https://github.com/sponsors/SeleniumHQ
|
|
493
|
-
post_install_message:
|
|
494
475
|
rdoc_options: []
|
|
495
476
|
require_paths:
|
|
496
477
|
- lib
|
|
@@ -505,8 +486,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
505
486
|
- !ruby/object:Gem::Version
|
|
506
487
|
version: 1.3.1
|
|
507
488
|
requirements: []
|
|
508
|
-
rubygems_version:
|
|
509
|
-
signing_key:
|
|
489
|
+
rubygems_version: 4.0.3
|
|
510
490
|
specification_version: 4
|
|
511
491
|
summary: Selenium is a browser automation tool for automated testing of webapps and
|
|
512
492
|
more
|