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.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +25 -0
  3. data/LICENSE +1 -1
  4. data/README.md +4 -5
  5. data/lib/selenium/server.rb +2 -26
  6. data/lib/selenium/webdriver.rb +0 -2
  7. data/lib/selenium/webdriver/atoms/findElements.js +88 -86
  8. data/lib/selenium/webdriver/chrome/driver.rb +6 -0
  9. data/lib/selenium/webdriver/chrome/features.rb +66 -0
  10. data/lib/selenium/webdriver/chrome/options.rb +51 -39
  11. data/lib/selenium/webdriver/chrome/service.rb +1 -1
  12. data/lib/selenium/webdriver/common.rb +2 -1
  13. data/lib/selenium/webdriver/common/driver.rb +11 -5
  14. data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +1 -2
  15. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +5 -8
  16. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +7 -1
  17. data/lib/selenium/webdriver/common/driver_extensions/has_logs.rb +30 -0
  18. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -27
  19. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +1 -0
  20. data/lib/selenium/webdriver/{edge_html/driver.rb → common/driver_extensions/prints_page.rb} +7 -13
  21. data/lib/selenium/webdriver/common/manager.rb +6 -1
  22. data/lib/selenium/webdriver/common/options.rb +25 -8
  23. data/lib/selenium/webdriver/common/platform.rb +2 -0
  24. data/lib/selenium/webdriver/common/service.rb +0 -8
  25. data/lib/selenium/webdriver/common/service_manager.rb +1 -1
  26. data/lib/selenium/webdriver/common/target_locator.rb +4 -4
  27. data/lib/selenium/webdriver/devtools.rb +5 -2
  28. data/lib/selenium/webdriver/devtools/v85/memory.rb +1 -1
  29. data/lib/selenium/webdriver/devtools/v85/network.rb +1 -1
  30. data/lib/selenium/webdriver/devtools/v85/page.rb +1 -1
  31. data/lib/selenium/webdriver/devtools/v86/memory.rb +1 -1
  32. data/lib/selenium/webdriver/devtools/v86/network.rb +1 -1
  33. data/lib/selenium/webdriver/devtools/v86/page.rb +1 -1
  34. data/lib/selenium/webdriver/devtools/v87/accessibility.rb +1 -1
  35. data/lib/selenium/webdriver/devtools/v87/animation.rb +2 -2
  36. data/lib/selenium/webdriver/devtools/v87/application_cache.rb +2 -2
  37. data/lib/selenium/webdriver/devtools/v87/audits.rb +2 -2
  38. data/lib/selenium/webdriver/devtools/v87/background_service.rb +2 -2
  39. data/lib/selenium/webdriver/devtools/v87/browser.rb +1 -1
  40. data/lib/selenium/webdriver/devtools/v87/cache_storage.rb +1 -1
  41. data/lib/selenium/webdriver/devtools/v87/cast.rb +2 -2
  42. data/lib/selenium/webdriver/devtools/v87/console.rb +2 -2
  43. data/lib/selenium/webdriver/devtools/v87/css.rb +2 -2
  44. data/lib/selenium/webdriver/devtools/v87/database.rb +2 -2
  45. data/lib/selenium/webdriver/devtools/v87/debugger.rb +2 -2
  46. data/lib/selenium/webdriver/devtools/v87/device_orientation.rb +1 -1
  47. data/lib/selenium/webdriver/devtools/v87/dom.rb +2 -2
  48. data/lib/selenium/webdriver/devtools/v87/dom_debugger.rb +1 -1
  49. data/lib/selenium/webdriver/devtools/v87/dom_snapshot.rb +1 -1
  50. data/lib/selenium/webdriver/devtools/v87/dom_storage.rb +2 -2
  51. data/lib/selenium/webdriver/devtools/v87/emulation.rb +2 -2
  52. data/lib/selenium/webdriver/devtools/v87/fetch.rb +2 -2
  53. data/lib/selenium/webdriver/devtools/v87/headless_experimental.rb +2 -2
  54. data/lib/selenium/webdriver/devtools/v87/heap_profiler.rb +2 -2
  55. data/lib/selenium/webdriver/devtools/v87/indexed_db.rb +1 -1
  56. data/lib/selenium/webdriver/devtools/v87/input.rb +1 -1
  57. data/lib/selenium/webdriver/devtools/v87/inspector.rb +2 -2
  58. data/lib/selenium/webdriver/devtools/v87/io.rb +1 -1
  59. data/lib/selenium/webdriver/devtools/v87/layer_tree.rb +2 -2
  60. data/lib/selenium/webdriver/devtools/v87/log.rb +2 -2
  61. data/lib/selenium/webdriver/devtools/v87/media.rb +2 -2
  62. data/lib/selenium/webdriver/devtools/v87/memory.rb +2 -2
  63. data/lib/selenium/webdriver/devtools/v87/network.rb +3 -3
  64. data/lib/selenium/webdriver/devtools/v87/overlay.rb +2 -2
  65. data/lib/selenium/webdriver/devtools/v87/page.rb +3 -3
  66. data/lib/selenium/webdriver/devtools/v87/performance.rb +2 -2
  67. data/lib/selenium/webdriver/devtools/v87/profiler.rb +2 -2
  68. data/lib/selenium/webdriver/devtools/v87/runtime.rb +2 -2
  69. data/lib/selenium/webdriver/devtools/v87/schema.rb +1 -1
  70. data/lib/selenium/webdriver/devtools/v87/security.rb +2 -2
  71. data/lib/selenium/webdriver/devtools/v87/service_worker.rb +2 -2
  72. data/lib/selenium/webdriver/devtools/v87/storage.rb +2 -2
  73. data/lib/selenium/webdriver/devtools/v87/system_info.rb +1 -1
  74. data/lib/selenium/webdriver/devtools/v87/target.rb +2 -2
  75. data/lib/selenium/webdriver/devtools/v87/tethering.rb +2 -2
  76. data/lib/selenium/webdriver/devtools/v87/tracing.rb +2 -2
  77. data/lib/selenium/webdriver/devtools/v87/web_audio.rb +2 -2
  78. data/lib/selenium/webdriver/devtools/v87/web_authn.rb +1 -1
  79. data/lib/selenium/webdriver/devtools/{v84 → v88}/accessibility.rb +12 -3
  80. data/lib/selenium/webdriver/devtools/{v84 → v88}/animation.rb +3 -3
  81. data/lib/selenium/webdriver/devtools/{v84 → v88}/application_cache.rb +3 -3
  82. data/lib/selenium/webdriver/devtools/{v84 → v88}/audits.rb +3 -3
  83. data/lib/selenium/webdriver/devtools/{v84 → v88}/background_service.rb +3 -3
  84. data/lib/selenium/webdriver/devtools/{v84 → v88}/browser.rb +8 -3
  85. data/lib/selenium/webdriver/devtools/{v84 → v88}/cache_storage.rb +3 -3
  86. data/lib/selenium/webdriver/devtools/{v84 → v88}/cast.rb +3 -3
  87. data/lib/selenium/webdriver/devtools/{v84 → v88}/console.rb +3 -3
  88. data/lib/selenium/webdriver/devtools/{v84 → v88}/css.rb +17 -3
  89. data/lib/selenium/webdriver/devtools/{v84 → v88}/database.rb +3 -3
  90. data/lib/selenium/webdriver/devtools/{v84 → v88}/debugger.rb +9 -7
  91. data/lib/selenium/webdriver/devtools/{v84 → v88}/device_orientation.rb +3 -3
  92. data/lib/selenium/webdriver/devtools/{v84 → v88}/dom.rb +10 -3
  93. data/lib/selenium/webdriver/devtools/{v84 → v88}/dom_debugger.rb +3 -3
  94. data/lib/selenium/webdriver/devtools/{v84 → v88}/dom_snapshot.rb +3 -3
  95. data/lib/selenium/webdriver/devtools/{v84 → v88}/dom_storage.rb +3 -3
  96. data/lib/selenium/webdriver/devtools/{v84 → v88}/emulation.rb +21 -5
  97. data/lib/selenium/webdriver/devtools/{v84 → v88}/fetch.rb +3 -3
  98. data/lib/selenium/webdriver/devtools/{v84 → v88}/headless_experimental.rb +3 -3
  99. data/lib/selenium/webdriver/devtools/{v84 → v88}/heap_profiler.rb +3 -3
  100. data/lib/selenium/webdriver/devtools/{v84 → v88}/indexed_db.rb +3 -3
  101. data/lib/selenium/webdriver/devtools/{v84 → v88}/input.rb +12 -6
  102. data/lib/selenium/webdriver/devtools/{v84 → v88}/inspector.rb +3 -3
  103. data/lib/selenium/webdriver/devtools/{v84 → v88}/io.rb +3 -3
  104. data/lib/selenium/webdriver/devtools/{v84 → v88}/layer_tree.rb +3 -3
  105. data/lib/selenium/webdriver/devtools/{v84 → v88}/log.rb +3 -3
  106. data/lib/selenium/webdriver/devtools/{v84 → v88}/media.rb +3 -3
  107. data/lib/selenium/webdriver/devtools/{v84 → v88}/memory.rb +4 -4
  108. data/lib/selenium/webdriver/devtools/{v84 → v88}/network.rb +21 -4
  109. data/lib/selenium/webdriver/devtools/{v84 → v88}/overlay.rb +29 -5
  110. data/lib/selenium/webdriver/devtools/{v84 → v88}/page.rb +4 -4
  111. data/lib/selenium/webdriver/devtools/{v84 → v88}/performance.rb +3 -3
  112. data/lib/selenium/webdriver/devtools/{v84 → v88}/profiler.rb +15 -3
  113. data/lib/selenium/webdriver/devtools/{v84 → v88}/runtime.rb +9 -7
  114. data/lib/selenium/webdriver/devtools/{v84 → v88}/schema.rb +3 -3
  115. data/lib/selenium/webdriver/devtools/{v84 → v88}/security.rb +3 -3
  116. data/lib/selenium/webdriver/devtools/{v84 → v88}/service_worker.rb +3 -3
  117. data/lib/selenium/webdriver/devtools/{v84 → v88}/storage.rb +9 -3
  118. data/lib/selenium/webdriver/devtools/{v84 → v88}/system_info.rb +3 -3
  119. data/lib/selenium/webdriver/devtools/{v84 → v88}/target.rb +7 -5
  120. data/lib/selenium/webdriver/devtools/{v84 → v88}/tethering.rb +3 -3
  121. data/lib/selenium/webdriver/devtools/{v84 → v88}/tracing.rb +6 -5
  122. data/lib/selenium/webdriver/devtools/{v84 → v88}/web_audio.rb +3 -3
  123. data/lib/selenium/webdriver/devtools/{v84 → v88}/web_authn.rb +9 -3
  124. data/lib/selenium/webdriver/edge.rb +7 -29
  125. data/lib/selenium/webdriver/{edge_chrome → edge}/bridge.rb +2 -2
  126. data/lib/selenium/webdriver/{edge_chrome → edge}/driver.rb +4 -4
  127. data/lib/selenium/webdriver/edge/features.rb +39 -0
  128. data/lib/selenium/webdriver/{edge_chrome → edge}/options.rb +9 -3
  129. data/lib/selenium/webdriver/{edge_chrome → edge}/profile.rb +2 -2
  130. data/lib/selenium/webdriver/{edge_chrome → edge}/service.rb +2 -2
  131. data/lib/selenium/webdriver/firefox/driver.rb +13 -0
  132. data/lib/selenium/webdriver/firefox/features.rb +47 -0
  133. data/lib/selenium/webdriver/firefox/options.rb +20 -21
  134. data/lib/selenium/webdriver/firefox/profile.rb +12 -2
  135. data/lib/selenium/webdriver/firefox/service.rb +1 -1
  136. data/lib/selenium/webdriver/ie/options.rb +0 -10
  137. data/lib/selenium/webdriver/ie/service.rb +1 -1
  138. data/lib/selenium/webdriver/remote/bridge.rb +6 -26
  139. data/lib/selenium/webdriver/remote/capabilities.rb +1 -15
  140. data/lib/selenium/webdriver/remote/commands.rb +1 -0
  141. data/lib/selenium/webdriver/remote/driver.rb +6 -1
  142. data/lib/selenium/webdriver/remote/http/default.rb +2 -2
  143. data/lib/selenium/webdriver/remote/http/persistent.rb +6 -0
  144. data/lib/selenium/webdriver/{common/driver_extensions/rotatable.rb → safari/features.rb} +26 -36
  145. data/lib/selenium/webdriver/safari/options.rb +0 -25
  146. data/lib/selenium/webdriver/support/block_event_listener.rb +1 -1
  147. data/lib/selenium/webdriver/support/event_firing_bridge.rb +1 -1
  148. data/lib/selenium/webdriver/version.rb +1 -1
  149. data/selenium-webdriver.gemspec +4 -2
  150. data/selenium_server_deploy.jar +0 -0
  151. metadata +89 -59
  152. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +0 -65
  153. data/lib/selenium/webdriver/edge_html/options.rb +0 -84
  154. data/lib/selenium/webdriver/edge_html/service.rb +0 -47
