selenium-webdriver 4.0.0.alpha7 → 4.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|