selenium-webdriver 4.5.0 → 4.9.0

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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +117 -1
  3. data/LICENSE +1 -1
  4. data/NOTICE +1 -1
  5. data/bin/linux/selenium-manager +0 -0
  6. data/bin/macos/selenium-manager +0 -0
  7. data/bin/windows/selenium-manager.exe +0 -0
  8. data/lib/selenium/server.rb +6 -8
  9. data/lib/selenium/webdriver/atoms/findElements.js +0 -0
  10. data/lib/selenium/webdriver/atoms/getAttribute.js +0 -0
  11. data/lib/selenium/webdriver/atoms/isDisplayed.js +0 -0
  12. data/lib/selenium/webdriver/atoms/mutationListener.js +0 -0
  13. data/lib/selenium/webdriver/atoms.rb +2 -3
  14. data/lib/selenium/webdriver/bidi/browsing_context.rb +88 -0
  15. data/lib/selenium/webdriver/bidi/browsing_context_info.rb +35 -0
  16. data/lib/selenium/webdriver/bidi/log/base_log_entry.rb +35 -0
  17. data/lib/selenium/webdriver/bidi/log/console_log_entry.rb +35 -0
  18. data/lib/selenium/webdriver/bidi/log/filter_by.rb +40 -0
  19. data/lib/selenium/webdriver/bidi/log/generic_log_entry.rb +33 -0
  20. data/lib/selenium/webdriver/bidi/log/javascript_log_entry.rb +33 -0
  21. data/lib/selenium/webdriver/bidi/log_inspector.rb +143 -0
  22. data/lib/selenium/webdriver/bidi/navigate_result.rb +33 -0
  23. data/lib/selenium/webdriver/bidi/session.rb +13 -0
  24. data/lib/selenium/webdriver/bidi.rb +3 -2
  25. data/lib/selenium/webdriver/chrome/driver.rb +9 -30
  26. data/lib/selenium/webdriver/chrome/features.rb +5 -72
  27. data/lib/selenium/webdriver/chrome/options.rb +3 -237
  28. data/lib/selenium/webdriver/chrome/profile.rb +3 -83
  29. data/lib/selenium/webdriver/chrome/service.rb +3 -23
  30. data/lib/selenium/webdriver/chromium/driver.rb +61 -0
  31. data/lib/selenium/webdriver/chromium/features.rb +103 -0
  32. data/lib/selenium/webdriver/chromium/options.rb +261 -0
  33. data/lib/selenium/webdriver/chromium/profile.rb +113 -0
  34. data/lib/selenium/webdriver/chromium/service.rb +42 -0
  35. data/lib/selenium/webdriver/chromium.rb +32 -0
  36. data/lib/selenium/webdriver/common/action_builder.rb +11 -48
  37. data/lib/selenium/webdriver/common/child_process.rb +124 -0
  38. data/lib/selenium/webdriver/common/driver.rb +21 -26
  39. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +0 -2
  40. data/lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb +0 -1
  41. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +0 -2
  42. data/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +0 -2
  43. data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +0 -2
  44. data/lib/selenium/webdriver/common/driver_extensions/has_bidi.rb +0 -2
  45. data/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +0 -1
  46. data/lib/selenium/webdriver/common/driver_extensions/has_cdp.rb +0 -2
  47. data/lib/selenium/webdriver/common/driver_extensions/has_context.rb +0 -2
  48. data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +0 -2
  49. data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +0 -2
  50. data/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +0 -2
  51. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +1 -2
  52. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +0 -1
  53. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +0 -2
  54. data/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +0 -2
  55. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +0 -2
  56. data/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +0 -2
  57. data/lib/selenium/webdriver/common/driver_finder.rb +43 -0
  58. data/lib/selenium/webdriver/common/element.rb +6 -6
  59. data/lib/selenium/webdriver/common/error.rb +0 -2
  60. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +2 -2
  61. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +3 -3
  62. data/lib/selenium/webdriver/common/interactions/pointer_move.rb +2 -2
  63. data/lib/selenium/webdriver/common/interactions/scroll.rb +7 -5
  64. data/lib/selenium/webdriver/common/local_driver.rb +55 -0
  65. data/lib/selenium/webdriver/common/logger.rb +10 -2
  66. data/lib/selenium/webdriver/common/options.rb +30 -8
  67. data/lib/selenium/webdriver/common/platform.rb +4 -0
  68. data/lib/selenium/webdriver/common/profile_helper.rb +1 -1
  69. data/lib/selenium/webdriver/common/proxy.rb +1 -1
  70. data/lib/selenium/webdriver/common/selenium_manager.rb +108 -0
  71. data/lib/selenium/webdriver/common/service.rb +11 -22
  72. data/lib/selenium/webdriver/common/service_manager.rb +3 -11
  73. data/lib/selenium/webdriver/common/shadow_root.rb +1 -2
  74. data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
  75. data/lib/selenium/webdriver/common/takes_screenshot.rb +2 -3
  76. data/lib/selenium/webdriver/common/target_locator.rb +2 -3
  77. data/lib/selenium/webdriver/common/timeouts.rb +2 -2
  78. data/lib/selenium/webdriver/common/virtual_authenticator/credential.rb +8 -6
  79. data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator.rb +0 -1
  80. data/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator_options.rb +16 -16
  81. data/lib/selenium/webdriver/common/websocket_connection.rb +10 -2
  82. data/lib/selenium/webdriver/common.rb +4 -0
  83. data/lib/selenium/webdriver/devtools/console_event.rb +0 -2
  84. data/lib/selenium/webdriver/devtools/exception_event.rb +0 -2
  85. data/lib/selenium/webdriver/devtools/mutation_event.rb +0 -2
  86. data/lib/selenium/webdriver/devtools/network_interceptor.rb +4 -7
  87. data/lib/selenium/webdriver/devtools/pinned_script.rb +0 -2
  88. data/lib/selenium/webdriver/devtools/request.rb +0 -2
  89. data/lib/selenium/webdriver/devtools/response.rb +0 -2
  90. data/lib/selenium/webdriver/devtools.rb +11 -2
  91. data/lib/selenium/webdriver/edge/driver.rb +9 -3
  92. data/lib/selenium/webdriver/edge/features.rb +3 -4
  93. data/lib/selenium/webdriver/edge/options.rb +3 -5
  94. data/lib/selenium/webdriver/edge/profile.rb +2 -2
  95. data/lib/selenium/webdriver/edge/service.rb +2 -6
  96. data/lib/selenium/webdriver/firefox/driver.rb +8 -2
  97. data/lib/selenium/webdriver/firefox/features.rb +0 -1
  98. data/lib/selenium/webdriver/firefox/options.rb +4 -1
  99. data/lib/selenium/webdriver/firefox/profile.rb +6 -6
  100. data/lib/selenium/webdriver/firefox/service.rb +0 -6
  101. data/lib/selenium/webdriver/ie/driver.rb +7 -1
  102. data/lib/selenium/webdriver/ie/service.rb +1 -7
  103. data/lib/selenium/webdriver/remote/{commands.rb → bridge/commands.rb} +0 -2
  104. data/lib/selenium/webdriver/remote/bridge.rb +9 -15
  105. data/lib/selenium/webdriver/remote/capabilities.rb +34 -12
  106. data/lib/selenium/webdriver/remote/driver.rb +19 -13
  107. data/lib/selenium/webdriver/remote/http/curb.rb +0 -2
  108. data/lib/selenium/webdriver/remote/http/default.rb +1 -0
  109. data/lib/selenium/webdriver/remote/response.rb +0 -1
  110. data/lib/selenium/webdriver/remote.rb +0 -1
  111. data/lib/selenium/webdriver/safari/driver.rb +7 -1
  112. data/lib/selenium/webdriver/safari/features.rb +0 -2
  113. data/lib/selenium/webdriver/safari/options.rb +5 -1
  114. data/lib/selenium/webdriver/safari/service.rb +0 -4
  115. data/lib/selenium/webdriver/safari.rb +1 -1
  116. data/lib/selenium/webdriver/support/color.rb +15 -15
  117. data/lib/selenium/webdriver/support/guards/guard.rb +0 -2
  118. data/lib/selenium/webdriver/support/guards/guard_condition.rb +0 -2
  119. data/lib/selenium/webdriver/support/relative_locator.rb +0 -1
  120. data/lib/selenium/webdriver/support/select.rb +2 -5
  121. data/lib/selenium/webdriver/version.rb +1 -1
  122. data/lib/selenium/webdriver.rb +3 -4
  123. data/selenium-webdriver.gemspec +8 -9
  124. metadata +33 -74
  125. data/lib/selenium/webdriver/support/cdp/domain.rb.erb +0 -63
  126. data/lib/selenium/webdriver/support/cdp_client_generator.rb +0 -108
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d753308296c6105d6bdbe84f0bbff8f61064fcf44c40694fbe9c4d8758ff7d21
4
- data.tar.gz: 6b277eedd4f26e9baf17b95a7034b7940f4c41c041ba646edda4247c7edaf57c
3
+ metadata.gz: f1ae360596be57c29db02808a7dae16c36062801e7639e83b366a54cdba5e3b2
4
+ data.tar.gz: f31169f7cfec055abb7a2f3595eee8e453acf316651a829af5f254a0f824cf9e
5
5
  SHA512:
6
- metadata.gz: 42dbe1ef868e3be3fddac2add30d0b8bf17a6ae2febff15a6e3d0ce79c3f46122d9e3616a1e1e8e370744e008c4c06ad531b382410753ab6daa3d147c66a8552
7
- data.tar.gz: 8e841646f3a38364c55fb5020e0eb30a9076f3fb5ace99e42175f9f07d1634c59ad52dcf84d01530fbc43282d5e7b48fc9058edc905d0eac10cf98babb2ed029
6
+ metadata.gz: 675dad14a433939c81dabbb0276b1c5a97d95f0b1451ca48aa0e908c2cc0658f1d90e3970be4e3f62e65ff5eaef5cf391b5d646f50413ca46ea2f24de821fb5a
7
+ data.tar.gz: dd9d26b855e7b1f01f667d113181f6e7b35367ee74459b693a3c5872cc92a9e58f9d2d849de3aaff9738e3e77cb3f3117617219b4f76e2fda2f66bc75279ee8d
data/CHANGES CHANGED
@@ -1,4 +1,120 @@
1
- 4.5.0 (Unreleased)
1
+ 4.9.0 (2023-04-21)
2
+ =========================
3
+ Ruby:
4
+ * Fix devtools version fallback (#11869)
5
+ * Fix bug in selenium manager escaping back slashes in Windows (#11884)
6
+
7
+ BiDi:
8
+ * Released selenium-devtools 0.112.0 (supports CDP v85, v110, v111, v112)
9
+
10
+ 4.8.6 (2023-03-29)
11
+ =========================
12
+ Ruby:
13
+ * Properly escape arguments passed to Selenium Manager
14
+
15
+ 4.8.5 (2023-03-28)
16
+ =========================
17
+ Ruby:
18
+ * Wrapping browser name in quotes when calling Selenium Manager
19
+
20
+ 4.8.4 (2023-03-28)
21
+ =========================
22
+ Ruby:
23
+ * Update the selenium-manager versions to fix an IE naming issue (#11828)
24
+
25
+ 4.8.3 (2023-03-26)
26
+ =========================
27
+ Ruby:
28
+ * Still need to use driver finder when using capabilities parameter
29
+ * Accommodate Driver Finder being sent something other than an Options instance
30
+
31
+ 4.8.2 (2023-03-24)
32
+ =========================
33
+ Ruby:
34
+ * Ruby driver finder (#11523)
35
+ * Using json output with Selenium Manager
36
+
37
+ BiDi:
38
+ * Released selenium-devtools 0.111.0 (supports CDP v85, v109, v110, v111)
39
+
40
+ 4.8.1 (2023-02-17)
41
+ =========================
42
+ Ruby:
43
+ * Fix autoload of WebDriver::Remote::Bridge::COMMANDS
44
+ * Subclass is setting value before the superclass is setting it to nil
45
+ * Updating Selenium Manager binaries for 4.8.1 release
46
+
47
+ BiDi:
48
+ * Released selenium-devtools 0.110.0 (supports CDP v85, v108, v109, v110)
49
+ * Close BiDi session on closing the last top-level browsing context
50
+ * Add filtering capability to LogInspector
51
+
52
+ 4.8.0 (2023-01-23)
53
+ =========================
54
+ Ruby:
55
+ * Allow updating instance variables on service classes
56
+ * Deprecate extract_service_args processing in service classes
57
+ * Fix bug preventing sending nil to #send_keys with Remote Driver
58
+ * Fix bug with IE specific methods not available to IE Driver
59
+ * Created Chromium superclass for Chrome and Edge
60
+ * Deprecated platform and version setters/getters in Capabilities class
61
+ * Revamped driver constructor logic
62
+ * Fix bug preventing using Safari Technology Preview when using SafariOptions
63
+ * Fix bug preventing more than one driver type to access Selenium Manager
64
+ * Defaults to using Options instead of Capabilities
65
+ * Make Options classes more strict for allowed arguments and types
66
+ * Removed previously deprecated actions class parameters
67
+ * Removed Location struct
68
+ * Add comment with name of large JS executions (#11038)
69
+ * update logger with link on how to use it (#11478)
70
+ * Deprecate #add_option for Option classes in favor of constructor and attr_accessor
71
+ * Deprecate all unrecognized capabilities for Options classes
72
+ * Deprecate support for :capabilities for local drivers
73
+ * Deprecate browser class methods for Capabilities
74
+ * Deprecate #headless! for Chrome and Firefox
75
+
76
+ BiDi:
77
+ * Released selenium-devtools 0.109.0 (supports CDP v85, v107, v108, v109)
78
+ * Add LogInspector (#11368)
79
+ * Add Browsing context commands (#11446)
80
+
81
+ 4.7.1 (2022-12-02)
82
+ =========================
83
+ Ruby:
84
+ * Fix bug preventing selenium manager from using Internet Explorer
85
+
86
+ 4.7.0 (2022-12-01)
87
+ =========================
88
+ BiDi:
89
+ * Released selenium-devtools 0.108.0 (supports CDP v85, v106, v107, v108)
90
+ * Fix bug with socket stability
91
+
92
+ Ruby:
93
+ * Remove dependency on ChildProcess gem in favor of native Process.spawn (#11251)
94
+ * Add support for Selenium Manager to work with IE Driver
95
+ * Improve error handling for Selenium Manager
96
+
97
+ Safari:
98
+ * Fix bug preventing Safari Options from being used with Safari Technology Preview
99
+
100
+ 4.6.1 (2022-11-04)
101
+ =========================
102
+ Ruby:
103
+ * fix bug preventing selenium-manager from being executable by default
104
+
105
+ 4.6.0 (2022-11-04)
106
+ =========================
107
+ BiDi:
108
+ * Released selenium-devtools 0.107.0 (supports CDP v85, v105, v106, v107)
109
+
110
+ Ruby:
111
+ * firefox scroll by amount is only failing on mac
112
+ * add initial support for selenium manager
113
+ * Revert "[rb] do not allow Select class to work with disabled selects"
114
+ * Make sure selenium-manager is packed into gem
115
+ * Fix platform list in #scroll_by guard
116
+
117
+ 4.5.0 (2022-09-28)
2
118
  =========================
3
119
 
4
120
  BiDi:
data/LICENSE CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2022 Software Freedom Conservancy (SFC)
190
+ Copyright 2023 Software Freedom Conservancy (SFC)
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
data/NOTICE CHANGED
@@ -1,2 +1,2 @@
1
- Copyright 2011-2022 Software Freedom Conservancy
1
+ Copyright 2011-2023 Software Freedom Conservancy
2
2
  Copyright 2004-2011 Selenium committers
Binary file
Binary file
Binary file
@@ -17,7 +17,7 @@
17
17
  # specific language governing permissions and limitations
18
18
  # under the License.
19
19
 
20
- require 'childprocess'
20
+ require 'selenium/webdriver/common/child_process'
21
21
  require 'selenium/webdriver/common/socket_poller'
22
22
  require 'net/http'
23
23
 
@@ -210,6 +210,7 @@ module Selenium
210
210
  begin
211
211
  Net::HTTP.get(@host, '/selenium-server/driver/?cmd=shutDownSeleniumServer', @port)
212
212
  rescue Errno::ECONNREFUSED
213
+ nil
213
214
  end
214
215
 
215
216
  stop_process if @process
@@ -237,7 +238,7 @@ module Selenium
237
238
 
238
239
  begin
239
240
  @process.poll_for_exit(5)
240
- rescue ChildProcess::TimeoutError
241
+ rescue WebDriver::ChildProcess::TimeoutError
241
242
  @process.stop
242
243
  end
243
244
  rescue Errno::ECHILD
@@ -252,16 +253,13 @@ module Selenium
252
253
  properties = @additional_args.dup - @additional_args.delete_if { |arg| arg[/^-D/] }
253
254
  args = ['-jar', @jar, @role, '--port', @port.to_s]
254
255
  server_command = ['java'] + properties + args + @additional_args
255
- cp = ChildProcess.build(*server_command)
256
+ cp = WebDriver::ChildProcess.build(*server_command)
256
257
  WebDriver.logger.debug("Executing Process #{server_command}")
257
258
 
258
- io = cp.io
259
-
260
259
  if @log.is_a?(String)
261
- @log_file = File.open(@log, 'w')
262
- io.stdout = io.stderr = @log_file
260
+ cp.io = @log
263
261
  elsif @log
264
- io.inherit!
262
+ cp.io = :out
265
263
  end
266
264
 
267
265
  cp.detach = @background
File without changes
File without changes
File without changes
File without changes
@@ -20,7 +20,6 @@
20
20
  module Selenium
21
21
  module WebDriver
22
22
  module Atoms
23
-
24
23
  private
25
24
 
26
25
  def read_atom(function)
@@ -28,10 +27,10 @@ module Selenium
28
27
  end
29
28
 
30
29
  def execute_atom(function_name, *arguments)
31
- script = format("return (%<atom>s).apply(null, arguments)", atom: read_atom(function_name))
30
+ script = format("/* #{function_name} */return (%<atom>s).apply(null, arguments)",
31
+ atom: read_atom(function_name))
32
32
  execute_script(script, *arguments)
33
33
  end
34
-
35
34
  end # Atoms
36
35
  end # WebDriver
37
36
  end # Selenium
@@ -0,0 +1,88 @@
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_relative 'navigate_result'
21
+ require_relative 'browsing_context_info'
22
+
23
+ module Selenium
24
+ module WebDriver
25
+ class BiDi
26
+ class BrowsingContext
27
+ attr_accessor :id
28
+
29
+ READINESS_STATE = {
30
+ none: 'none',
31
+ interactive: 'interactive',
32
+ complete: 'complete'
33
+ }.freeze
34
+
35
+ def initialize(driver:, browsing_context_id: nil, type: nil, reference_context: nil)
36
+ unless driver.capabilities.web_socket_url
37
+ raise Error::WebDriverError,
38
+ 'WebDriver instance must support BiDi protocol'
39
+ end
40
+
41
+ unless type.nil? || %i[window tab].include?(type)
42
+ raise ArgumentError,
43
+ "Valid types are :window & :tab. Received: #{type.inspect}"
44
+ end
45
+
46
+ @bidi = driver.bidi
47
+ @id = browsing_context_id.nil? ? create(type, reference_context)['context'] : browsing_context_id
48
+ end
49
+
50
+ def navigate(url:, readiness_state: nil)
51
+ unless readiness_state.nil? || READINESS_STATE.key?(readiness_state)
52
+ raise ArgumentError,
53
+ "Valid readiness states are :none, :interactive & :complete. Received: #{readiness_state.inspect}"
54
+ end
55
+
56
+ navigate_result = @bidi.send_cmd('browsingContext.navigate', context: @id, url: url,
57
+ wait: READINESS_STATE[readiness_state])
58
+
59
+ NavigateResult.new(
60
+ url: navigate_result['url'],
61
+ navigation_id: navigate_result['navigation']
62
+ )
63
+ end
64
+
65
+ def get_tree(max_depth: nil)
66
+ result = @bidi.send_cmd('browsingContext.getTree', root: @id, maxDepth: max_depth).dig('contexts', 0)
67
+
68
+ BrowsingContextInfo.new(
69
+ id: result['context'],
70
+ url: result['url'],
71
+ children: result['children'],
72
+ parent_context: result['parent']
73
+ )
74
+ end
75
+
76
+ def close
77
+ @bidi.send_cmd('browsingContext.close', context: @id)
78
+ end
79
+
80
+ private
81
+
82
+ def create(type, reference_context)
83
+ @bidi.send_cmd('browsingContext.create', type: type.to_s, referenceContext: reference_context)
84
+ end
85
+ end # BrowsingContext
86
+ end # BiDi
87
+ end # WebDriver
88
+ end # Selenium
@@ -0,0 +1,35 @@
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
+ class BiDi
23
+ class BrowsingContextInfo
24
+ attr_accessor :id, :url, :children, :parent_browsing_context
25
+
26
+ def initialize(id:, url:, children:, parent_context:)
27
+ @id = id
28
+ @url = url
29
+ @children = children
30
+ @parent_browsing_context = parent_context
31
+ end
32
+ end # BrowsingContextInfo
33
+ end # BiDi
34
+ end # WebDriver
35
+ end # Selenium
@@ -0,0 +1,35 @@
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
+ class BiDi
23
+ class BaseLogEntry
24
+ attr_accessor :level, :text, :timestamp, :stack_trace
25
+
26
+ def initialize(level:, text:, timestamp:, stack_trace:)
27
+ @level = level
28
+ @text = text
29
+ @timestamp = timestamp
30
+ @stack_trace = stack_trace
31
+ end
32
+ end # BaseLogEntry
33
+ end # BiDi
34
+ end # WebDriver
35
+ end # Selenium
@@ -0,0 +1,35 @@
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
+ class BiDi
23
+ class ConsoleLogEntry < GenericLogEntry
24
+ attr_accessor :method, :realm, :args
25
+
26
+ def initialize(method:, realm:, args:, **opts)
27
+ super(**opts)
28
+ @method = method
29
+ @realm = realm
30
+ @args = args
31
+ end
32
+ end # ConsoleLogEntry
33
+ end # BiDi
34
+ end # WebDriver
35
+ end # Selenium
@@ -0,0 +1,40 @@
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
+ class BiDi
23
+ class FilterBy
24
+ attr_accessor :level
25
+
26
+ def initialize(level)
27
+ @level = level
28
+ end
29
+
30
+ def self.log_level(level = nil)
31
+ unless %w[debug error info warning].include?(level)
32
+ raise Error::WebDriverError,
33
+ "Valid log levels are 'debug', 'error', 'info' and 'warning'. Received: #{level}"
34
+ end
35
+ FilterBy.new(level)
36
+ end
37
+ end # FilterBy
38
+ end # BiDi
39
+ end # WebDriver
40
+ end # Selenium
@@ -0,0 +1,33 @@
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
+ class BiDi
23
+ class GenericLogEntry < BaseLogEntry
24
+ attr_accessor :type
25
+
26
+ def initialize(level:, text:, timestamp:, type:, stack_trace:)
27
+ super(level: level, text: text, timestamp: timestamp, stack_trace: stack_trace)
28
+ @type = type
29
+ end
30
+ end # GenericLogEntry
31
+ end # BiDi
32
+ end # WebDriver
33
+ end # Selenium
@@ -0,0 +1,33 @@
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
+ class BiDi
23
+ class JavascriptLogEntry < GenericLogEntry
24
+ attr_accessor :type
25
+
26
+ def initialize(level:, text:, timestamp:, type:, stack_trace:)
27
+ super(level: level, text: text, timestamp: timestamp, type: type, stack_trace: stack_trace)
28
+ @type = 'javascript'
29
+ end
30
+ end # JavascriptLogEntry
31
+ end # BiDi
32
+ end # WebDriver
33
+ end # Selenium
@@ -0,0 +1,143 @@
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
+ # This file is automatically generated. Any changes will be lost!
21
+
22
+ require_relative 'log/base_log_entry'
23
+ require_relative 'log/generic_log_entry'
24
+ require_relative 'log/console_log_entry'
25
+ require_relative 'log/javascript_log_entry'
26
+ require_relative 'log/filter_by'
27
+
28
+ module Selenium
29
+ module WebDriver
30
+ class BiDi
31
+ class LogInspector
32
+ EVENTS = {
33
+ entry_added: 'entryAdded'
34
+ }.freeze
35
+
36
+ LOG_LEVEL = {
37
+ DEBUG: 'debug',
38
+ ERROR: 'error',
39
+ INFO: 'info',
40
+ WARNING: 'warning'
41
+ }.freeze
42
+
43
+ def initialize(driver, browsing_context_ids = nil)
44
+ unless driver.capabilities.web_socket_url
45
+ raise Error::WebDriverError,
46
+ 'WebDriver instance must support BiDi protocol'
47
+ end
48
+
49
+ @bidi = driver.bidi
50
+ @bidi.session.subscribe('log.entryAdded', browsing_context_ids)
51
+ end
52
+
53
+ def on_console_entry(filter_by = nil, &block)
54
+ check_valid_filter(filter_by)
55
+
56
+ on_log do |params|
57
+ type = params['type']
58
+ console_log_events(params, filter_by, &block) if type.eql?('console')
59
+ end
60
+ end
61
+
62
+ def on_javascript_log(filter_by = nil, &block)
63
+ check_valid_filter(filter_by)
64
+
65
+ on_log do |params|
66
+ type = params['type']
67
+ javascript_log_events(params, filter_by, &block) if type.eql?('javascript')
68
+ end
69
+ end
70
+
71
+ def on_javascript_exception(&block)
72
+ on_log do |params|
73
+ type = params['type']
74
+ javascript_log_events(params, FilterBy.log_level('error'), &block) if type.eql?('javascript')
75
+ end
76
+ end
77
+
78
+ def on_log(filter_by = nil, &block)
79
+ unless filter_by.nil?
80
+ check_valid_filter(filter_by)
81
+
82
+ on(:entry_added) do |params|
83
+ yield(params) if params['level'] == filter_by.level
84
+ end
85
+ return
86
+ end
87
+
88
+ on(:entry_added, &block)
89
+ end
90
+
91
+ private
92
+
93
+ def on(event, &block)
94
+ event = EVENTS[event] if event.is_a?(Symbol)
95
+ @bidi.callbacks["log.#{event}"] << block
96
+ end
97
+
98
+ def check_valid_filter(filter_by)
99
+ return if filter_by.nil? || filter_by.instance_of?(FilterBy)
100
+
101
+ raise "Pass valid FilterBy object. Received: #{filter_by.inspect}"
102
+ end
103
+
104
+ def console_log_events(params, filter_by)
105
+ event = ConsoleLogEntry.new(
106
+ level: params['level'],
107
+ text: params['text'],
108
+ timestamp: params['timestamp'],
109
+ type: params['type'],
110
+ method: params['method'],
111
+ realm: params['realm'],
112
+ args: params['args'],
113
+ stack_trace: params['stackTrace']
114
+ )
115
+
116
+ unless filter_by.nil?
117
+ yield(event) if params['level'] == filter_by.level
118
+ return
119
+ end
120
+
121
+ yield(event)
122
+ end
123
+
124
+ def javascript_log_events(params, filter_by)
125
+ event = JavascriptLogEntry.new(
126
+ level: params['level'],
127
+ text: params['text'],
128
+ timestamp: params['timestamp'],
129
+ type: params['type'],
130
+ stack_trace: params['stackTrace']
131
+ )
132
+
133
+ unless filter_by.nil?
134
+ yield(event) if params['level'] == filter_by.level
135
+ return
136
+ end
137
+
138
+ yield(event)
139
+ end
140
+ end # LogInspector
141
+ end # Bidi
142
+ end # WebDriver
143
+ end # Selenium