@@ -22,10 +22,10 @@ module Selenium
22
22
  module WebDriver
23
23
  class DevTools
24
24
  def system_info
25
- @system_info ||= V84::SystemInfo.new(self)
25
+ @system_info ||= V88::SystemInfo.new(self)
26
26
  end
27
27
 
28
- module V84
28
+ module V88
29
29
  class SystemInfo
30
30
 
31
31
  def initialize(devtools)
@@ -45,7 +45,7 @@ module Selenium
45
45
  @devtools.send_cmd('SystemInfo.getProcessInfo')
46
46
  end
47
47
 
48
- end # V84
48
+ end # V88
49
49
  end # SystemInfo
50
50
  end # DevTools
51
51
  end # WebDriver
@@ -22,10 +22,10 @@ module Selenium
22
22
  module WebDriver
23
23
  class DevTools
24
24
  def target
25
- @target ||= V84::Target.new(self)
25
+ @target ||= V88::Target.new(self)
26
26
  end
27
27
 
28
- module V84
28
+ module V88
29
29
  class Target
30
30
  EVENTS = {
31
31
  attached_to_target: 'attachedToTarget',
@@ -72,9 +72,11 @@ module Selenium
72
72
  bindingName: binding_name)
73
73
  end
74
74
 
75
- def create_browser_context(dispose_on_detach: nil)
75
+ def create_browser_context(dispose_on_detach: nil, proxy_server: nil, proxy_bypass_list: nil)
76
76
  @devtools.send_cmd('Target.createBrowserContext',
77
- disposeOnDetach: dispose_on_detach)
77
+ disposeOnDetach: dispose_on_detach,
78
+ proxyServer: proxy_server,
79
+ proxyBypassList: proxy_bypass_list)
78
80
  end
