selenium-webdriver 4.0.0.beta1 → 4.0.0.beta2

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 (229) hide show
  1. checksums.yaml +4 -4
  2. data/lib/selenium/{webdriver/edge/bridge.rb → devtools.rb} +8 -15
  3. data/lib/selenium/webdriver/atoms/findElements.js +77 -78
  4. data/lib/selenium/webdriver/atoms/getAttribute.js +64 -68
  5. data/lib/selenium/webdriver/atoms/isDisplayed.js +27 -27
  6. data/lib/selenium/webdriver/atoms/mutationListener.js +17 -0
  7. data/lib/selenium/webdriver/chrome.rb +1 -1
  8. data/lib/selenium/webdriver/chrome/driver.rb +12 -18
  9. data/lib/selenium/webdriver/chrome/service.rb +3 -1
  10. data/lib/selenium/webdriver/common.rb +1 -0
  11. data/lib/selenium/webdriver/common/driver.rb +20 -3
  12. data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +23 -1
  13. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -2
  14. data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +67 -0
  15. data/lib/selenium/webdriver/common/element.rb +41 -12
  16. data/lib/selenium/webdriver/common/interactions/interaction.rb +4 -1
  17. data/lib/selenium/webdriver/common/logger.rb +5 -2
  18. data/lib/selenium/webdriver/common/options.rb +42 -8
  19. data/lib/selenium/webdriver/common/proxy.rb +4 -1
  20. data/lib/selenium/webdriver/common/search_context.rb +4 -1
  21. data/lib/selenium/webdriver/common/service.rb +1 -0
  22. data/lib/selenium/webdriver/devtools.rb +34 -25
  23. data/lib/selenium/webdriver/devtools/{v87/console.rb → request.rb} +32 -34
  24. data/lib/selenium/webdriver/edge.rb +1 -1
  25. data/lib/selenium/webdriver/edge/driver.rb +2 -6
  26. data/lib/selenium/webdriver/firefox.rb +5 -1
  27. data/lib/selenium/webdriver/firefox/driver.rb +8 -15
  28. data/lib/selenium/webdriver/ie/driver.rb +1 -1
  29. data/lib/selenium/webdriver/ie/service.rb +3 -1
  30. data/lib/selenium/webdriver/remote/bridge.rb +24 -3
  31. data/lib/selenium/webdriver/remote/capabilities.rb +25 -15
  32. data/lib/selenium/webdriver/remote/driver.rb +6 -1
  33. data/lib/selenium/webdriver/remote/http/common.rb +0 -5
  34. data/lib/selenium/webdriver/remote/http/default.rb +5 -3
  35. data/lib/selenium/webdriver/safari.rb +1 -1
  36. data/lib/selenium/webdriver/safari/driver.rb +3 -7
  37. data/lib/selenium/webdriver/support/guards.rb +95 -0
  38. data/lib/selenium/webdriver/support/guards/guard.rb +89 -0
  39. data/lib/selenium/webdriver/{devtools/v87/system_info.rb → support/guards/guard_condition.rb} +24 -24
  40. data/lib/selenium/webdriver/support/select.rb +2 -2
  41. data/lib/selenium/webdriver/version.rb +1 -1
  42. metadata +15 -197
  43. data/CHANGES +0 -1825
  44. data/Gemfile +0 -4
  45. data/LICENSE +0 -202
  46. data/README.md +0 -34
  47. data/lib/selenium/webdriver/chrome/bridge.rb +0 -66
  48. data/lib/selenium/webdriver/devtools/v85/accessibility.rb +0 -64
  49. data/lib/selenium/webdriver/devtools/v85/animation.rb +0 -100
  50. data/lib/selenium/webdriver/devtools/v85/application_cache.rb +0 -66
  51. data/lib/selenium/webdriver/devtools/v85/audits.rb +0 -63
  52. data/lib/selenium/webdriver/devtools/v85/background_service.rb +0 -69
  53. data/lib/selenium/webdriver/devtools/v85/browser.rb +0 -125
  54. data/lib/selenium/webdriver/devtools/v85/cache_storage.rb +0 -75
  55. data/lib/selenium/webdriver/devtools/v85/cast.rb +0 -72
  56. data/lib/selenium/webdriver/devtools/v85/console.rb +0 -59
  57. data/lib/selenium/webdriver/devtools/v85/css.rb +0 -167
  58. data/lib/selenium/webdriver/devtools/v85/database.rb +0 -66
  59. data/lib/selenium/webdriver/devtools/v85/debugger.rb +0 -231
  60. data/lib/selenium/webdriver/devtools/v85/device_orientation.rb +0 -55
  61. data/lib/selenium/webdriver/devtools/v85/dom.rb +0 -322
  62. data/lib/selenium/webdriver/devtools/v85/dom_debugger.rb +0 -95
  63. data/lib/selenium/webdriver/devtools/v85/dom_snapshot.rb +0 -67
  64. data/lib/selenium/webdriver/devtools/v85/dom_storage.rb +0 -81
  65. data/lib/selenium/webdriver/devtools/v85/emulation.rb +0 -182
  66. data/lib/selenium/webdriver/devtools/v85/fetch.rb +0 -99
  67. data/lib/selenium/webdriver/devtools/v85/headless_experimental.rb +0 -63
  68. data/lib/selenium/webdriver/devtools/v85/heap_profiler.rb +0 -109
  69. data/lib/selenium/webdriver/devtools/v85/indexed_db.rb +0 -102
  70. data/lib/selenium/webdriver/devtools/v85/input.rb +0 -143
  71. data/lib/selenium/webdriver/devtools/v85/inspector.rb +0 -57
  72. data/lib/selenium/webdriver/devtools/v85/io.rb +0 -61
  73. data/lib/selenium/webdriver/devtools/v85/layer_tree.rb +0 -97
  74. data/lib/selenium/webdriver/devtools/v85/log.rb +0 -68
  75. data/lib/selenium/webdriver/devtools/v85/media.rb +0 -59
  76. data/lib/selenium/webdriver/devtools/v85/memory.rb +0 -88
  77. data/lib/selenium/webdriver/devtools/v85/network.rb +0 -230
  78. data/lib/selenium/webdriver/devtools/v85/overlay.rb +0 -160
  79. data/lib/selenium/webdriver/devtools/v85/page.rb +0 -376
  80. data/lib/selenium/webdriver/devtools/v85/performance.rb +0 -65
  81. data/lib/selenium/webdriver/devtools/v85/profiler.rb +0 -113
  82. data/lib/selenium/webdriver/devtools/v85/runtime.rb +0 -196
  83. data/lib/selenium/webdriver/devtools/v85/schema.rb +0 -48
  84. data/lib/selenium/webdriver/devtools/v85/security.rb +0 -73
  85. data/lib/selenium/webdriver/devtools/v85/service_worker.rb +0 -118
  86. data/lib/selenium/webdriver/devtools/v85/storage.rb +0 -97
  87. data/lib/selenium/webdriver/devtools/v85/system_info.rb +0 -52
  88. data/lib/selenium/webdriver/devtools/v85/target.rb +0 -145
  89. data/lib/selenium/webdriver/devtools/v85/tethering.rb +0 -57
  90. data/lib/selenium/webdriver/devtools/v85/tracing.rb +0 -78
  91. data/lib/selenium/webdriver/devtools/v85/web_audio.rb +0 -72
  92. data/lib/selenium/webdriver/devtools/v85/web_authn.rb +0 -96
  93. data/lib/selenium/webdriver/devtools/v86/accessibility.rb +0 -64
  94. data/lib/selenium/webdriver/devtools/v86/animation.rb +0 -100
  95. data/lib/selenium/webdriver/devtools/v86/application_cache.rb +0 -66
  96. data/lib/selenium/webdriver/devtools/v86/audits.rb +0 -63
  97. data/lib/selenium/webdriver/devtools/v86/background_service.rb +0 -69
  98. data/lib/selenium/webdriver/devtools/v86/browser.rb +0 -125
  99. data/lib/selenium/webdriver/devtools/v86/cache_storage.rb +0 -75
  100. data/lib/selenium/webdriver/devtools/v86/cast.rb +0 -72
  101. data/lib/selenium/webdriver/devtools/v86/console.rb +0 -59
  102. data/lib/selenium/webdriver/devtools/v86/css.rb +0 -181
  103. data/lib/selenium/webdriver/devtools/v86/database.rb +0 -66
  104. data/lib/selenium/webdriver/devtools/v86/debugger.rb +0 -233
  105. data/lib/selenium/webdriver/devtools/v86/device_orientation.rb +0 -55
  106. data/lib/selenium/webdriver/devtools/v86/dom.rb +0 -329
  107. data/lib/selenium/webdriver/devtools/v86/dom_debugger.rb +0 -95
  108. data/lib/selenium/webdriver/devtools/v86/dom_snapshot.rb +0 -67
  109. data/lib/selenium/webdriver/devtools/v86/dom_storage.rb +0 -81
  110. data/lib/selenium/webdriver/devtools/v86/emulation.rb +0 -193
  111. data/lib/selenium/webdriver/devtools/v86/fetch.rb +0 -99
  112. data/lib/selenium/webdriver/devtools/v86/headless_experimental.rb +0 -63
  113. data/lib/selenium/webdriver/devtools/v86/heap_profiler.rb +0 -109
  114. data/lib/selenium/webdriver/devtools/v86/indexed_db.rb +0 -102
  115. data/lib/selenium/webdriver/devtools/v86/input.rb +0 -143
  116. data/lib/selenium/webdriver/devtools/v86/inspector.rb +0 -57
  117. data/lib/selenium/webdriver/devtools/v86/io.rb +0 -61
  118. data/lib/selenium/webdriver/devtools/v86/layer_tree.rb +0 -97
  119. data/lib/selenium/webdriver/devtools/v86/log.rb +0 -68
  120. data/lib/selenium/webdriver/devtools/v86/media.rb +0 -59
  121. data/lib/selenium/webdriver/devtools/v86/memory.rb +0 -88
  122. data/lib/selenium/webdriver/devtools/v86/network.rb +0 -235
  123. data/lib/selenium/webdriver/devtools/v86/overlay.rb +0 -183
  124. data/lib/selenium/webdriver/devtools/v86/page.rb +0 -376
  125. data/lib/selenium/webdriver/devtools/v86/performance.rb +0 -65
  126. data/lib/selenium/webdriver/devtools/v86/profiler.rb +0 -113
  127. data/lib/selenium/webdriver/devtools/v86/runtime.rb +0 -196
  128. data/lib/selenium/webdriver/devtools/v86/schema.rb +0 -48
  129. data/lib/selenium/webdriver/devtools/v86/security.rb +0 -73
  130. data/lib/selenium/webdriver/devtools/v86/service_worker.rb +0 -118
  131. data/lib/selenium/webdriver/devtools/v86/storage.rb +0 -97
  132. data/lib/selenium/webdriver/devtools/v86/system_info.rb +0 -52
  133. data/lib/selenium/webdriver/devtools/v86/target.rb +0 -145
  134. data/lib/selenium/webdriver/devtools/v86/tethering.rb +0 -57
  135. data/lib/selenium/webdriver/devtools/v86/tracing.rb +0 -78
  136. data/lib/selenium/webdriver/devtools/v86/web_audio.rb +0 -72
  137. data/lib/selenium/webdriver/devtools/v86/web_authn.rb +0 -102
  138. data/lib/selenium/webdriver/devtools/v87/accessibility.rb +0 -73
  139. data/lib/selenium/webdriver/devtools/v87/animation.rb +0 -100
  140. data/lib/selenium/webdriver/devtools/v87/application_cache.rb +0 -66
  141. data/lib/selenium/webdriver/devtools/v87/audits.rb +0 -63
  142. data/lib/selenium/webdriver/devtools/v87/background_service.rb +0 -69
  143. data/lib/selenium/webdriver/devtools/v87/browser.rb +0 -125
  144. data/lib/selenium/webdriver/devtools/v87/cache_storage.rb +0 -75
  145. data/lib/selenium/webdriver/devtools/v87/cast.rb +0 -72
  146. data/lib/selenium/webdriver/devtools/v87/css.rb +0 -181
  147. data/lib/selenium/webdriver/devtools/v87/database.rb +0 -66
  148. data/lib/selenium/webdriver/devtools/v87/debugger.rb +0 -233
  149. data/lib/selenium/webdriver/devtools/v87/device_orientation.rb +0 -55
  150. data/lib/selenium/webdriver/devtools/v87/dom.rb +0 -329
  151. data/lib/selenium/webdriver/devtools/v87/dom_debugger.rb +0 -95
  152. data/lib/selenium/webdriver/devtools/v87/dom_snapshot.rb +0 -67
  153. data/lib/selenium/webdriver/devtools/v87/dom_storage.rb +0 -81
  154. data/lib/selenium/webdriver/devtools/v87/emulation.rb +0 -193
  155. data/lib/selenium/webdriver/devtools/v87/fetch.rb +0 -99
  156. data/lib/selenium/webdriver/devtools/v87/headless_experimental.rb +0 -63
  157. data/lib/selenium/webdriver/devtools/v87/heap_profiler.rb +0 -109
  158. data/lib/selenium/webdriver/devtools/v87/indexed_db.rb +0 -102
  159. data/lib/selenium/webdriver/devtools/v87/input.rb +0 -143
  160. data/lib/selenium/webdriver/devtools/v87/inspector.rb +0 -57
  161. data/lib/selenium/webdriver/devtools/v87/io.rb +0 -61
  162. data/lib/selenium/webdriver/devtools/v87/layer_tree.rb +0 -97
  163. data/lib/selenium/webdriver/devtools/v87/log.rb +0 -68
  164. data/lib/selenium/webdriver/devtools/v87/media.rb +0 -59
  165. data/lib/selenium/webdriver/devtools/v87/memory.rb +0 -88
  166. data/lib/selenium/webdriver/devtools/v87/network.rb +0 -247
  167. data/lib/selenium/webdriver/devtools/v87/overlay.rb +0 -183
  168. data/lib/selenium/webdriver/devtools/v87/page.rb +0 -376
  169. data/lib/selenium/webdriver/devtools/v87/performance.rb +0 -65
  170. data/lib/selenium/webdriver/devtools/v87/profiler.rb +0 -125
  171. data/lib/selenium/webdriver/devtools/v87/runtime.rb +0 -196
  172. data/lib/selenium/webdriver/devtools/v87/schema.rb +0 -48
  173. data/lib/selenium/webdriver/devtools/v87/security.rb +0 -73
  174. data/lib/selenium/webdriver/devtools/v87/service_worker.rb +0 -118
  175. data/lib/selenium/webdriver/devtools/v87/storage.rb +0 -97
  176. data/lib/selenium/webdriver/devtools/v87/target.rb +0 -145
  177. data/lib/selenium/webdriver/devtools/v87/tethering.rb +0 -57
  178. data/lib/selenium/webdriver/devtools/v87/tracing.rb +0 -78
  179. data/lib/selenium/webdriver/devtools/v87/web_audio.rb +0 -72
  180. data/lib/selenium/webdriver/devtools/v87/web_authn.rb +0 -102
  181. data/lib/selenium/webdriver/devtools/v88/accessibility.rb +0 -73
  182. data/lib/selenium/webdriver/devtools/v88/animation.rb +0 -100
  183. data/lib/selenium/webdriver/devtools/v88/application_cache.rb +0 -66
  184. data/lib/selenium/webdriver/devtools/v88/audits.rb +0 -63
  185. data/lib/selenium/webdriver/devtools/v88/background_service.rb +0 -69
  186. data/lib/selenium/webdriver/devtools/v88/browser.rb +0 -130
  187. data/lib/selenium/webdriver/devtools/v88/cache_storage.rb +0 -75
  188. data/lib/selenium/webdriver/devtools/v88/cast.rb +0 -72
  189. data/lib/selenium/webdriver/devtools/v88/console.rb +0 -59
  190. data/lib/selenium/webdriver/devtools/v88/css.rb +0 -181
  191. data/lib/selenium/webdriver/devtools/v88/database.rb +0 -66
  192. data/lib/selenium/webdriver/devtools/v88/debugger.rb +0 -233
  193. data/lib/selenium/webdriver/devtools/v88/device_orientation.rb +0 -55
  194. data/lib/selenium/webdriver/devtools/v88/dom.rb +0 -329
  195. data/lib/selenium/webdriver/devtools/v88/dom_debugger.rb +0 -95
  196. data/lib/selenium/webdriver/devtools/v88/dom_snapshot.rb +0 -67
  197. data/lib/selenium/webdriver/devtools/v88/dom_storage.rb +0 -81
  198. data/lib/selenium/webdriver/devtools/v88/emulation.rb +0 -198
  199. data/lib/selenium/webdriver/devtools/v88/fetch.rb +0 -99
  200. data/lib/selenium/webdriver/devtools/v88/headless_experimental.rb +0 -63
  201. data/lib/selenium/webdriver/devtools/v88/heap_profiler.rb +0 -109
  202. data/lib/selenium/webdriver/devtools/v88/indexed_db.rb +0 -102
  203. data/lib/selenium/webdriver/devtools/v88/input.rb +0 -148
  204. data/lib/selenium/webdriver/devtools/v88/inspector.rb +0 -57
  205. data/lib/selenium/webdriver/devtools/v88/io.rb +0 -61
  206. data/lib/selenium/webdriver/devtools/v88/layer_tree.rb +0 -97
  207. data/lib/selenium/webdriver/devtools/v88/log.rb +0 -68
  208. data/lib/selenium/webdriver/devtools/v88/media.rb +0 -59
  209. data/lib/selenium/webdriver/devtools/v88/memory.rb +0 -88
  210. data/lib/selenium/webdriver/devtools/v88/network.rb +0 -247
  211. data/lib/selenium/webdriver/devtools/v88/overlay.rb +0 -183
  212. data/lib/selenium/webdriver/devtools/v88/page.rb +0 -376
  213. data/lib/selenium/webdriver/devtools/v88/performance.rb +0 -65
  214. data/lib/selenium/webdriver/devtools/v88/profiler.rb +0 -125
  215. data/lib/selenium/webdriver/devtools/v88/runtime.rb +0 -197
  216. data/lib/selenium/webdriver/devtools/v88/schema.rb +0 -48
  217. data/lib/selenium/webdriver/devtools/v88/security.rb +0 -73
  218. data/lib/selenium/webdriver/devtools/v88/service_worker.rb +0 -118
  219. data/lib/selenium/webdriver/devtools/v88/storage.rb +0 -103
  220. data/lib/selenium/webdriver/devtools/v88/system_info.rb +0 -52
  221. data/lib/selenium/webdriver/devtools/v88/target.rb +0 -145
  222. data/lib/selenium/webdriver/devtools/v88/tethering.rb +0 -57
  223. data/lib/selenium/webdriver/devtools/v88/tracing.rb +0 -79
  224. data/lib/selenium/webdriver/devtools/v88/web_audio.rb +0 -72
  225. data/lib/selenium/webdriver/devtools/v88/web_authn.rb +0 -102
  226. data/lib/selenium/webdriver/firefox/bridge.rb +0 -47
  227. data/lib/selenium/webdriver/safari/bridge.rb +0 -51
  228. data/selenium-webdriver.gemspec +0 -50
  229. data/selenium_server_deploy.jar +0 -0
