selenium-webdriver 4.0.0.alpha7 → 4.0.0.beta1
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 +25 -0
- data/LICENSE +1 -1
- data/README.md +4 -5
- data/lib/selenium/server.rb +2 -26
- data/lib/selenium/webdriver.rb +0 -2
- data/lib/selenium/webdriver/atoms/findElements.js +88 -86
- data/lib/selenium/webdriver/chrome/driver.rb +6 -0
- data/lib/selenium/webdriver/chrome/features.rb +66 -0
- data/lib/selenium/webdriver/chrome/options.rb +51 -39
- data/lib/selenium/webdriver/chrome/service.rb +1 -1
- data/lib/selenium/webdriver/common.rb +2 -1
- data/lib/selenium/webdriver/common/driver.rb +11 -5
- data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +1 -2
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +5 -8
- data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +7 -1
- data/lib/selenium/webdriver/common/driver_extensions/has_logs.rb +30 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -27
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +1 -0
- data/lib/selenium/webdriver/{edge_html/driver.rb → common/driver_extensions/prints_page.rb} +7 -13
- data/lib/selenium/webdriver/common/manager.rb +6 -1
- data/lib/selenium/webdriver/common/options.rb +25 -8
- data/lib/selenium/webdriver/common/platform.rb +2 -0
- data/lib/selenium/webdriver/common/service.rb +0 -8
- data/lib/selenium/webdriver/common/service_manager.rb +1 -1
- data/lib/selenium/webdriver/common/target_locator.rb +4 -4
- data/lib/selenium/webdriver/devtools.rb +5 -2
- data/lib/selenium/webdriver/devtools/v85/memory.rb +1 -1
- data/lib/selenium/webdriver/devtools/v85/network.rb +1 -1
- data/lib/selenium/webdriver/devtools/v85/page.rb +1 -1
- data/lib/selenium/webdriver/devtools/v86/memory.rb +1 -1
- data/lib/selenium/webdriver/devtools/v86/network.rb +1 -1
- data/lib/selenium/webdriver/devtools/v86/page.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/accessibility.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/animation.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/application_cache.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/audits.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/background_service.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/browser.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/cache_storage.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/cast.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/console.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/css.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/database.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/debugger.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/device_orientation.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/dom.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/dom_debugger.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/dom_snapshot.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/dom_storage.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/emulation.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/fetch.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/headless_experimental.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/heap_profiler.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/indexed_db.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/input.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/inspector.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/io.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/layer_tree.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/log.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/media.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/memory.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/network.rb +3 -3
- data/lib/selenium/webdriver/devtools/v87/overlay.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/page.rb +3 -3
- data/lib/selenium/webdriver/devtools/v87/performance.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/profiler.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/runtime.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/schema.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/security.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/service_worker.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/storage.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/system_info.rb +1 -1
- data/lib/selenium/webdriver/devtools/v87/target.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/tethering.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/tracing.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/web_audio.rb +2 -2
- data/lib/selenium/webdriver/devtools/v87/web_authn.rb +1 -1
- data/lib/selenium/webdriver/devtools/{v84 → v88}/accessibility.rb +12 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/animation.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/application_cache.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/audits.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/background_service.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/browser.rb +8 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/cache_storage.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/cast.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/console.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/css.rb +17 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/database.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/debugger.rb +9 -7
- data/lib/selenium/webdriver/devtools/{v84 → v88}/device_orientation.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/dom.rb +10 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/dom_debugger.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/dom_snapshot.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/dom_storage.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/emulation.rb +21 -5
- data/lib/selenium/webdriver/devtools/{v84 → v88}/fetch.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/headless_experimental.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/heap_profiler.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/indexed_db.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/input.rb +12 -6
- data/lib/selenium/webdriver/devtools/{v84 → v88}/inspector.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/io.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/layer_tree.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/log.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/media.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/memory.rb +4 -4
- data/lib/selenium/webdriver/devtools/{v84 → v88}/network.rb +21 -4
- data/lib/selenium/webdriver/devtools/{v84 → v88}/overlay.rb +29 -5
- data/lib/selenium/webdriver/devtools/{v84 → v88}/page.rb +4 -4
- data/lib/selenium/webdriver/devtools/{v84 → v88}/performance.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/profiler.rb +15 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/runtime.rb +9 -7
- data/lib/selenium/webdriver/devtools/{v84 → v88}/schema.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/security.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/service_worker.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/storage.rb +9 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/system_info.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/target.rb +7 -5
- data/lib/selenium/webdriver/devtools/{v84 → v88}/tethering.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/tracing.rb +6 -5
- data/lib/selenium/webdriver/devtools/{v84 → v88}/web_audio.rb +3 -3
- data/lib/selenium/webdriver/devtools/{v84 → v88}/web_authn.rb +9 -3
- data/lib/selenium/webdriver/edge.rb +7 -29
- data/lib/selenium/webdriver/{edge_chrome → edge}/bridge.rb +2 -2
- data/lib/selenium/webdriver/{edge_chrome → edge}/driver.rb +4 -4
- data/lib/selenium/webdriver/edge/features.rb +39 -0
- data/lib/selenium/webdriver/{edge_chrome → edge}/options.rb +9 -3
- data/lib/selenium/webdriver/{edge_chrome → edge}/profile.rb +2 -2
- data/lib/selenium/webdriver/{edge_chrome → edge}/service.rb +2 -2
- data/lib/selenium/webdriver/firefox/driver.rb +13 -0
- data/lib/selenium/webdriver/firefox/features.rb +47 -0
- data/lib/selenium/webdriver/firefox/options.rb +20 -21
- data/lib/selenium/webdriver/firefox/profile.rb +12 -2
- data/lib/selenium/webdriver/firefox/service.rb +1 -1
- data/lib/selenium/webdriver/ie/options.rb +0 -10
- data/lib/selenium/webdriver/ie/service.rb +1 -1
- data/lib/selenium/webdriver/remote/bridge.rb +6 -26
- data/lib/selenium/webdriver/remote/capabilities.rb +1 -15
- data/lib/selenium/webdriver/remote/commands.rb +1 -0
- data/lib/selenium/webdriver/remote/driver.rb +6 -1
- data/lib/selenium/webdriver/remote/http/default.rb +2 -2
- data/lib/selenium/webdriver/remote/http/persistent.rb +6 -0
- data/lib/selenium/webdriver/{common/driver_extensions/rotatable.rb → safari/features.rb} +26 -36
- data/lib/selenium/webdriver/safari/options.rb +0 -25
- data/lib/selenium/webdriver/support/block_event_listener.rb +1 -1
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +1 -1
- data/lib/selenium/webdriver/version.rb +1 -1
- data/selenium-webdriver.gemspec +4 -2
- data/selenium_server_deploy.jar +0 -0
- metadata +89 -59
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +0 -65
- data/lib/selenium/webdriver/edge_html/options.rb +0 -84
- data/lib/selenium/webdriver/edge_html/service.rb +0 -47
@@ -50,7 +50,6 @@ require 'selenium/webdriver/common/action_builder'
|
|
50
50
|
require 'selenium/webdriver/common/html5/shared_web_storage'
|
51
51
|
require 'selenium/webdriver/common/html5/local_storage'
|
52
52
|
require 'selenium/webdriver/common/html5/session_storage'
|
53
|
-
require 'selenium/webdriver/common/driver_extensions/rotatable'
|
54
53
|
require 'selenium/webdriver/common/driver_extensions/has_web_storage'
|
55
54
|
require 'selenium/webdriver/common/driver_extensions/downloads_files'
|
56
55
|
require 'selenium/webdriver/common/driver_extensions/has_location'
|
@@ -60,10 +59,12 @@ require 'selenium/webdriver/common/driver_extensions/has_network_conditions'
|
|
60
59
|
require 'selenium/webdriver/common/driver_extensions/has_network_connection'
|
61
60
|
require 'selenium/webdriver/common/driver_extensions/has_permissions'
|
62
61
|
require 'selenium/webdriver/common/driver_extensions/has_debugger'
|
62
|
+
require 'selenium/webdriver/common/driver_extensions/prints_page'
|
63
63
|
require 'selenium/webdriver/common/driver_extensions/uploads_files'
|
64
64
|
require 'selenium/webdriver/common/driver_extensions/has_addons'
|
65
65
|
require 'selenium/webdriver/common/driver_extensions/has_devtools'
|
66
66
|
require 'selenium/webdriver/common/driver_extensions/has_authentication'
|
67
|
+
require 'selenium/webdriver/common/driver_extensions/has_logs'
|
67
68
|
require 'selenium/webdriver/common/driver_extensions/has_log_events'
|
68
69
|
require 'selenium/webdriver/common/keys'
|
69
70
|
require 'selenium/webdriver/common/profile_helper'
|
@@ -53,10 +53,6 @@ module Selenium
|
|
53
53
|
Firefox::Driver.new(**opts)
|
54
54
|
when :edge
|
55
55
|
Edge::Driver.new(**opts)
|
56
|
-
when :edge_chrome
|
57
|
-
EdgeChrome::Driver.new(**opts)
|
58
|
-
when :edge_html
|
59
|
-
EdgeHtml::Driver.new(**opts)
|
60
56
|
when :remote
|
61
57
|
Remote::Driver.new(**opts)
|
62
58
|
else
|
@@ -82,6 +78,16 @@ module Selenium
|
|
82
78
|
format '#<%<class>s:0x%<hash>x browser=%<browser>s>', class: self.class, hash: hash * 2, browser: bridge.browser.inspect
|
83
79
|
end
|
84
80
|
|
81
|
+
#
|
82
|
+
# information about whether a remote end is in a state in which it can create new sessions,
|
83
|
+
# and may include additional meta information.
|
84
|
+
#
|
85
|
+
# @return [Hash]
|
86
|
+
#
|
87
|
+
def status
|
88
|
+
@bridge.status
|
89
|
+
end
|
90
|
+
|
85
91
|
#
|
86
92
|
# @return [Navigation]
|
87
93
|
# @see Navigation
|
@@ -298,7 +304,7 @@ module Selenium
|
|
298
304
|
def create_bridge(**opts)
|
299
305
|
opts[:url] ||= service_url(opts)
|
300
306
|
caps = opts.delete(:capabilities)
|
301
|
-
#
|
307
|
+
# NOTE: This is deprecated
|
302
308
|
cap_array = caps.is_a?(Hash) ? [caps] : Array(caps)
|
303
309
|
|
304
310
|
desired_capabilities = opts.delete(:desired_capabilities)
|
@@ -29,8 +29,7 @@ module Selenium
|
|
29
29
|
#
|
30
30
|
|
31
31
|
def devtools
|
32
|
-
|
33
|
-
@devtools ||= DevTools.new(url: debugger_address, version: version)
|
32
|
+
@devtools ||= DevTools.new(url: debugger_address, version: devtools_version)
|
34
33
|
end
|
35
34
|
|
36
35
|
end # HasDevTools
|
@@ -17,23 +17,20 @@
|
|
17
17
|
# specific language governing permissions and limitations
|
18
18
|
# under the License.
|
19
19
|
|
20
|
+
# TODO: Deprecated; Delete after 4.0 release
|
20
21
|
module Selenium
|
21
22
|
module WebDriver
|
22
23
|
module DriverExtensions
|
23
24
|
module HasLocation
|
24
25
|
def location
|
25
|
-
|
26
|
+
raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting location'
|
26
27
|
end
|
27
28
|
|
28
|
-
def location=(
|
29
|
-
raise
|
30
|
-
|
31
|
-
@bridge.set_location loc.latitude, loc.longitude, loc.altitude
|
29
|
+
def location=(*)
|
30
|
+
raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting location'
|
32
31
|
end
|
32
|
+
alias_method :set_location, :location
|
33
33
|
|
34
|
-
def set_location(lat, lon, alt)
|
35
|
-
self.location = Location.new(Float(lat), Float(lon), Float(alt))
|
36
|
-
end
|
37
34
|
end # HasLocation
|
38
35
|
end # DriverExtensions
|
39
36
|
end # WebDriver
|
@@ -89,8 +89,14 @@ module Selenium
|
|
89
89
|
|
90
90
|
def log_exception_events
|
91
91
|
devtools.runtime.on(:exception_thrown) do |params|
|
92
|
+
description = if params.dig('exceptionDetails', 'exception')
|
93
|
+
params.dig('exceptionDetails', 'exception', 'description')
|
94
|
+
else
|
95
|
+
params.dig('exceptionDetails', 'text')
|
96
|
+
end
|
97
|
+
|
92
98
|
event = DevTools::ExceptionEvent.new(
|
93
|
-
description:
|
99
|
+
description: description,
|
94
100
|
timestamp: params['timestamp'],
|
95
101
|
stacktrace: params.dig('exceptionDetails', 'stackTrace', 'callFrames')
|
96
102
|
)
|
@@ -0,0 +1,30 @@
|
|
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 DriverExtensions
|
23
|
+
module HasLogs
|
24
|
+
def logs
|
25
|
+
@logs ||= Logs.new(@bridge)
|
26
|
+
end
|
27
|
+
end # HasLogs
|
28
|
+
end # DriverExtensions
|
29
|
+
end # WebDriver
|
30
|
+
end # Selenium
|
@@ -17,40 +17,17 @@
|
|
17
17
|
# specific language governing permissions and limitations
|
18
18
|
# under the License.
|
19
19
|
|
20
|
+
# TODO: Deprecated; Delete after 4.0 release
|
20
21
|
module Selenium
|
21
22
|
module WebDriver
|
22
23
|
module DriverExtensions
|
23
24
|
module HasNetworkConnection
|
24
25
|
def network_connection_type
|
25
|
-
|
26
|
-
|
27
|
-
connection_type = values_to_type[connection_value]
|
28
|
-
|
29
|
-
# In case the connection type is not recognized return the
|
30
|
-
# connection value.
|
31
|
-
connection_type || connection_value
|
32
|
-
end
|
33
|
-
|
34
|
-
def network_connection_type=(connection_type)
|
35
|
-
raise ArgumentError, 'Invalid connection type' unless valid_type? connection_type
|
36
|
-
|
37
|
-
connection_value = type_to_values[connection_type]
|
38
|
-
|
39
|
-
@bridge.network_connection = connection_value
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def type_to_values
|
45
|
-
{airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0}
|
46
|
-
end
|
47
|
-
|
48
|
-
def values_to_type
|
49
|
-
type_to_values.invert
|
26
|
+
raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting network connection'
|
50
27
|
end
|
51
28
|
|
52
|
-
def
|
53
|
-
|
29
|
+
def network_connection_type=(*)
|
30
|
+
raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting network connection'
|
54
31
|
end
|
55
32
|
end # HasNetworkConnection
|
56
33
|
end # DriverExtensions
|
@@ -19,20 +19,14 @@
|
|
19
19
|
|
20
20
|
module Selenium
|
21
21
|
module WebDriver
|
22
|
-
module
|
22
|
+
module DriverExtensions
|
23
|
+
module PrintsPage
|
24
|
+
def print_page(**options)
|
25
|
+
options[:page_ranges] &&= Array(options[:page_ranges])
|
23
26
|
|
24
|
-
|
25
|
-
# Driver implementation for Microsoft Edge.
|
26
|
-
# @api private
|
27
|
-
#
|
28
|
-
|
29
|
-
class Driver < WebDriver::Driver
|
30
|
-
include DriverExtensions::HasWebStorage
|
31
|
-
|
32
|
-
def browser
|
33
|
-
:edge_html
|
27
|
+
@bridge.print_page(options)
|
34
28
|
end
|
35
|
-
end #
|
36
|
-
end #
|
29
|
+
end # PrintsPage
|
30
|
+
end # DriverExtensions
|
37
31
|
end # WebDriver
|
38
32
|
end # Selenium
|
@@ -46,12 +46,15 @@ module Selenium
|
|
46
46
|
raise ArgumentError, 'name is required' unless opts[:name]
|
47
47
|
raise ArgumentError, 'value is required' unless opts[:value]
|
48
48
|
|
49
|
-
|
49
|
+
# NOTE: This is required because of https://bugs.chromium.org/p/chromedriver/issues/detail?id=3732
|
50
50
|
opts[:secure] ||= false
|
51
51
|
|
52
52
|
same_site = opts.delete(:same_site)
|
53
53
|
opts[:sameSite] = same_site if same_site
|
54
54
|
|
55
|
+
http_only = opts.delete(:http_only)
|
56
|
+
opts[:httpOnly] = http_only if http_only
|
57
|
+
|
55
58
|
obj = opts.delete(:expires)
|
56
59
|
opts[:expiry] = seconds_from(obj).to_i if obj
|
57
60
|
|
@@ -106,6 +109,7 @@ module Selenium
|
|
106
109
|
#
|
107
110
|
|
108
111
|
def logs
|
112
|
+
WebDriver.logger.deprecate('Manager#logs', 'Chrome::Driver#logs')
|
109
113
|
@logs ||= Logs.new(@bridge)
|
110
114
|
end
|
111
115
|
|
@@ -174,6 +178,7 @@ module Selenium
|
|
174
178
|
domain: cookie['domain'] && strip_port(cookie['domain']),
|
175
179
|
expires: cookie['expiry'] && datetime_at(cookie['expiry']),
|
176
180
|
same_site: cookie['sameSite'],
|
181
|
+
http_only: cookie['httpOnly'],
|
177
182
|
secure: cookie['secure']
|
178
183
|
}
|
179
184
|
end
|
@@ -23,19 +23,25 @@ module Selenium
|
|
23
23
|
W3C_OPTIONS = %i[browser_name browser_version platform_name accept_insecure_certs page_load_strategy proxy
|
24
24
|
set_window_rect timeouts unhandled_prompt_behavior strict_file_interactability].freeze
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
def self.set_capabilities
|
27
|
+
(W3C_OPTIONS + self::CAPABILITIES.keys).each do |key|
|
28
|
+
next if method_defined? key
|
29
|
+
|
30
|
+
define_method key do
|
31
|
+
@options[key]
|
32
|
+
end
|
30
33
|
|
31
|
-
|
32
|
-
|
34
|
+
define_method "#{key}=" do |value|
|
35
|
+
@options[key] = value
|
36
|
+
end
|
33
37
|
end
|
34
38
|
end
|
35
39
|
|
36
40
|
attr_accessor :options
|
37
41
|
|
38
42
|
def initialize(options: nil, **opts)
|
43
|
+
self.class.set_capabilities
|
44
|
+
|
39
45
|
@options = if options
|
40
46
|
WebDriver.logger.deprecate(":options as keyword for initializing #{self.class}",
|
41
47
|
"custom values directly in #new constructor",
|
@@ -78,16 +84,27 @@ module Selenium
|
|
78
84
|
end
|
79
85
|
browser_options = defined?(self.class::KEY) ? {self.class::KEY => options} : options
|
80
86
|
|
81
|
-
process_browser_options(browser_options)
|
87
|
+
process_browser_options(browser_options)
|
82
88
|
generate_as_json(w3c_options.merge(browser_options))
|
83
89
|
end
|
84
90
|
|
85
91
|
private
|
86
92
|
|
93
|
+
def process_browser_options(_browser_options)
|
94
|
+
nil
|
95
|
+
end
|
96
|
+
|
97
|
+
def camelize?(_key)
|
98
|
+
true
|
99
|
+
end
|
100
|
+
|
87
101
|
def generate_as_json(value, camelize_keys: true)
|
88
102
|
if value.is_a?(Hash)
|
89
103
|
value.each_with_object({}) do |(key, val), hash|
|
90
|
-
|
104
|
+
next if val.respond_to?(:empty?) && val.empty?
|
105
|
+
|
106
|
+
key = convert_json_key(key, camelize: camelize_keys)
|
107
|
+
hash[key] = generate_as_json(val, camelize_keys: camelize?(key))
|
91
108
|
end
|
92
109
|
elsif value.respond_to?(:as_json)
|
93
110
|
value.as_json
|
@@ -45,14 +45,6 @@ module Selenium
|
|
45
45
|
Edge::Service.new(**opts)
|
46
46
|
end
|
47
47
|
|
48
|
-
def edge_chrome(**opts)
|
49
|
-
EdgeChrome::Service.new(**opts)
|
50
|
-
end
|
51
|
-
|
52
|
-
def edge_html(**opts)
|
53
|
-
EdgeHtml::Service.new(**opts)
|
54
|
-
end
|
55
|
-
|
56
48
|
def safari(**opts)
|
57
49
|
Safari::Service.new(**opts)
|
58
50
|
end
|
@@ -103,7 +103,7 @@ module Selenium
|
|
103
103
|
|
104
104
|
def start_process
|
105
105
|
@process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
|
106
|
-
#
|
106
|
+
# NOTE: this is a bug only in Windows 7
|
107
107
|
@process.leader = true unless Platform.windows?
|
108
108
|
@process.start
|
109
109
|
end
|
@@ -57,10 +57,10 @@ module Selenium
|
|
57
57
|
def window(id)
|
58
58
|
if block_given?
|
59
59
|
original = begin
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
@bridge.window_handle
|
61
|
+
rescue Error::NoSuchWindowError
|
62
|
+
nil
|
63
|
+
end
|
64
64
|
|
65
65
|
unless @bridge.window_handles.include? id
|
66
66
|
raise Error::NoSuchWindowError, "The specified identifier '#{id}' is not found in the window handle list"
|
@@ -24,7 +24,7 @@ module Selenium
|
|
24
24
|
autoload :ExceptionEvent, 'selenium/webdriver/devtools/exception_event'
|
25
25
|
autoload :MutationEvent, 'selenium/webdriver/devtools/mutation_event'
|
26
26
|
|
27
|
-
SUPPORTED_VERSIONS = [
|
27
|
+
SUPPORTED_VERSIONS = [85, 86, 87, 88].freeze
|
28
28
|
|
29
29
|
def initialize(url:, version:)
|
30
30
|
@messages = []
|
@@ -80,6 +80,9 @@ module Selenium
|
|
80
80
|
incoming_frame << socket.readpartial(1024)
|
81
81
|
|
82
82
|
while (frame = incoming_frame.next)
|
83
|
+
# Firefox will periodically fail on unparsable empty frame
|
84
|
+
break if frame.to_s.empty?
|
85
|
+
|
83
86
|
message = JSON.parse(frame.to_s)
|
84
87
|
@messages << message
|
85
88
|
WebDriver.logger.debug "DevTools <- #{message}"
|
@@ -112,7 +115,7 @@ module Selenium
|
|
112
115
|
|
113
116
|
def page_target
|
114
117
|
@page_target ||= begin
|
115
|
-
response = Net::HTTP.get(@uri.hostname, '/json', @uri.port)
|
118
|
+
response = Net::HTTP.get(@uri.hostname, '/json/list', @uri.port)
|
116
119
|
targets = JSON.parse(response)
|
117
120
|
targets.find { |target| target['type'] == 'page' }
|
118
121
|
end
|
@@ -166,7 +166,7 @@ module Selenium
|
|
166
166
|
@devtools.send_cmd('Page.getResourceTree')
|
167
167
|
end
|
168
168
|
|
169
|
-
def
|
169
|
+
def handle_javascript_dialog(accept:, prompt_text: nil)
|
170
170
|
@devtools.send_cmd('Page.handleJavaScriptDialog',
|
171
171
|
accept: accept,
|
172
172
|
promptText: prompt_text)
|