selenium-webdriver 3.12.0 → 3.142.7
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 +236 -0
- data/Gemfile +2 -0
- data/LICENSE +1 -1
- data/lib/selenium-webdriver.rb +2 -0
- data/lib/selenium/server.rb +13 -9
- data/lib/selenium/webdriver.rb +3 -1
- data/lib/selenium/webdriver/atoms.rb +20 -1
- data/lib/selenium/webdriver/atoms/getAttribute.js +6 -7
- data/lib/selenium/webdriver/atoms/isDisplayed.js +102 -0
- data/lib/selenium/webdriver/chrome.rb +10 -4
- data/lib/selenium/webdriver/chrome/bridge.rb +27 -2
- data/lib/selenium/webdriver/chrome/driver.rb +33 -21
- data/lib/selenium/webdriver/chrome/options.rb +13 -6
- data/lib/selenium/webdriver/chrome/profile.rb +6 -5
- data/lib/selenium/webdriver/chrome/service.rb +13 -13
- data/lib/selenium/webdriver/common.rb +6 -2
- data/lib/selenium/webdriver/common/action_builder.rb +3 -1
- data/lib/selenium/webdriver/common/alert.rb +2 -0
- data/lib/selenium/webdriver/common/bridge_helper.rb +8 -5
- data/lib/selenium/webdriver/common/driver.rb +22 -7
- data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +45 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +3 -3
- data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +3 -1
- data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +3 -1
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -3
- data/lib/selenium/webdriver/common/element.rb +4 -2
- data/lib/selenium/webdriver/common/error.rb +75 -18
- data/lib/selenium/webdriver/common/file_reaper.rb +3 -3
- data/lib/selenium/webdriver/common/html5/local_storage.rb +2 -0
- data/lib/selenium/webdriver/common/html5/session_storage.rb +2 -0
- data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +4 -1
- data/lib/selenium/webdriver/common/interactions/input_device.rb +4 -1
- data/lib/selenium/webdriver/common/interactions/interaction.rb +3 -0
- data/lib/selenium/webdriver/common/interactions/interactions.rb +3 -1
- data/lib/selenium/webdriver/common/interactions/key_actions.rb +2 -0
- data/lib/selenium/webdriver/common/interactions/key_input.rb +4 -0
- data/lib/selenium/webdriver/common/interactions/none_input.rb +3 -0
- data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +14 -4
- data/lib/selenium/webdriver/common/interactions/pointer_input.rb +7 -0
- data/lib/selenium/webdriver/common/keyboard.rb +4 -1
- data/lib/selenium/webdriver/common/keys.rb +3 -0
- data/lib/selenium/webdriver/common/log_entry.rb +4 -2
- data/lib/selenium/webdriver/common/logger.rb +15 -40
- data/lib/selenium/webdriver/common/logs.rb +2 -0
- data/lib/selenium/webdriver/common/manager.rb +177 -0
- data/lib/selenium/webdriver/common/mouse.rb +3 -0
- data/lib/selenium/webdriver/common/navigation.rb +2 -0
- data/lib/selenium/webdriver/common/options.rb +28 -126
- data/lib/selenium/webdriver/common/platform.rb +31 -30
- data/lib/selenium/webdriver/common/port_prober.rb +6 -17
- data/lib/selenium/webdriver/common/profile_helper.rb +2 -0
- data/lib/selenium/webdriver/common/proxy.rb +13 -5
- data/lib/selenium/webdriver/common/search_context.rb +6 -8
- data/lib/selenium/webdriver/common/service.rb +87 -29
- data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
- data/lib/selenium/webdriver/common/socket_poller.rb +26 -17
- data/lib/selenium/webdriver/common/target_locator.rb +6 -4
- data/lib/selenium/webdriver/common/timeouts.rb +2 -0
- data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -6
- data/lib/selenium/webdriver/common/touch_screen.rb +4 -1
- data/lib/selenium/webdriver/common/w3c_action_builder.rb +3 -0
- data/lib/selenium/webdriver/common/{w3c_options.rb → w3c_manager.rb} +3 -1
- data/lib/selenium/webdriver/common/wait.rb +13 -5
- data/lib/selenium/webdriver/common/window.rb +2 -0
- data/lib/selenium/webdriver/common/zipper.rb +3 -3
- data/lib/selenium/webdriver/edge.rb +12 -5
- data/lib/selenium/webdriver/edge/bridge.rb +2 -0
- data/lib/selenium/webdriver/edge/driver.rb +6 -13
- data/lib/selenium/webdriver/edge/options.rb +80 -0
- data/lib/selenium/webdriver/edge/service.rb +12 -15
- data/lib/selenium/webdriver/firefox.rb +10 -4
- data/lib/selenium/webdriver/firefox/binary.rb +9 -8
- data/lib/selenium/webdriver/firefox/driver.rb +2 -0
- data/lib/selenium/webdriver/firefox/extension.rb +4 -4
- data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -1
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/firefox/launcher.rb +3 -0
- data/lib/selenium/webdriver/firefox/legacy/driver.rb +7 -3
- data/lib/selenium/webdriver/firefox/marionette/bridge.rb +4 -2
- data/lib/selenium/webdriver/firefox/marionette/driver.rb +6 -12
- data/lib/selenium/webdriver/firefox/options.rb +22 -9
- data/lib/selenium/webdriver/firefox/profile.rb +7 -8
- data/lib/selenium/webdriver/firefox/profiles_ini.rb +3 -0
- data/lib/selenium/webdriver/firefox/service.rb +11 -22
- data/lib/selenium/webdriver/firefox/util.rb +2 -0
- data/lib/selenium/webdriver/ie.rb +10 -4
- data/lib/selenium/webdriver/ie/driver.rb +5 -11
- data/lib/selenium/webdriver/ie/options.rb +6 -4
- data/lib/selenium/webdriver/ie/service.rb +8 -12
- data/lib/selenium/webdriver/remote.rb +2 -0
- data/lib/selenium/webdriver/remote/bridge.rb +15 -10
- data/lib/selenium/webdriver/remote/capabilities.rb +28 -12
- data/lib/selenium/webdriver/remote/driver.rb +2 -0
- data/lib/selenium/webdriver/remote/http/common.rb +11 -4
- data/lib/selenium/webdriver/remote/http/curb.rb +4 -2
- data/lib/selenium/webdriver/remote/http/default.rb +31 -25
- data/lib/selenium/webdriver/remote/http/persistent.rb +3 -1
- data/lib/selenium/webdriver/remote/oss/bridge.rb +14 -6
- data/lib/selenium/webdriver/remote/oss/commands.rb +106 -104
- data/lib/selenium/webdriver/remote/response.rb +11 -3
- data/lib/selenium/webdriver/remote/server_error.rb +2 -0
- data/lib/selenium/webdriver/remote/w3c/bridge.rb +48 -16
- data/lib/selenium/webdriver/remote/w3c/capabilities.rb +38 -21
- data/lib/selenium/webdriver/remote/w3c/commands.rb +66 -57
- data/lib/selenium/webdriver/safari.rb +12 -4
- data/lib/selenium/webdriver/safari/bridge.rb +5 -3
- data/lib/selenium/webdriver/safari/driver.rb +19 -12
- data/lib/selenium/webdriver/safari/options.rb +60 -0
- data/lib/selenium/webdriver/safari/service.rb +6 -25
- data/lib/selenium/webdriver/support.rb +2 -0
- data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -0
- data/lib/selenium/webdriver/support/block_event_listener.rb +3 -1
- data/lib/selenium/webdriver/support/color.rb +11 -9
- data/lib/selenium/webdriver/support/escaper.rb +2 -0
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +3 -1
- data/lib/selenium/webdriver/support/select.rb +19 -18
- data/lib/selenium/webdriver/version.rb +3 -1
- data/selenium-webdriver.gemspec +15 -8
- metadata +95 -26
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -18,7 +20,6 @@
|
|
|
18
20
|
require 'net/http'
|
|
19
21
|
|
|
20
22
|
require 'selenium/webdriver/chrome/bridge'
|
|
21
|
-
require 'selenium/webdriver/chrome/service'
|
|
22
23
|
require 'selenium/webdriver/chrome/driver'
|
|
23
24
|
require 'selenium/webdriver/chrome/profile'
|
|
24
25
|
require 'selenium/webdriver/chrome/options'
|
|
@@ -27,12 +28,15 @@ module Selenium
|
|
|
27
28
|
module WebDriver
|
|
28
29
|
module Chrome
|
|
29
30
|
def self.driver_path=(path)
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome#driver_path=',
|
|
32
|
+
'Selenium::WebDriver::Chrome::Service#driver_path='
|
|
33
|
+
Selenium::WebDriver::Chrome::Service.driver_path = path
|
|
32
34
|
end
|
|
33
35
|
|
|
34
36
|
def self.driver_path
|
|
35
|
-
|
|
37
|
+
WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome#driver_path',
|
|
38
|
+
'Selenium::WebDriver::Chrome::Service#driver_path'
|
|
39
|
+
Selenium::WebDriver::Chrome::Service.driver_path
|
|
36
40
|
end
|
|
37
41
|
|
|
38
42
|
def self.path=(path)
|
|
@@ -46,3 +50,5 @@ module Selenium
|
|
|
46
50
|
end # Chrome
|
|
47
51
|
end # WebDriver
|
|
48
52
|
end # Selenium
|
|
53
|
+
|
|
54
|
+
require 'selenium/webdriver/chrome/service'
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -21,8 +23,11 @@ module Selenium
|
|
|
21
23
|
module Bridge
|
|
22
24
|
|
|
23
25
|
COMMANDS = {
|
|
24
|
-
get_network_conditions: [:get, '
|
|
25
|
-
set_network_conditions: [:post, '
|
|
26
|
+
get_network_conditions: [:get, 'session/:session_id/chromium/network_conditions'],
|
|
27
|
+
set_network_conditions: [:post, 'session/:session_id/chromium/network_conditions'],
|
|
28
|
+
send_command: [:post, 'session/:session_id/goog/cdp/execute'],
|
|
29
|
+
get_available_log_types: [:get, 'session/:session_id/se/log/types'],
|
|
30
|
+
get_log: [:post, 'session/:session_id/se/log']
|
|
26
31
|
}.freeze
|
|
27
32
|
|
|
28
33
|
def commands(command)
|
|
@@ -33,10 +38,30 @@ module Selenium
|
|
|
33
38
|
execute :get_network_conditions
|
|
34
39
|
end
|
|
35
40
|
|
|
41
|
+
def send_command(command_params)
|
|
42
|
+
execute :send_command, {}, command_params
|
|
43
|
+
end
|
|
44
|
+
|
|
36
45
|
def network_conditions=(conditions)
|
|
37
46
|
execute :set_network_conditions, {}, {network_conditions: conditions}
|
|
38
47
|
end
|
|
39
48
|
|
|
49
|
+
def available_log_types
|
|
50
|
+
types = execute :get_available_log_types
|
|
51
|
+
Array(types).map(&:to_sym)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def log(type)
|
|
55
|
+
data = execute :get_log, {}, {type: type.to_s}
|
|
56
|
+
|
|
57
|
+
Array(data).map do |l|
|
|
58
|
+
begin
|
|
59
|
+
LogEntry.new l.fetch('level', 'UNKNOWN'), l.fetch('timestamp'), l.fetch('message')
|
|
60
|
+
rescue KeyError
|
|
61
|
+
next
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
40
65
|
end # Bridge
|
|
41
66
|
end # Chrome
|
|
42
67
|
end # WebDriver
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -28,23 +30,17 @@ module Selenium
|
|
|
28
30
|
include DriverExtensions::HasNetworkConditions
|
|
29
31
|
include DriverExtensions::HasTouchScreen
|
|
30
32
|
include DriverExtensions::HasWebStorage
|
|
33
|
+
include DriverExtensions::HasLocation
|
|
31
34
|
include DriverExtensions::TakesScreenshot
|
|
35
|
+
include DriverExtensions::DownloadsFiles
|
|
32
36
|
|
|
33
37
|
def initialize(opts = {})
|
|
34
38
|
opts[:desired_capabilities] = create_capabilities(opts)
|
|
35
39
|
|
|
36
|
-
|
|
37
|
-
driver_path = opts.delete(:driver_path) || Chrome.driver_path
|
|
38
|
-
driver_opts = opts.delete(:driver_opts) || {}
|
|
39
|
-
port = opts.delete(:port) || Service::DEFAULT_PORT
|
|
40
|
-
|
|
41
|
-
@service = Service.new(driver_path, port, driver_opts)
|
|
42
|
-
@service.start
|
|
43
|
-
opts[:url] = @service.uri
|
|
44
|
-
end
|
|
40
|
+
opts[:url] ||= service_url(opts)
|
|
45
41
|
|
|
46
42
|
listener = opts.delete(:listener)
|
|
47
|
-
@bridge = Remote::Bridge.handshake(opts)
|
|
43
|
+
@bridge = Remote::Bridge.handshake(**opts)
|
|
48
44
|
@bridge.extend Bridge
|
|
49
45
|
|
|
50
46
|
super(@bridge, listener: listener)
|
|
@@ -57,7 +53,11 @@ module Selenium
|
|
|
57
53
|
def quit
|
|
58
54
|
super
|
|
59
55
|
ensure
|
|
60
|
-
@service
|
|
56
|
+
@service&.stop
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def execute_cdp(cmd, **params)
|
|
60
|
+
@bridge.send_command(cmd: cmd, params: params)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
private
|
|
@@ -70,28 +70,35 @@ module Selenium
|
|
|
70
70
|
if args
|
|
71
71
|
WebDriver.logger.deprecate ':args or :switches', 'Selenium::WebDriver::Chrome::Options#add_argument'
|
|
72
72
|
raise ArgumentError, ':args must be an Array of Strings' unless args.is_a? Array
|
|
73
|
+
|
|
73
74
|
args.each { |arg| options.add_argument(arg.to_s) }
|
|
74
75
|
end
|
|
75
76
|
|
|
76
77
|
profile = opts.delete(:profile)
|
|
77
78
|
if profile
|
|
79
|
+
WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome::Driver#new with `:profile` parameter',
|
|
80
|
+
'Selenium::WebDriver::Chrome::Options#profile or Options#add_option'
|
|
81
|
+
|
|
78
82
|
profile = profile.as_json
|
|
79
83
|
|
|
80
|
-
if options.args.none?
|
|
81
|
-
options.add_argument("--user-data-dir=#{profile[
|
|
84
|
+
if options.args.none?(&/user-data-dir/.method(:match?))
|
|
85
|
+
options.add_argument("--user-data-dir=#{profile['directory']}")
|
|
82
86
|
end
|
|
83
87
|
|
|
84
|
-
if profile[
|
|
85
|
-
WebDriver.logger.deprecate '
|
|
88
|
+
if profile['extensions']
|
|
89
|
+
WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome::Profile#extensions',
|
|
86
90
|
'Selenium::WebDriver::Chrome::Options#add_extension'
|
|
87
|
-
profile[
|
|
91
|
+
profile['extensions'].each do |extension|
|
|
88
92
|
options.add_encoded_extension(extension)
|
|
89
93
|
end
|
|
90
94
|
end
|
|
91
95
|
end
|
|
92
96
|
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
if opts.key?(:detach)
|
|
98
|
+
WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome::Driver#new with `:detach` parameter',
|
|
99
|
+
'Selenium::WebDriver::Chrome::Options#new or Options#add_option'
|
|
100
|
+
options.add_option(:detach, opts.delete(:detach))
|
|
101
|
+
end
|
|
95
102
|
|
|
96
103
|
prefs = opts.delete(:prefs)
|
|
97
104
|
if prefs
|
|
@@ -102,10 +109,15 @@ module Selenium
|
|
|
102
109
|
end
|
|
103
110
|
|
|
104
111
|
options = options.as_json
|
|
105
|
-
caps
|
|
112
|
+
caps.merge!(options) unless options[Options::KEY].empty?
|
|
106
113
|
|
|
107
|
-
|
|
108
|
-
|
|
114
|
+
if opts.key?(:proxy) || opts.key?('proxy')
|
|
115
|
+
WebDriver.logger.deprecate 'Selenium::WebDriver::Chrome::Driver#new with `:proxy` parameter',
|
|
116
|
+
'Selenium::WebDriver::Chrome::Capabilities#proxy='
|
|
117
|
+
|
|
118
|
+
caps[:proxy] = opts.delete(:proxy) if opts.key?(:proxy)
|
|
119
|
+
caps[:proxy] ||= opts.delete('proxy') if opts.key?('proxy')
|
|
120
|
+
end
|
|
109
121
|
|
|
110
122
|
caps
|
|
111
123
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -18,9 +20,11 @@
|
|
|
18
20
|
module Selenium
|
|
19
21
|
module WebDriver
|
|
20
22
|
module Chrome
|
|
21
|
-
class Options
|
|
23
|
+
class Options < WebDriver::Common::Options
|
|
22
24
|
attr_reader :args, :prefs, :options, :emulation, :extensions, :encoded_extensions
|
|
23
|
-
attr_accessor :binary
|
|
25
|
+
attr_accessor :binary, :profile, :detach
|
|
26
|
+
|
|
27
|
+
KEY = 'goog:chromeOptions'
|
|
24
28
|
|
|
25
29
|
#
|
|
26
30
|
# Create a new Options instance.
|
|
@@ -45,6 +49,8 @@ module Selenium
|
|
|
45
49
|
@extensions = opts.delete(:extensions) || []
|
|
46
50
|
@options = opts.delete(:options) || {}
|
|
47
51
|
@emulation = opts.delete(:emulation) || {}
|
|
52
|
+
@detach = opts.delete(:detach)
|
|
53
|
+
@profile = opts.delete(:profile)
|
|
48
54
|
@encoded_extensions = []
|
|
49
55
|
end
|
|
50
56
|
|
|
@@ -61,6 +67,7 @@ module Selenium
|
|
|
61
67
|
def add_extension(path)
|
|
62
68
|
raise Error::WebDriverError, "could not find extension at #{path.inspect}" unless File.file?(path)
|
|
63
69
|
raise Error::WebDriverError, "file was not an extension #{path.inspect}" unless File.extname(path) == '.crx'
|
|
70
|
+
|
|
64
71
|
@extensions << path
|
|
65
72
|
end
|
|
66
73
|
|
|
@@ -132,9 +139,6 @@ module Selenium
|
|
|
132
139
|
|
|
133
140
|
def headless!
|
|
134
141
|
add_argument '--headless'
|
|
135
|
-
|
|
136
|
-
# https://bugs.chromium.org/p/chromium/issues/detail?id=737678#c1
|
|
137
|
-
add_argument '--disable-gpu' if WebDriver::Platform.windows?
|
|
138
142
|
end
|
|
139
143
|
|
|
140
144
|
#
|
|
@@ -168,6 +172,7 @@ module Selenium
|
|
|
168
172
|
File.open(crx_path, 'rb') { |crx_file| Base64.strict_encode64 crx_file.read }
|
|
169
173
|
end
|
|
170
174
|
extensions.concat(@encoded_extensions)
|
|
175
|
+
add_argument("--user-data-dir=#{@profile[:directory]}") if @profile
|
|
171
176
|
|
|
172
177
|
opts = @options
|
|
173
178
|
opts[:binary] = @binary if @binary
|
|
@@ -175,7 +180,9 @@ module Selenium
|
|
|
175
180
|
opts[:extensions] = extensions if extensions.any?
|
|
176
181
|
opts[:mobileEmulation] = @emulation unless @emulation.empty?
|
|
177
182
|
opts[:prefs] = @prefs unless @prefs.empty?
|
|
178
|
-
opts
|
|
183
|
+
opts[:detach] = @detach if !@detach.nil? && @detach != false
|
|
184
|
+
|
|
185
|
+
{KEY => generate_as_json(opts)}
|
|
179
186
|
end
|
|
180
187
|
end # Options
|
|
181
188
|
end # Chrome
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -34,9 +36,7 @@ module Selenium
|
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
def add_extension(path)
|
|
37
|
-
unless File.file?(path)
|
|
38
|
-
raise Error::WebDriverError, "could not find extension at #{path.inspect}"
|
|
39
|
-
end
|
|
39
|
+
raise Error::WebDriverError, "could not find extension at #{path.inspect}" unless File.file?(path)
|
|
40
40
|
|
|
41
41
|
@extensions << path
|
|
42
42
|
end
|
|
@@ -77,8 +77,8 @@ module Selenium
|
|
|
77
77
|
|
|
78
78
|
extensions.concat(@encoded_extensions)
|
|
79
79
|
|
|
80
|
-
opts = {directory
|
|
81
|
-
opts[
|
|
80
|
+
opts = {'directory' => directory || layout_on_disk}
|
|
81
|
+
opts['extensions'] = extensions if extensions.any?
|
|
82
82
|
opts
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -97,6 +97,7 @@ module Selenium
|
|
|
97
97
|
|
|
98
98
|
def read_model_prefs
|
|
99
99
|
return {} unless @model
|
|
100
|
+
|
|
100
101
|
JSON.parse File.read(prefs_file_for(@model))
|
|
101
102
|
end
|
|
102
103
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -23,28 +25,26 @@ module Selenium
|
|
|
23
25
|
#
|
|
24
26
|
|
|
25
27
|
class Service < WebDriver::Service
|
|
26
|
-
|
|
27
|
-
@executable = 'chromedriver'
|
|
28
|
-
@missing_text =
|
|
28
|
+
@default_port = 9515
|
|
29
|
+
@executable = 'chromedriver'
|
|
30
|
+
@missing_text = <<~ERROR
|
|
29
31
|
Unable to find chromedriver. Please download the server from
|
|
30
|
-
|
|
32
|
+
https://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH.
|
|
31
33
|
More info at https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver.
|
|
32
34
|
ERROR
|
|
35
|
+
@shutdown_supported = true
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
|
|
38
|
-
@process.leader = true unless Platform.windows?
|
|
39
|
-
@process.start
|
|
37
|
+
def self.driver_path=(path)
|
|
38
|
+
Platform.assert_executable path if path.is_a?(String)
|
|
39
|
+
@driver_path = path
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
"unable to connect to chromedriver #{@host}:#{@port}"
|
|
44
|
-
end
|
|
42
|
+
private
|
|
45
43
|
|
|
44
|
+
# Note: This processing is deprecated
|
|
46
45
|
def extract_service_args(driver_opts)
|
|
47
46
|
driver_args = super
|
|
47
|
+
driver_opts = driver_opts.dup
|
|
48
48
|
driver_args << "--log-path=#{driver_opts.delete(:log_path)}" if driver_opts.key?(:log_path)
|
|
49
49
|
driver_args << "--url-base=#{driver_opts.delete(:url_base)}" if driver_opts.key?(:url_base)
|
|
50
50
|
driver_args << "--port-server=#{driver_opts.delete(:port_server)}" if driver_opts.key?(:port_server)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -36,8 +38,8 @@ require 'selenium/webdriver/common/timeouts'
|
|
|
36
38
|
require 'selenium/webdriver/common/window'
|
|
37
39
|
require 'selenium/webdriver/common/logger'
|
|
38
40
|
require 'selenium/webdriver/common/logs'
|
|
39
|
-
require 'selenium/webdriver/common/
|
|
40
|
-
require 'selenium/webdriver/common/
|
|
41
|
+
require 'selenium/webdriver/common/manager'
|
|
42
|
+
require 'selenium/webdriver/common/w3c_manager'
|
|
41
43
|
require 'selenium/webdriver/common/search_context'
|
|
42
44
|
require 'selenium/webdriver/common/action_builder'
|
|
43
45
|
require 'selenium/webdriver/common/interactions/key_actions'
|
|
@@ -50,6 +52,7 @@ require 'selenium/webdriver/common/html5/session_storage'
|
|
|
50
52
|
require 'selenium/webdriver/common/driver_extensions/takes_screenshot'
|
|
51
53
|
require 'selenium/webdriver/common/driver_extensions/rotatable'
|
|
52
54
|
require 'selenium/webdriver/common/driver_extensions/has_web_storage'
|
|
55
|
+
require 'selenium/webdriver/common/driver_extensions/downloads_files'
|
|
53
56
|
require 'selenium/webdriver/common/driver_extensions/has_location'
|
|
54
57
|
require 'selenium/webdriver/common/driver_extensions/has_session_id'
|
|
55
58
|
require 'selenium/webdriver/common/driver_extensions/has_touch_screen'
|
|
@@ -69,5 +72,6 @@ require 'selenium/webdriver/common/interactions/pointer_input'
|
|
|
69
72
|
require 'selenium/webdriver/common/keys'
|
|
70
73
|
require 'selenium/webdriver/common/bridge_helper'
|
|
71
74
|
require 'selenium/webdriver/common/profile_helper'
|
|
75
|
+
require 'selenium/webdriver/common/options'
|
|
72
76
|
require 'selenium/webdriver/common/driver'
|
|
73
77
|
require 'selenium/webdriver/common/element'
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -319,7 +321,7 @@ module Selenium
|
|
|
319
321
|
def drag_and_drop(source, target)
|
|
320
322
|
click_and_hold source
|
|
321
323
|
move_to target
|
|
322
|
-
release
|
|
324
|
+
release
|
|
323
325
|
|
|
324
326
|
self
|
|
325
327
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -31,6 +33,7 @@ module Selenium
|
|
|
31
33
|
when Hash
|
|
32
34
|
element_id = element_id_from(arg)
|
|
33
35
|
return Element.new(self, element_id) if element_id
|
|
36
|
+
|
|
34
37
|
arg.each { |k, v| arg[k] = unwrap_script_result(v) }
|
|
35
38
|
else
|
|
36
39
|
arg
|
|
@@ -43,12 +46,12 @@ module Selenium
|
|
|
43
46
|
|
|
44
47
|
def parse_cookie_string(str)
|
|
45
48
|
result = {
|
|
46
|
-
'name'
|
|
47
|
-
'value'
|
|
48
|
-
'domain'
|
|
49
|
-
'path'
|
|
49
|
+
'name' => '',
|
|
50
|
+
'value' => '',
|
|
51
|
+
'domain' => '',
|
|
52
|
+
'path' => '',
|
|
50
53
|
'expires' => '',
|
|
51
|
-
'secure'
|
|
54
|
+
'secure' => false
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
str.split(';').each do |attribute|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -73,7 +75,7 @@ module Selenium
|
|
|
73
75
|
end
|
|
74
76
|
|
|
75
77
|
def inspect
|
|
76
|
-
format '
|
|
78
|
+
format '#<%<class>s:0x%<hash>x browser=%<browser>s>', class: self.class, hash: hash * 2, browser: bridge.browser.inspect
|
|
77
79
|
end
|
|
78
80
|
|
|
79
81
|
#
|
|
@@ -95,12 +97,12 @@ module Selenium
|
|
|
95
97
|
end
|
|
96
98
|
|
|
97
99
|
#
|
|
98
|
-
# @return [
|
|
99
|
-
# @see
|
|
100
|
+
# @return [Manager]
|
|
101
|
+
# @see Manager
|
|
100
102
|
#
|
|
101
103
|
|
|
102
104
|
def manage
|
|
103
|
-
bridge.
|
|
105
|
+
bridge.manage
|
|
104
106
|
end
|
|
105
107
|
|
|
106
108
|
#
|
|
@@ -281,13 +283,26 @@ module Selenium
|
|
|
281
283
|
# @see SearchContext
|
|
282
284
|
#
|
|
283
285
|
|
|
284
|
-
def ref
|
|
285
|
-
nil
|
|
286
|
-
end
|
|
286
|
+
def ref; end
|
|
287
287
|
|
|
288
288
|
private
|
|
289
289
|
|
|
290
290
|
attr_reader :bridge
|
|
291
|
+
|
|
292
|
+
def service_url(opts)
|
|
293
|
+
@service = opts.delete(:service)
|
|
294
|
+
%i[driver_opts driver_path port].each do |key|
|
|
295
|
+
next unless opts.key? key
|
|
296
|
+
|
|
297
|
+
WebDriver.logger.deprecate(":#{key}", ':service with an instance of Selenium::WebDriver::Service')
|
|
298
|
+
end
|
|
299
|
+
@service ||= Service.send(browser,
|
|
300
|
+
args: opts.delete(:driver_opts),
|
|
301
|
+
path: opts.delete(:driver_path),
|
|
302
|
+
port: opts.delete(:port))
|
|
303
|
+
@service.start
|
|
304
|
+
@service.uri
|
|
305
|
+
end
|
|
291
306
|
end # Driver
|
|
292
307
|
end # WebDriver
|
|
293
308
|
end # Selenium
|