@@ -22,7 +22,7 @@ require 'net/http'
22
22
  module Selenium
23
23
  module WebDriver
24
24
  module Chrome
25
- autoload :Bridge, 'selenium/webdriver/chrome/bridge'
25
+ autoload :Features, 'selenium/webdriver/chrome/features'
26
26
  autoload :Driver, 'selenium/webdriver/chrome/driver'
27
27
  autoload :Profile, 'selenium/webdriver/chrome/profile'
28
28
  autoload :Options, 'selenium/webdriver/chrome/options'
@@ -27,37 +27,31 @@ module Selenium
27
27
  #
28
28
 
29
29
  class Driver < WebDriver::Driver
30
- include DriverExtensions::HasNetworkConditions
31
- include DriverExtensions::HasWebStorage
32
- include DriverExtensions::HasLocation
33
- include DriverExtensions::DownloadsFiles
34
- include DriverExtensions::HasDevTools
35
- include DriverExtensions::HasAuthentication
36
- include DriverExtensions::HasLogs
37
- include DriverExtensions::HasLogEvents
38
- include DriverExtensions::PrintsPage
30
+ EXTENSIONS = [DriverExtensions::HasNetworkConditions,
31
+ DriverExtensions::HasNetworkInterception,
32
+ DriverExtensions::HasWebStorage,
33
+ DriverExtensions::HasLocation,
34
+ DriverExtensions::DownloadsFiles,
35
+ DriverExtensions::HasDevTools,
36
+ DriverExtensions::HasAuthentication,
37
+ DriverExtensions::HasLogs,
38
+ DriverExtensions::HasLogEvents,
39
+ DriverExtensions::PrintsPage].freeze
39
40
 