79
81
 
80
82
  def get_browser_contexts
@@ -136,7 +138,7 @@ module Selenium
136
138
  locations: locations)
137
139
  end
138
140
 
139
- end # V84
141
+ end # V88
140
142
  end # Target
141
143
  end # DevTools
142
144
  end # WebDriver
@@ -22,10 +22,10 @@ module Selenium
22
22
  module WebDriver
23
23
  class DevTools
24
24
  def tethering
25
- @tethering ||= V84::Tethering.new(self)
25
+ @tethering ||= V88::Tethering.new(self)
26
26
  end
27
27
 
28
- module V84
28
+ module V88
29
29
  class Tethering
30
30
  EVENTS = {
31
31
  accepted: 'accepted',
@@ -50,7 +50,7 @@ module Selenium
50
50
  port: port)
51
51
  end
52
52
 
53
- end # V84
53
+ end # V88
54
54
  end # Tethering
55
55
  end # DevTools
56
56
  end # WebDriver
@@ -22,10 +22,10 @@ module Selenium
22
22
  module WebDriver
23
23
  class DevTools
24
24
  def tracing
25
- @tracing ||= V84::Tracing.new(self)
25
+ @tracing ||= V88::Tracing.new(self)
26
26
  end
27
27
 
28
- module V84
28
+ module V88
29
29
  class Tracing
