selenium-webdriver 4.0.0.alpha6 → 4.0.0.beta4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +137 -4
- data/Gemfile +3 -1
- data/LICENSE +1 -1
- data/NOTICE +2 -0
- data/README.md +4 -5
- data/lib/selenium/server.rb +18 -26
- data/lib/selenium/webdriver.rb +1 -4
- data/lib/selenium/webdriver/atoms/findElements.js +93 -93
- data/lib/selenium/webdriver/atoms/getAttribute.js +75 -59
- data/lib/selenium/webdriver/atoms/isDisplayed.js +72 -72
- data/lib/selenium/webdriver/atoms/mutationListener.js +55 -0
- data/lib/selenium/webdriver/chrome.rb +1 -1
- data/lib/selenium/webdriver/chrome/driver.rb +25 -10
- data/lib/selenium/webdriver/chrome/{bridge.rb → features.rb} +3 -3
- data/lib/selenium/webdriver/chrome/options.rb +51 -39
- data/lib/selenium/webdriver/chrome/profile.rb +6 -3
- data/lib/selenium/webdriver/chrome/service.rb +4 -2
- data/lib/selenium/webdriver/common.rb +8 -2
- data/lib/selenium/webdriver/common/driver.rb +36 -8
- data/lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb +43 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +89 -0
- data/lib/selenium/webdriver/{edge_html/driver.rb → common/driver_extensions/has_cdp.rb} +12 -13
- data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +6 -1
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +5 -8
- data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +149 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_logs.rb +30 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +6 -27
- data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +67 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +1 -0
- data/lib/selenium/webdriver/common/driver_extensions/{rotatable.rb → prints_page.rb} +18 -20
- data/lib/selenium/webdriver/common/element.rb +66 -12
- data/lib/selenium/webdriver/common/interactions/interaction.rb +4 -1
- data/lib/selenium/webdriver/common/logger.rb +5 -2
- data/lib/selenium/webdriver/common/manager.rb +6 -1
- data/lib/selenium/webdriver/common/options.rb +76 -14
- data/lib/selenium/webdriver/common/platform.rb +3 -1
- data/lib/selenium/webdriver/common/proxy.rb +6 -3
- data/lib/selenium/webdriver/common/search_context.rb +4 -1
- data/lib/selenium/webdriver/common/service.rb +1 -8
- data/lib/selenium/webdriver/common/service_manager.rb +1 -1
- data/lib/selenium/webdriver/common/socket_poller.rb +19 -30
- data/lib/selenium/webdriver/common/takes_screenshot.rb +66 -0
- data/lib/selenium/webdriver/common/target_locator.rb +4 -4
- data/lib/selenium/webdriver/devtools.rb +44 -18
- data/lib/selenium/webdriver/devtools/console_event.rb +38 -0
- data/lib/selenium/webdriver/devtools/exception_event.rb +36 -0
- data/lib/selenium/webdriver/devtools/mutation_event.rb +37 -0
- data/lib/selenium/webdriver/devtools/{console.rb → request.rb} +22 -22
- data/lib/selenium/webdriver/edge.rb +7 -29
- data/lib/selenium/webdriver/{edge_chrome → edge}/driver.rb +8 -6
- data/lib/selenium/webdriver/{edge_chrome/bridge.rb → edge/features.rb} +9 -7
- data/lib/selenium/webdriver/{edge_chrome → edge}/options.rb +11 -4
- 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.rb +5 -1
- data/lib/selenium/webdriver/firefox/driver.rb +18 -5
- data/lib/selenium/webdriver/firefox/{bridge.rb → features.rb} +9 -4
- 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/driver.rb +1 -2
- data/lib/selenium/webdriver/ie/options.rb +1 -11
- data/lib/selenium/webdriver/ie/service.rb +4 -2
- data/lib/selenium/webdriver/remote/bridge.rb +48 -30
- data/lib/selenium/webdriver/remote/capabilities.rb +105 -64
- data/lib/selenium/webdriver/remote/commands.rb +3 -0
- data/lib/selenium/webdriver/remote/driver.rb +10 -3
- data/lib/selenium/webdriver/remote/http/common.rb +0 -5
- data/lib/selenium/webdriver/remote/http/default.rb +8 -7
- data/lib/selenium/webdriver/remote/http/persistent.rb +6 -0
- data/lib/selenium/webdriver/safari.rb +8 -1
- data/lib/selenium/webdriver/safari/driver.rb +3 -8
- data/lib/selenium/webdriver/safari/{bridge.rb → features.rb} +3 -3
- 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/cdp/domain.rb.erb +63 -0
- data/lib/selenium/webdriver/support/cdp_client_generator.rb +44 -13
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +1 -1
- data/lib/selenium/webdriver/support/guards.rb +95 -0
- data/lib/selenium/webdriver/support/guards/guard.rb +89 -0
- data/lib/selenium/webdriver/support/guards/guard_condition.rb +52 -0
- data/lib/selenium/webdriver/support/select.rb +2 -2
- data/lib/selenium/webdriver/version.rb +1 -1
- data/selenium-webdriver.gemspec +26 -12
- metadata +91 -108
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +0 -65
- data/lib/selenium/webdriver/devtools/accessibility.rb +0 -62
- data/lib/selenium/webdriver/devtools/animation.rb +0 -98
- data/lib/selenium/webdriver/devtools/application_cache.rb +0 -64
- data/lib/selenium/webdriver/devtools/audits.rb +0 -61
- data/lib/selenium/webdriver/devtools/background_service.rb +0 -67
- data/lib/selenium/webdriver/devtools/browser.rb +0 -123
- data/lib/selenium/webdriver/devtools/cache_storage.rb +0 -73
- data/lib/selenium/webdriver/devtools/cast.rb +0 -70
- data/lib/selenium/webdriver/devtools/css.rb +0 -165
- data/lib/selenium/webdriver/devtools/database.rb +0 -64
- data/lib/selenium/webdriver/devtools/debugger.rb +0 -229
- data/lib/selenium/webdriver/devtools/device_orientation.rb +0 -53
- data/lib/selenium/webdriver/devtools/dom.rb +0 -320
- data/lib/selenium/webdriver/devtools/domdebugger.rb +0 -93
- data/lib/selenium/webdriver/devtools/domsnapshot.rb +0 -65
- data/lib/selenium/webdriver/devtools/domstorage.rb +0 -79
- data/lib/selenium/webdriver/devtools/emulation.rb +0 -180
- data/lib/selenium/webdriver/devtools/fetch.rb +0 -97
- data/lib/selenium/webdriver/devtools/headless_experimental.rb +0 -61
- data/lib/selenium/webdriver/devtools/heap_profiler.rb +0 -107
- data/lib/selenium/webdriver/devtools/indexed_db.rb +0 -100
- data/lib/selenium/webdriver/devtools/input.rb +0 -140
- data/lib/selenium/webdriver/devtools/inspector.rb +0 -55
- data/lib/selenium/webdriver/devtools/io.rb +0 -59
- data/lib/selenium/webdriver/devtools/layer_tree.rb +0 -95
- data/lib/selenium/webdriver/devtools/log.rb +0 -66
- data/lib/selenium/webdriver/devtools/media.rb +0 -57
- data/lib/selenium/webdriver/devtools/memory.rb +0 -86
- data/lib/selenium/webdriver/devtools/network.rb +0 -228
- data/lib/selenium/webdriver/devtools/overlay.rb +0 -157
- data/lib/selenium/webdriver/devtools/page.rb +0 -374
- data/lib/selenium/webdriver/devtools/performance.rb +0 -63
- data/lib/selenium/webdriver/devtools/profiler.rb +0 -111
- data/lib/selenium/webdriver/devtools/runtime.rb +0 -193
- data/lib/selenium/webdriver/devtools/schema.rb +0 -46
- data/lib/selenium/webdriver/devtools/security.rb +0 -71
- data/lib/selenium/webdriver/devtools/service_worker.rb +0 -116
- data/lib/selenium/webdriver/devtools/storage.rb +0 -95
- data/lib/selenium/webdriver/devtools/system_info.rb +0 -50
- data/lib/selenium/webdriver/devtools/target.rb +0 -141
- data/lib/selenium/webdriver/devtools/tethering.rb +0 -55
- data/lib/selenium/webdriver/devtools/tracing.rb +0 -76
- data/lib/selenium/webdriver/devtools/web_audio.rb +0 -70
- data/lib/selenium/webdriver/devtools/web_authn.rb +0 -94
- data/lib/selenium/webdriver/edge_html/options.rb +0 -84
- data/lib/selenium/webdriver/edge_html/service.rb +0 -47
@@ -17,41 +17,41 @@
|
|
17
17
|
# specific language governing permissions and limitations
|
18
18
|
# under the License.
|
19
19
|
|
20
|
-
# This file is automatically generated. Any changes will be lost!
|
21
20
|
module Selenium
|
22
21
|
module WebDriver
|
23
22
|
class DevTools
|
24
|
-
|
25
|
-
@console ||= Console.new(self)
|
26
|
-
end
|
23
|
+
class Request
|
27
24
|
|
28
|
-
|
29
|
-
EVENTS = {
|
30
|
-
message_added: 'messageAdded',
|
31
|
-
}
|
25
|
+
attr_reader :url, :method, :headers
|
32
26
|
|
33
|
-
def initialize(devtools)
|
27
|
+
def initialize(devtools:, id:, url:, method:, headers:)
|
34
28
|
@devtools = devtools
|
29
|
+
@id = id
|
30
|
+
@url = url
|
31
|
+
@method = method
|
32
|
+
@headers = headers
|
35
33
|
end
|
36
34
|
|
37
|
-
def
|
38
|
-
|
39
|
-
@devtools.callbacks["Console.#{event}"] << block
|
35
|
+
def continue
|
36
|
+
@devtools.fetch.continue_request(request_id: @id)
|
40
37
|
end
|
41
38
|
|
42
|
-
def
|
43
|
-
@devtools.
|
39
|
+
def respond(code: 200, headers: {}, body: '')
|
40
|
+
@devtools.fetch.fulfill_request(
|
41
|
+
request_id: @id,
|
42
|
+
body: Base64.strict_encode64(body),
|
43
|
+
response_code: code,
|
44
|
+
response_headers: headers.map do |k, v|
|
45
|
+
{name: k, value: v}
|
46
|
+
end
|
47
|
+
)
|
44
48
|
end
|
45
49
|
|
46
|
-
def
|
47
|
-
|
50
|
+
def inspect
|
51
|
+
%(#<#{self.class.name} @method="#{method}" @url="#{url}")
|
48
52
|
end
|
49
53
|
|
50
|
-
|
51
|
-
@devtools.send_cmd('Console.enable')
|
52
|
-
end
|
53
|
-
|
54
|
-
end # Console
|
54
|
+
end # Request
|
55
55
|
end # DevTools
|
56
56
|
end # WebDriver
|
57
|
-
end # Selenium
|
57
|
+
end # Selenium
|
@@ -21,32 +21,12 @@ require 'net/http'
|
|
21
21
|
|
22
22
|
module Selenium
|
23
23
|
module WebDriver
|
24
|
-
module
|
25
|
-
autoload :
|
26
|
-
autoload :
|
27
|
-
autoload :
|
28
|
-
|
29
|
-
|
30
|
-
WebDriver.logger.deprecate 'Selenium::WebDriver::Edge#driver_path=',
|
31
|
-
'Selenium::WebDriver::Edge::Service#driver_path=',
|
32
|
-
id: :driver_path
|
33
|
-
Selenium::WebDriver::Edge::Service.driver_path = path
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.driver_path
|
37
|
-
WebDriver.logger.deprecate 'Selenium::WebDriver::Edge#driver_path',
|
38
|
-
'Selenium::WebDriver::Edge::Service#driver_path',
|
39
|
-
id: :driver_path
|
40
|
-
Selenium::WebDriver::Edge::Service.driver_path
|
41
|
-
end
|
42
|
-
end # EdgeHtml
|
43
|
-
|
44
|
-
module EdgeChrome
|
45
|
-
autoload :Bridge, 'selenium/webdriver/edge_chrome/bridge'
|
46
|
-
autoload :Driver, 'selenium/webdriver/edge_chrome/driver'
|
47
|
-
autoload :Profile, 'selenium/webdriver/edge_chrome/profile'
|
48
|
-
autoload :Options, 'selenium/webdriver/edge_chrome/options'
|
49
|
-
autoload :Service, 'selenium/webdriver/edge_chrome/service'
|
24
|
+
module Edge
|
25
|
+
autoload :Features, 'selenium/webdriver/edge/features'
|
26
|
+
autoload :Driver, 'selenium/webdriver/edge/driver'
|
27
|
+
autoload :Profile, 'selenium/webdriver/edge/profile'
|
28
|
+
autoload :Options, 'selenium/webdriver/edge/options'
|
29
|
+
autoload :Service, 'selenium/webdriver/edge/service'
|
50
30
|
|
51
31
|
def self.path=(path)
|
52
32
|
Platform.assert_executable path
|
@@ -56,8 +36,6 @@ module Selenium
|
|
56
36
|
def self.path
|
57
37
|
@path ||= nil
|
58
38
|
end
|
59
|
-
end #
|
60
|
-
|
61
|
-
Edge = EdgeHtml # Alias EdgeHtml as Edge for now
|
39
|
+
end # Edge
|
62
40
|
end # WebDriver
|
63
41
|
end # Selenium
|
@@ -21,22 +21,24 @@ require 'selenium/webdriver/chrome/driver'
|
|
21
21
|
|
22
22
|
module Selenium
|
23
23
|
module WebDriver
|
24
|
-
module
|
24
|
+
module Edge
|
25
25
|
|
26
26
|
#
|
27
|
-
# Driver implementation for
|
27
|
+
# Driver implementation for Microsoft Edge.
|
28
28
|
# @api private
|
29
29
|
#
|
30
30
|
|
31
31
|
class Driver < Selenium::WebDriver::Chrome::Driver
|
32
32
|
def browser
|
33
|
-
:
|
33
|
+
:edge
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
private
|
37
|
+
|
38
|
+
def devtools_address
|
39
|
+
"http://#{capabilities['ms:edgeOptions']['debuggerAddress']}"
|
38
40
|
end
|
39
41
|
end # Driver
|
40
|
-
end #
|
42
|
+
end # Edge
|
41
43
|
end # WebDriver
|
42
44
|
end # Selenium
|
@@ -17,21 +17,23 @@
|
|
17
17
|
# specific language governing permissions and limitations
|
18
18
|
# under the License.
|
19
19
|
|
20
|
-
require 'selenium/webdriver/chrome/
|
20
|
+
require 'selenium/webdriver/chrome/features'
|
21
21
|
|
22
22
|
module Selenium
|
23
23
|
module WebDriver
|
24
|
-
module
|
25
|
-
|
24
|
+
module Edge
|
25
|
+
module Features
|
26
26
|
|
27
|
-
|
27
|
+
include WebDriver::Chrome::Features
|
28
|
+
|
29
|
+
EDGE_COMMANDS = {
|
28
30
|
send_command: [:post, 'session/:session_id/ms/cdp/execute']
|
29
|
-
|
31
|
+
}.freeze
|
30
32
|
|
31
33
|
def commands(command)
|
32
|
-
|
34
|
+
EDGE_COMMANDS[command] || Chrome::Features::CHROME_COMMANDS[command] || self.class::COMMANDS[command]
|
33
35
|
end
|
34
36
|
end # Bridge
|
35
|
-
end #
|
37
|
+
end # Edge
|
36
38
|
end # WebDriver
|
37
39
|
end # Selenium
|
@@ -21,16 +21,23 @@ require 'selenium/webdriver/chrome/options'
|
|
21
21
|
|
22
22
|
module Selenium
|
23
23
|
module WebDriver
|
24
|
-
module
|
24
|
+
module Edge
|
25
25
|
class Options < Selenium::WebDriver::Chrome::Options
|
26
|
-
|
26
|
+
KEY = 'ms:edgeOptions'
|
27
|
+
BROWSER = 'MicrosoftEdge'
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def enable_logging(browser_options)
|
32
|
+
browser_options['ms:loggingPrefs'] = @logging_prefs
|
33
|
+
end
|
27
34
|
|
28
35
|
private
|
29
36
|
|
30
37
|
def binary_path
|
31
|
-
|
38
|
+
Edge.path
|
32
39
|
end
|
33
40
|
end # Options
|
34
|
-
end #
|
41
|
+
end # Edge
|
35
42
|
end # WebDriver
|
36
43
|
end # Selenium
|
@@ -21,13 +21,13 @@ require 'selenium/webdriver/chrome/profile'
|
|
21
21
|
|
22
22
|
module Selenium
|
23
23
|
module WebDriver
|
24
|
-
module
|
24
|
+
module Edge
|
25
25
|
#
|
26
26
|
# @private
|
27
27
|
#
|
28
28
|
|
29
29
|
class Profile < Selenium::WebDriver::Chrome::Profile
|
30
30
|
end # Profile
|
31
|
-
end #
|
31
|
+
end # Edge
|
32
32
|
end # WebDriver
|
33
33
|
end # Selenium
|
@@ -21,7 +21,7 @@ require 'selenium/webdriver/chrome/service'
|
|
21
21
|
|
22
22
|
module Selenium
|
23
23
|
module WebDriver
|
24
|
-
module
|
24
|
+
module Edge
|
25
25
|
class Service < Selenium::WebDriver::Chrome::Service
|
26
26
|
DEFAULT_PORT = 9515
|
27
27
|
EXECUTABLE = 'msedgedriver'
|
@@ -31,6 +31,6 @@ module Selenium
|
|
31
31
|
ERROR
|
32
32
|
SHUTDOWN_SUPPORTED = true
|
33
33
|
end # Service
|
34
|
-
end #
|
34
|
+
end # Edge
|
35
35
|
end # WebDriver
|
36
36
|
end # Selenium
|
@@ -27,7 +27,7 @@ module Selenium
|
|
27
27
|
autoload :Extension, 'selenium/webdriver/firefox/extension'
|
28
28
|
autoload :ProfilesIni, 'selenium/webdriver/firefox/profiles_ini'
|
29
29
|
autoload :Profile, 'selenium/webdriver/firefox/profile'
|
30
|
-
autoload :
|
30
|
+
autoload :Features, 'selenium/webdriver/firefox/features'
|
31
31
|
autoload :Driver, 'selenium/webdriver/firefox/driver'
|
32
32
|
autoload :Options, 'selenium/webdriver/firefox/options'
|
33
33
|
autoload :Service, 'selenium/webdriver/firefox/service'
|
@@ -38,6 +38,10 @@ module Selenium
|
|
38
38
|
DEFAULT_ASSUME_UNTRUSTED_ISSUER = true
|
39
39
|
DEFAULT_LOAD_NO_FOCUS_LIB = false
|
40
40
|
|
41
|
+
# Mozilla Automation Team asked to only support 85
|
42
|
+
# until WebDriver Bidi is available.
|
43
|
+
DEVTOOLS_VERSION = 85
|
44
|
+
|
41
45
|
def self.driver_path=(path)
|
42
46
|
WebDriver.logger.deprecate 'Selenium::WebDriver::Firefox#driver_path=',
|
43
47
|
'Selenium::WebDriver::Firefox::Service#driver_path=',
|
@@ -27,16 +27,29 @@ module Selenium
|
|
27
27
|
#
|
28
28
|
|
29
29
|
class Driver < WebDriver::Driver
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
EXTENSIONS = [DriverExtensions::HasAddons,
|
31
|
+
DriverExtensions::FullPageScreenshot,
|
32
|
+
DriverExtensions::HasDevTools,
|
33
|
+
DriverExtensions::HasLogEvents,
|
34
|
+
DriverExtensions::HasNetworkInterception,
|
35
|
+
DriverExtensions::HasWebStorage,
|
36
|
+
DriverExtensions::PrintsPage].freeze
|
33
37
|
|
34
38
|
def browser
|
35
39
|
:firefox
|
36
40
|
end
|
37
41
|
|
38
|
-
|
39
|
-
|
42
|
+
private
|
43
|
+
|
44
|
+
def devtools_url
|
45
|
+
uri = URI("http://#{capabilities['moz:debuggerAddress']}")
|
46
|
+
response = Net::HTTP.get(uri.hostname, '/json/version', uri.port)
|
47
|
+
|
48
|
+
JSON.parse(response)['webSocketDebuggerUrl']
|
49
|
+
end
|
50
|
+
|
51
|
+
def devtools_version
|
52
|
+
Firefox::DEVTOOLS_VERSION
|
40
53
|
end
|
41
54
|
end # Driver
|
42
55
|
end # Firefox
|
@@ -20,15 +20,16 @@
|
|
20
20
|
module Selenium
|
21
21
|
module WebDriver
|
22
22
|
module Firefox
|
23
|
-
|
23
|
+
module Features
|
24
24
|
|
25
|
-
|
25
|
+
FIREFOX_COMMANDS = {
|
26
26
|
install_addon: [:post, 'session/:session_id/moz/addon/install'],
|
27
|
-
uninstall_addon: [:post, 'session/:session_id/moz/addon/uninstall']
|
27
|
+
uninstall_addon: [:post, 'session/:session_id/moz/addon/uninstall'],
|
28
|
+
full_page_screenshot: [:get, 'session/:session_id/moz/screenshot/full']
|
28
29
|
}.freeze
|
29
30
|
|
30
31
|
def commands(command)
|
31
|
-
|
32
|
+
FIREFOX_COMMANDS[command] || self.class::COMMANDS[command]
|
32
33
|
end
|
33
34
|
|
34
35
|
def install_addon(path, temporary)
|
@@ -41,6 +42,10 @@ module Selenium
|
|
41
42
|
execute :uninstall_addon, {}, {id: id}
|
42
43
|
end
|
43
44
|
|
45
|
+
def full_screenshot
|
46
|
+
execute :full_page_screenshot
|
47
|
+
end
|
48
|
+
|
44
49
|
end # Bridge
|
45
50
|
end # Firefox
|
46
51
|
end # WebDriver
|
@@ -21,25 +21,19 @@ module Selenium
|
|
21
21
|
module WebDriver
|
22
22
|
module Firefox
|
23
23
|
class Options < WebDriver::Options
|
24
|
+
attr_accessor :debugger_address
|
25
|
+
|
24
26
|
KEY = 'moz:firefoxOptions'
|
25
27
|
|
26
28
|
# see: https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html
|
27
29
|
CAPABILITIES = {binary: 'binary',
|
28
30
|
args: 'args',
|
29
|
-
profile: 'profile',
|
30
31
|
log: 'log',
|
31
32
|
prefs: 'prefs'}.freeze
|
32
33
|
BROWSER = 'firefox'
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
@options[key]
|
37
|
-
end
|
38
|
-
|
39
|
-
define_method "#{key}=" do |value|
|
40
|
-
@options[key] = value
|
41
|
-
end
|
42
|
-
end
|
35
|
+
# NOTE: special handling of 'profile' to validate when set instead of when used
|
36
|
+
attr_reader :profile
|
43
37
|
|
44
38
|
#
|
45
39
|
# Create a new Options instance, only for W3C-capable versions of Firefox.
|
@@ -58,10 +52,15 @@ module Selenium
|
|
58
52
|
#
|
59
53
|
|
60
54
|
def initialize(log_level: nil, **opts)
|
55
|
+
@debugger_address = opts.delete(:debugger_address)
|
56
|
+
|
61
57
|
super(**opts)
|
62
58
|
|
59
|
+
@options[:args] ||= []
|
60
|
+
@options[:prefs] ||= {}
|
63
61
|
@options[:log] ||= {level: log_level} if log_level
|
64
|
-
|
62
|
+
|
63
|
+
process_profile(@options.delete(:profile))
|
65
64
|
end
|
66
65
|
|
67
66
|
#
|
@@ -75,7 +74,6 @@ module Selenium
|
|
75
74
|
#
|
76
75
|
|
77
76
|
def add_argument(arg)
|
78
|
-
@options[:args] ||= []
|
79
77
|
@options[:args] << arg
|
80
78
|
end
|
81
79
|
|
@@ -91,7 +89,6 @@ module Selenium
|
|
91
89
|
#
|
92
90
|
|
93
91
|
def add_preference(name, value)
|
94
|
-
@options[:prefs] ||= {}
|
95
92
|
@options[:prefs][name] = value
|
96
93
|
end
|
97
94
|
|
@@ -122,7 +119,6 @@ module Selenium
|
|
122
119
|
# @param [Profile, String] profile Profile to be used
|
123
120
|
#
|
124
121
|
|
125
|
-
undef profile=
|
126
122
|
def profile=(profile)
|
127
123
|
process_profile(profile)
|
128
124
|
end
|
@@ -138,18 +134,21 @@ module Selenium
|
|
138
134
|
private
|
139
135
|
|
140
136
|
def process_browser_options(browser_options)
|
137
|
+
browser_options['moz:debuggerAddress'] = true if @debugger_address
|
141
138
|
options = browser_options[KEY]
|
142
139
|
options['binary'] ||= Firefox.path if Firefox.path
|
140
|
+
options['profile'] = @profile if @profile
|
143
141
|
end
|
144
142
|
|
145
143
|
def process_profile(profile)
|
146
|
-
@
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
144
|
+
@profile = case profile
|
145
|
+
when nil
|
146
|
+
nil
|
147
|
+
when Profile
|
148
|
+
profile
|
149
|
+
else
|
150
|
+
Profile.from_name(profile)
|
151
|
+
end
|
153
152
|
end
|
154
153
|
end # Options
|
155
154
|
end # Firefox
|
@@ -25,6 +25,14 @@ module Selenium
|
|
25
25
|
|
26
26
|
VALID_PREFERENCE_TYPES = [TrueClass, FalseClass, Integer, Float, String].freeze
|
27
27
|
|
28
|
+
DEFAULT_PREFERENCES = {
|
29
|
+
"browser.newtabpage.enabled" => false,
|
30
|
+
"browser.startup.homepage" => "about:blank",
|
31
|
+
"browser.usedOnWindows10.introURL" => "about:blank",
|
32
|
+
"network.captive-portal-service.enabled" => false,
|
33
|
+
"security.csp.enable" => false
|
34
|
+
}.freeze
|
35
|
+
|
28
36
|
attr_reader :name, :log_file
|
29
37
|
attr_writer :secure_ssl, :load_no_focus_lib
|
30
38
|
|
@@ -179,10 +187,12 @@ module Selenium
|
|
179
187
|
|
180
188
|
def update_user_prefs_in(directory)
|
181
189
|
path = File.join(directory, 'user.js')
|
182
|
-
prefs = read_user_prefs(path)
|
190
|
+
prefs = read_user_prefs(path)
|
191
|
+
prefs.merge! self.class::DEFAULT_PREFERENCES
|
192
|
+
prefs.merge!(@additional_prefs)
|
183
193
|
|
184
194
|
# If the user sets the home page, we should also start up there
|
185
|
-
prefs['startup.homepage_welcome_url']
|
195
|
+
prefs['startup.homepage_welcome_url'] ||= prefs['browser.startup.homepage']
|
186
196
|
|
187
197
|
write_prefs prefs, path
|
188
198
|
end
|