40
41
  def browser
41
42
  :chrome
42
43
  end
43
44
 
44
- def bridge_class
45
- Bridge
46
- end
47
-
48
45
  def execute_cdp(cmd, **params)
49
46
  @bridge.send_command(cmd: cmd, params: params)
50
47
  end
51
48
 
52
49
  private
53
50
 
54
- def devtools_version
55
- Integer(capabilities.browser_version.split('.').first)
51
+ def devtools_address
52
+ "http://#{capabilities['goog:chromeOptions']['debuggerAddress']}"
56
53
  end
57
54
 
58
- def debugger_address
59
- capabilities['goog:chromeOptions']['debuggerAddress']
60
- end
61
55
  end # Driver
62
56
  end # Chrome
63
57
  end # WebDriver
@@ -39,7 +39,9 @@ module Selenium
39
39
  driver_args << "--log-path=#{driver_opts.delete(:log_path)}" if driver_opts.key?(:log_path)
40
40
  driver_args << "--url-base=#{driver_opts.delete(:url_base)}" if driver_opts.key?(:url_base)
41
41
  driver_args << "--port-server=#{driver_opts.delete(:port_server)}" if driver_opts.key?(:port_server)
42
- driver_args << "--whitelisted-ips=#{driver_opts.delete(:whitelisted_ips)}" if driver_opts.key?(:whitelisted_ips)
42
+ if driver_opts.key?(:whitelisted_ips)
43
+ driver_args << "--whitelisted-ips=#{driver_opts.delete(:whitelisted_ips)}"
44
+ end
43
45
  driver_args << "--verbose" if driver_opts.key?(:verbose)