30
30
  EVENTS = {
31
31
  buffer_usage: 'bufferUsage',
@@ -55,9 +55,10 @@ module Selenium
55
55
  syncId: sync_id)
56
56
  end
57
57
 
58
- def request_memory_dump(deterministic: nil)
58
+ def request_memory_dump(deterministic: nil, level_of_detail: nil)
59
59
  @devtools.send_cmd('Tracing.requestMemoryDump',
60
- deterministic: deterministic)
60
+ deterministic: deterministic,
61
+ levelOfDetail: level_of_detail)
61
62
  end
62
63
 
63
64
  def start(categories: nil, options: nil, buffer_usage_reporting_interval: nil, transfer_mode: nil, stream_format: nil, stream_compression: nil, trace_config: nil)
@@ -71,7 +72,7 @@ module Selenium
71
72
  traceConfig: trace_config)
72
73
  end
73
74
 
74
- end # V84
75
+ end # V88
75
76
  end # Tracing
76
77
  end # DevTools
77
78
  end # WebDriver
@@ -22,10 +22,10 @@ module Selenium
22
22
  module WebDriver
23
23
  class DevTools
24
24
  def web_audio
25
- @web_audio ||= V84::WebAudio.new(self)
25
+ @web_audio ||= V88::WebAudio.new(self)
26
26
  end