44
46
  driver_args << "--silent" if driver_opts.key?(:silent)
45
47
  driver_args
@@ -57,6 +57,7 @@ require 'selenium/webdriver/common/driver_extensions/has_session_id'
57
57
  require 'selenium/webdriver/common/driver_extensions/has_remote_status'
58
58
  require 'selenium/webdriver/common/driver_extensions/has_network_conditions'
59
59
  require 'selenium/webdriver/common/driver_extensions/has_network_connection'
60
+ require 'selenium/webdriver/common/driver_extensions/has_network_interception'
60
61
  require 'selenium/webdriver/common/driver_extensions/has_permissions'
61
62
  require 'selenium/webdriver/common/driver_extensions/has_debugger'
62
63
  require 'selenium/webdriver/common/driver_extensions/prints_page'
@@ -71,11 +71,13 @@ module Selenium
71
71
  def initialize(bridge: nil, listener: nil, **opts)
72
72
  @service = nil
73
73
  bridge ||= create_bridge(**opts)
74
+ add_extensions(bridge.browser)
74
75
  @bridge = listener ? Support::EventFiringBridge.new(bridge, listener) : bridge
75
76
  end
76
77
 
77
78
  def inspect
78
- format '#<%<class>s:0x%<hash>x browser=%<browser>s>', class: self.class, hash: hash * 2, browser: bridge.browser.inspect
79
+ format '#<%<class>s:0x%<hash>x browser=%<browser>s>', class: self.class, hash: hash * 2,
80
+ browser: bridge.browser.inspect
79
81
  end
80
82
 
81
83
  #
@@ -329,7 +331,7 @@ module Selenium
329
331
  bridge_opts = {http_client: opts.delete(:http_client), url: opts.delete(:url)}
330
332
  raise ArgumentError, "Unable to create a driver with parameters: #{opts}" unless opts.empty?
331
333
 
332
- bridge = (respond_to?(:bridge_class) ? bridge_class : Remote::Bridge).new(**bridge_opts)
334
+ bridge = Remote::Bridge.new(**bridge_opts)
333
335
 
334
336
  bridge.create_session(capabilities)
335
337
  bridge
@@ -340,8 +342,9 @@ module Selenium
340
342
  if cap.is_a? Symbol
341
343
  cap = Remote::Capabilities.send(cap)
342
344
  elsif cap.is_a? Hash
345
+ new_message = 'Capabilities instance initialized with the Hash, or build values with Options class'
343
346
  WebDriver.logger.deprecate("passing a Hash value to :capabilities",
344
- 'Capabilities instance initialized with the Hash, or build values with Options class',
347
+ new_message,
345
348
  id: :capabilities_hash)
346
349
  cap = Remote::Capabilities.new(cap)
347
350
  elsif !cap.respond_to? :as_json
@@ -371,6 +374,20 @@ module Selenium
371
374
  def screenshot