27
27
 
28
- module V84
28
+ module V88
29
29
  class WebAudio
30
30
  EVENTS = {
31
31
  context_created: 'contextCreated',
@@ -65,7 +65,7 @@ module Selenium
65
65
  contextId: context_id)
66
66
  end
67
67
 
68
- end # V84
68
+ end # V88
69
69
  end # WebAudio
70
70
  end # DevTools
71
71
  end # WebDriver
@@ -22,10 +22,10 @@ module Selenium
22
22
  module WebDriver
23
23
  class DevTools
24
24
  def web_authn
25
- @web_authn ||= V84::WebAuthn.new(self)
25
+ @web_authn ||= V88::WebAuthn.new(self)
26
26
  end
27
27
 
28
- module V84
28
+ module V88
29
29
  class WebAuthn
30
30
 
31
31
  def initialize(devtools)
@@ -89,7 +89,13 @@ module Selenium
89
89
  isUserVerified: is_user_verified)
90
90
  end
91
91
 
92
- end # V84
92
+ def set_automatic_presence_simulation(authenticator_id:, enabled:)
93
+ @devtools.send_cmd('WebAuthn.setAutomaticPresenceSimulation',
94
+ authenticatorId: authenticator_id,
95
+ enabled: enabled)
96
+ end
97
+
98
+ end # V88
93
99
  end # WebAuthn
94
100
  end # DevTools
95
101
  end # WebDriver
@@ -21,32 +21,12 @@ require 'net/http'
21
21
 
22
22
  module Selenium
23
23
  module WebDriver
24
- module EdgeHtml
25
- autoload :Driver, 'selenium/webdriver/edge_html/driver'
26
- autoload :Options, 'selenium/webdriver/edge_html/options'
27
- autoload :Service, 'selenium/webdriver/edge_html/service'
28
-
29
- def self.driver_path=(path)
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 :Bridge, 'selenium/webdriver/edge/bridge'
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 # EdgeHtml
60
-
61
- Edge = EdgeChrome
39
+ end # Edge
62
40
  end # WebDriver
63
41
  end # Selenium
@@ -21,7 +21,7 @@ require 'selenium/webdriver/chrome/bridge'
21
21
 
22
22
  module Selenium
23
23
  module WebDriver
24
- module EdgeChrome
24
+ module Edge
25
25
  class Bridge < WebDriver::Chrome::Bridge
26
26
 