372
375
  bridge.screenshot
373
376
  end
377
+
378
+ def add_extensions(browser)
379
+ extensions = case browser
380
+ when :chrome, :msedge
381
+ Chrome::Driver::EXTENSIONS
382
+ when :firefox
383
+ Firefox::Driver::EXTENSIONS
384
+ when :safari, :safari_technology_preview
385
+ Safari::Driver::EXTENSIONS
386
+ else
387
+ []
388
+ end
389
+ extensions.each { |extension| extend extension }
390
+ end
374
391
  end # Driver
375
392
  end # WebDriver
376
393
  end # Selenium
@@ -29,7 +29,29 @@ module Selenium
29
29
  #
30
30
 
31
31
  def devtools
32
- @devtools ||= DevTools.new(url: debugger_address, version: devtools_version)
32
+ @devtools ||= begin
33
+ require 'selenium/devtools'
34
+ Selenium::DevTools.version ||= devtools_version
35
+ Selenium::DevTools.load_version
36
+ Selenium::WebDriver::DevTools.new(url: devtools_url)
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def devtools_version
43
+ return Firefox::DEVTOOLS_VERSION if browser == :firefox
44
+
45
+ Integer(capabilities.browser_version.split('.').first)
46
+ end
47
+
48
+ def devtools_url
49
+ return devtools_address if devtools_address.include?('/session/')
50
+
51
+ uri = URI(devtools_address)
52
+ response = Net::HTTP.get(uri.hostname, '/json/version', uri.port)
53
+
54
+ JSON.parse(response)['webSocketDebuggerUrl']
33
55
  end
34
56
 
35
57
  end # HasDevTools
@@ -23,11 +23,13 @@ module Selenium
23
23
  module DriverExtensions
24
24
  module HasNetworkConnection
25
25
  def network_connection_type
26
- raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting network connection'
26
+ raise Error::UnsupportedOperationError,
27
+ 'The W3C standard does not currently support getting network connection'
27
28
  end
28
29
 
29
30
  def network_connection_type=(*)
30
- raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting network connection'
31
+ raise Error::UnsupportedOperationError,
32
+ 'The W3C standard does not currently support setting network connection'
31
33
  end
32
34
  end # HasNetworkConnection
33
35
  end # DriverExtensions
@@ -0,0 +1,67 @@
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 HasNetworkInterception
24
+
25
+ #
26
+ # Intercepts requests coming from browser allowing
27
+ # to either pass them through like proxy or provide
28
+ # a stubbed response instead.
29
+ #
30
+ # @example Log requests and pass through
31
+ # driver.intercept do |request|
32
+ # puts "#{request.method} #{request.url}"
33
+ # request.continue
34
+ # end
35
+ #
36
+ # @example Stub response for image requests
37
+ # driver.intercept do |request|
38
+ # if request.url.match?(/\.png$/)
39
+ # request.respond(body: File.read('myfile.png'))
40
+ # else
41
+ # request.continue
42
+ # end
43
+ # end
44
+ #
45
+ # @param [#call] block which is called when request is interecepted
46
+ # @yieldparam [DevTools::Request]
47
+ #
48
+
49
+ def intercept
50
+ devtools.network.set_cache_disabled(cache_disabled: true)
51
+ devtools.fetch.on(:request_paused) do |params|
52
+ request = DevTools::Request.new(
53
+ devtools: devtools,
54
+ id: params['requestId'],
55
+ url: params.dig('request', 'url'),
56
+ method: params.dig('request', 'method'),
57
+ headers: params.dig('request', 'headers')
58
+ )
59
+ yield request
60
+ end
61
+ devtools.fetch.enable
62
+ end
63
+
64
+ end # HasNetworkInterception
65
+ end # DriverExtensions
66
+ end # WebDriver
67
+ end # Selenium
@@ -92,13 +92,18 @@ module Selenium
92
92
  end
93
93
 
94
94
  #
95
- # Get the value of a the given attribute of the element. Will return the current value, even if
96
- # this has been modified after the page has been loaded. More exactly, this method will return
97
- # the value of the given attribute, unless that attribute is not present, in which case the
98
- # value of the property with the same name is returned. If neither value is set, nil is
99
- # returned. The "style" attribute is converted as best can be to a text representation with a
100
- # trailing semi-colon. The following are deemed to be "boolean" attributes, and will
101
- # return either "true" or "false":
95
+ # This method attempts to provide the most likely desired current value for the attribute
96
+ # of the element, even when that desired value is actually a JavaScript property.
97
+ # It is implemented with a custom JavaScript atom. To obtain the exact value of the attribute or property,
98
+ # use #dom_attribute or #property methods respectively.
99
+ #
100
+ # More exactly, this method will return the value of the property with the given name,
101
+ # if it exists. If it does not, then the value of the attribute with the given name is returned.
102
+ # If neither exists, null is returned.
103
+ #
104
+ # The "style" attribute is converted as best can be to a text representation with a trailing semi-colon.
105
+ #
106
+ # The following are deemed to be "boolean" attributes, and will return either "true" or "false":
102
107
  #
103
108
  # async, autofocus, autoplay, checked, compact, complete, controls, declare, defaultchecked,
104
109
  # defaultselected, defer, disabled, draggable, ended, formnovalidate, hidden, indeterminate,
@@ -106,22 +111,46 @@ module Selenium
106
111
  # nowrap, open, paused, pubdate, readonly, required, reversed, scoped, seamless, seeking,
107
112
  # selected, spellcheck, truespeed, willvalidate
108
113
  #
109
- # Finally, the following commonly mis-capitalized attribute/property names are evaluated as
110
- # expected:
114
+ # Finally, the following commonly mis-capitalized attribute/property names are evaluated as expected:
111
115
  #
112
- # class, readonly
116
+ # When the value of "class" is requested, the "className" property is returned.
117
+ # When the value of "readonly" is requested, the "readOnly" property is returned.
113
118
  #
114
119
  # @param [String] name attribute name
115
120
  # @return [String, nil] attribute value
116
121
  #
122
+ # @see #dom_attribute
123
+ # @see #property
124
+ #
117
125
 
118
126
  def attribute(name)
119
127
  bridge.element_attribute self, name
120
128
  end
121
129
 
122
130
  #