27
27
  COMMANDS = WebDriver::Chrome::Bridge::COMMANDS.merge(
@@ -32,6 +32,6 @@ module Selenium
32
32
  COMMANDS[command] || super
33
33
  end
34
34
  end # Bridge
35
- end # EdgeChrome
35
+ end # Edge
36
36
  end # WebDriver
37
37
  end # Selenium
@@ -21,16 +21,16 @@ require 'selenium/webdriver/chrome/driver'
21
21
 
22
22
  module Selenium
23
23
  module WebDriver
24
- module EdgeChrome
24
+ module Edge
25
25
 
26
26
  #
27
- # Driver implementation for EdgeChrome.
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
- :edge_chrome
33
+ :edge
34
34
  end
35
35
 
36
36
  def bridge_class
@@ -43,6 +43,6 @@ module Selenium
43
43
  capabilities['ms:edgeOptions']['debuggerAddress']
44
44
  end
45
45
  end # Driver
46
- end # EdgeChrome
46
+ end # Edge
47
47
  end # WebDriver
48
48
  end # Selenium
@@ -0,0 +1,39 @@
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
+ require 'selenium/webdriver/chrome/features'
21
+
22
+ module Selenium
23
+ module WebDriver
24
+ module Edge
25
+ module Features
26
+
27
+ include WebDriver::Chrome::Features
28
+
29
+ EDGE_COMMANDS = {
30
+ send_command: [:post, 'session/:session_id/ms/cdp/execute']
31
+ }.freeze
32
+
33
+ def commands(command)
34
+ EDGE_COMMANDS[command] || Chrome::Features::CHROME_COMMANDS[command] || self.class::COMMANDS[command]
35
+ end
36
+ end # Bridge
37
+ end # Edge
38
+ end # WebDriver
39
+ end # Selenium
@@ -21,17 +21,23 @@ require 'selenium/webdriver/chrome/options'
21
21
 
22
22
  module Selenium
23
23
  module WebDriver
24
- module EdgeChrome
24
+ module Edge
25
25
  class Options < Selenium::WebDriver::Chrome::Options
26
26
  KEY = 'ms:edgeOptions'
27
27
  BROWSER = 'MicrosoftEdge'
28
28
 
29
+ protected
30
+
31
+ def enable_logging(browser_options)
32
+ browser_options['ms:loggingPrefs'] = @logging_prefs
33
+ end
34
+
29
35
  private
30
36
 
31
37
  def binary_path
32
- EdgeChrome.path
38
+ Edge.path
33
39
  end
34
40
  end # Options
35
- end # EdgeChrome
41
+ end # Edge
36
42
  end # WebDriver
37
43
  end # Selenium
@@ -21,13 +21,13 @@ require 'selenium/webdriver/chrome/profile'
21
21
 
22
22
  module Selenium
23
23
  module WebDriver
24
- module EdgeChrome
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 # EdgeChrome
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 EdgeChrome
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 # EdgeChrome
34
+ end # Edge
35
35
  end # WebDriver
36
36
  end # Selenium
@@ -28,7 +28,10 @@ module Selenium
28
28
 
29
29
  class Driver < WebDriver::Driver
30
30
  include DriverExtensions::HasAddons
31
+ include DriverExtensions::HasDevTools
32
+ include DriverExtensions::HasLogEvents
31
33
  include DriverExtensions::HasWebStorage
34
+ include DriverExtensions::PrintsPage
32
35
 
33
36
  def browser
34
37
  :firefox
@@ -37,6 +40,16 @@ module Selenium
37
40
  def bridge_class
38
41
  Bridge
39
42
  end
43
+
44
+ private
45
+
46
+ def devtools_version
47
+ 85
48
+ end
49
+
50
+ def debugger_address
51
+ capabilities['moz:debuggerAddress']
52
+ end
40
53
  end # Driver
41
54
  end # Firefox
42
55
  end # WebDriver
@@ -0,0 +1,47 @@
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 Firefox
23
+ module Features
24
+
25
+ FIREFOX_COMMANDS = {
26
+ install_addon: [:post, 'session/:session_id/moz/addon/install'],
27
+ uninstall_addon: [:post, 'session/:session_id/moz/addon/uninstall']
28
+ }.freeze
29
+
30
+ def commands(command)
31
+ FIREFOX_COMMANDS[command] || self.class::COMMANDS[command]
32
+ end
33
+
34
+ def install_addon(path, temporary)
35
+ payload = {path: path}
36
+ payload[:temporary] = temporary unless temporary.nil?
37
+ execute :install_addon, {}, payload
38
+ end
39
+
40
+ def uninstall_addon(id)
41
+ execute :uninstall_addon, {}, {id: id}
42
+ end
43
+
44
+ end # Bridge
45
+ end # Firefox
46
+ end # WebDriver
47
+ end # Selenium
@@ -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
- CAPABILITIES.each_key do |key|
35
- define_method key do
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
- process_profile(@options[:profile]) if @options.key?(:profile)
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
- @options[:profile] = if profile.nil?
147
- nil
148
- elsif profile.is_a? Profile
149
- profile
150
- else
151
- Profile.from_name(profile)
152
- end
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