123
- # Get the value of a the given property with the same name of the element. If the value is not
124
- # set, nil is returned.
131
+ # Gets the value of a declared HTML attribute of this element.
132
+ #
133
+ # As opposed to the #attribute method, this method
134
+ # only returns attributes declared in the element's HTML markup.
135
+ #
136
+ # If the attribute is not set, nil is returned.
137
+ #
138
+ # @param [String] name attribute name
139
+ # @return [String, nil] attribute value
140
+ #
141
+ # @see #attribute
142
+ # @see #property
143
+ #
144
+
145
+ def dom_attribute(name)
146
+ bridge.element_dom_attribute self, name
147
+ end
148
+
149
+ #
150
+ # Gets the value of a JavaScript property of this element
151
+ # This will return the current value,
152
+ # even if this has been modified after the page has been loaded.
153
+ # If the value is not set, nil is returned.
125
154
  #
126
155
  # @param [String] name property name
127
156
  # @return [String, nil] property value
@@ -26,7 +26,10 @@ module Selenium
26
26
  attr_reader :source
27
27
 
28
28
  def initialize(source)
29
- raise TypeError, "#{source.type} is not a valid input type" unless Interactions::SOURCE_TYPES.include? source.type
29
+ unless Interactions::SOURCE_TYPES.include? source.type
30
+ raise TypeError,
31
+ "#{source.type} is not a valid input type"
32
+ end
30
33
 
31
34
  @source = source
32
35
  end
@@ -108,10 +108,11 @@ module Selenium
108
108
  #
109
109
  # @param [String] old
110
110
  # @param [String, nil] new
111
- # @param [Symbol, Array<Sybmol>] id
111
+ # @param [Symbol, Array<Symbol>] id
112
+ # @param [String] reference
112
113
  # @yield appends additional message to end of provided template
113
114
  #
114
- def deprecate(old, new = nil, id: [], &block)
115
+ def deprecate(old, new = nil, id: [], reference: '', &block)
115
116
  id = Array(id)
116
117
  return if @ignored.include?(:deprecations) || (@ignored & id).any?
117
118
 
@@ -123,6 +124,8 @@ module Selenium
123
124
  else
124
125
  ' and will be removed in a future release.'
125
126
  end
127
+ message << " See explanation for this deprecation: #{reference}." unless reference.empty?
128
+
126
129
  warn message, &block
127
130
  end
128
131
 
@@ -23,16 +23,42 @@ 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
- def self.set_capabilities
27
- (W3C_OPTIONS + self::CAPABILITIES.keys).each do |key|
28
- next if method_defined? key
26
+ class << self
27
+ attr_reader :driver_path
29
28
 
30
- define_method key do
31
- @options[key]
32
- end
29
+ def chrome(**opts)
30
+ Chrome::Options.new(**opts)
31
+ end
32
+
33
+ def firefox(**opts)
34
+ Firefox::Options.new(**opts)
35
+ end
36
+
37
+ def ie(**opts)
38
+ IE::Options.new(**opts)
39
+ end
40
+ alias_method :internet_explorer, :ie
41
+
42
+ def edge(**opts)
43
+ Edge::Options.new(**opts)
44
+ end
45
+ alias_method :microsoftedge, :edge
33
46
 
34
- define_method "#{key}=" do |value|
35
- @options[key] = value
47
+ def safari(**opts)
48
+ Safari::Options.new(**opts)
49
+ end
50
+
51
+ def set_capabilities
52
+ (W3C_OPTIONS + self::CAPABILITIES.keys).each do |key|
53
+ next if method_defined? key
54
+
55
+ define_method key do
56
+ @options[key]
57
+ end
58
+
59
+ define_method "#{key}=" do |value|
60
+ @options[key] = value
61
+ end
36
62
  end
37
63
  end
38
64
  end
@@ -68,6 +94,14 @@ module Selenium
68
94
  @options[name] = value
69
95
  end
70
96
 
97
+ def ==(other)
98
+ return false unless other.is_a? self.class
99
+
100
+ as_json == other.as_json
101
+ end
102
+
103
+ alias_method :eql?, :==
104
+
71
105
  #
72
106
  # @api private
73
107
  #
@@ -127,7 +127,10 @@ module Selenium
127
127
  end
128
128
 
129
129
  def type=(type)
130
- raise ArgumentError, "invalid proxy type: #{type.inspect}, expected one of #{TYPES.keys.inspect}" unless TYPES.key? type
130
+ unless TYPES.key? type
131
+ raise ArgumentError,
132
+ "invalid proxy type: #{type.inspect}, expected one of #{TYPES.keys.inspect}"
133
+ end
131
134
 
132
135
  if defined?(@type) && type != @type
133
136
  raise ArgumentError, "incompatible proxy type #{type.inspect} (already set to #{@type.inspect})"