puppeteer-ruby 0.51.0 → 0.52.1

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/docs/api_coverage.md +34 -5
  3. data/lib/puppeteer/browser.rb +75 -0
  4. data/lib/puppeteer/browser_connector.rb +43 -6
  5. data/lib/puppeteer/chrome_target_manager.rb +49 -2
  6. data/lib/puppeteer/chrome_user_data_dir.rb +89 -0
  7. data/lib/puppeteer/debug_print.rb +9 -13
  8. data/lib/puppeteer/element_handle.rb +16 -0
  9. data/lib/puppeteer/events.rb +3 -0
  10. data/lib/puppeteer/execution_context.rb +37 -15
  11. data/lib/puppeteer/extension.rb +70 -0
  12. data/lib/puppeteer/frame.rb +8 -1
  13. data/lib/puppeteer/frame_manager.rb +62 -2
  14. data/lib/puppeteer/isolated_world.rb +22 -1
  15. data/lib/puppeteer/issue.rb +16 -0
  16. data/lib/puppeteer/js_coverage.rb +14 -1
  17. data/lib/puppeteer/launcher/browser_options.rb +6 -1
  18. data/lib/puppeteer/launcher/chrome.rb +16 -1
  19. data/lib/puppeteer/launcher/chrome_arg_options.rb +2 -1
  20. data/lib/puppeteer/network_manager.rb +16 -16
  21. data/lib/puppeteer/page.rb +36 -4
  22. data/lib/puppeteer/puppeteer.rb +22 -2
  23. data/lib/puppeteer/remote_object.rb +2 -1
  24. data/lib/puppeteer/target.rb +17 -0
  25. data/lib/puppeteer/version.rb +2 -2
  26. data/lib/puppeteer.rb +2 -0
  27. data/sig/_supplementary.rbs +5 -0
  28. data/sig/puppeteer/browser.rbs +29 -2
  29. data/sig/puppeteer/chrome_user_data_dir.rbs +30 -0
  30. data/sig/puppeteer/element_handle.rbs +5 -0
  31. data/sig/puppeteer/execution_context.rbs +4 -0
  32. data/sig/puppeteer/extension.rbs +37 -0
  33. data/sig/puppeteer/frame.rbs +5 -0
  34. data/sig/puppeteer/issue.rbs +13 -0
  35. data/sig/puppeteer/page.rbs +14 -0
  36. data/sig/puppeteer/puppeteer.rbs +8 -2
  37. data/sig/puppeteer/remote_object.rbs +2 -0
  38. metadata +8 -2
data/lib/puppeteer.rb CHANGED
@@ -23,6 +23,7 @@ require 'puppeteer/env'
23
23
  require 'puppeteer/events'
24
24
  require 'puppeteer/errors'
25
25
  require 'puppeteer/geolocation'
26
+ require 'puppeteer/issue'
26
27
  require 'puppeteer/viewport'
27
28
 
28
29
  # Modules
@@ -49,6 +50,7 @@ require 'puppeteer/custom_query_handler'
49
50
  require 'puppeteer/devices'
50
51
  require 'puppeteer/dialog'
51
52
  require 'puppeteer/emulation_manager'
53
+ require 'puppeteer/extension'
52
54
  require 'puppeteer/exception_details'
53
55
  require 'puppeteer/executable_path_finder'
54
56
  require 'puppeteer/execution_context'
@@ -189,6 +189,10 @@ class Puppeteer::FrameManager
189
189
  def remove_frame_recursively: (Puppeteer::Frame frame) -> void
190
190
  def referrer_policy_to_protocol: (String? referrer_policy) -> String?
191
191
  def assert_no_legacy_navigation_options: (wait_until: (String | Array[String] | nil)) -> void
192
+ def extension_origin?: (untyped origin) -> bool
193
+ def extract_extension_id: (untyped origin) -> String?
194
+ def maybe_setup_block_list: (Puppeteer::CDPSession client) -> void
195
+ def blocked_url?: (String? url) -> bool
192
196
  end
193
197
 
194
198
  class Puppeteer::NetworkCondition
@@ -226,6 +230,7 @@ class Puppeteer::Target
226
230
  def browser: () -> Puppeteer::Browser
227
231
  def browser_context: () -> Puppeteer::BrowserContext
228
232
  def opener: () -> Puppeteer::Target?
233
+ def as_page: () -> Puppeteer::Page?
229
234
  def handle_target_info_changed: (Puppeteer::Target::TargetInfo target_info) -> void
230
235
 
231
236
  private
@@ -13,12 +13,14 @@ class Puppeteer::Browser
13
13
  # @rbs ignore_https_errors: bool -- Ignore HTTPS errors
14
14
  # @rbs default_viewport: Puppeteer::Viewport? -- Default viewport
15
15
  # @rbs network_enabled: bool -- Whether network events are enabled
16
+ # @rbs issues_enabled: bool -- Whether issues events are enabled
17
+ # @rbs block_list: Array[String]? -- URL block list patterns
16
18
  # @rbs process: Puppeteer::BrowserRunner::BrowserProcess? -- Browser process handle
17
19
  # @rbs close_callback: Proc -- Close callback
18
20
  # @rbs target_filter_callback: Proc? -- Target filter callback
19
21
  # @rbs is_page_target_callback: Proc? -- Page target predicate
20
22
  # @rbs return: Puppeteer::Browser -- Browser instance
21
- def self.create: (product: String?, connection: Puppeteer::Connection, context_ids: Array[String], ignore_https_errors: bool, default_viewport: Puppeteer::Viewport?, process: Puppeteer::BrowserRunner::BrowserProcess?, close_callback: Proc, target_filter_callback: Proc?, is_page_target_callback: Proc?, ?network_enabled: bool) -> Puppeteer::Browser
23
+ def self.create: (product: String?, connection: Puppeteer::Connection, context_ids: Array[String], ignore_https_errors: bool, default_viewport: Puppeteer::Viewport?, process: Puppeteer::BrowserRunner::BrowserProcess?, close_callback: Proc, target_filter_callback: Proc?, is_page_target_callback: Proc?, ?network_enabled: bool, ?issues_enabled: bool, ?block_list: Array[String]?) -> Puppeteer::Browser
22
24
 
23
25
  # @rbs product: String? -- Browser product (chrome only)
24
26
  # @rbs connection: Puppeteer::Connection -- CDP connection
@@ -26,12 +28,14 @@ class Puppeteer::Browser
26
28
  # @rbs ignore_https_errors: bool -- Ignore HTTPS errors
27
29
  # @rbs default_viewport: Puppeteer::Viewport? -- Default viewport
28
30
  # @rbs network_enabled: bool -- Whether network events are enabled
31
+ # @rbs issues_enabled: bool -- Whether issues events are enabled
32
+ # @rbs block_list: Array[String]? -- URL block list patterns
29
33
  # @rbs process: Puppeteer::BrowserRunner::BrowserProcess? -- Browser process handle
30
34
  # @rbs close_callback: Proc -- Close callback
31
35
  # @rbs target_filter_callback: Proc? -- Target filter callback
32
36
  # @rbs is_page_target_callback: Proc? -- Page target predicate
33
37
  # @rbs return: void -- No return value
34
- def initialize: (product: String?, connection: Puppeteer::Connection, context_ids: Array[String], ignore_https_errors: bool, default_viewport: Puppeteer::Viewport?, process: Puppeteer::BrowserRunner::BrowserProcess?, close_callback: Proc, target_filter_callback: Proc?, is_page_target_callback: Proc?, ?network_enabled: bool) -> void
38
+ def initialize: (product: String?, connection: Puppeteer::Connection, context_ids: Array[String], ignore_https_errors: bool, default_viewport: Puppeteer::Viewport?, process: Puppeteer::BrowserRunner::BrowserProcess?, close_callback: Proc, target_filter_callback: Proc?, is_page_target_callback: Proc?, ?network_enabled: bool, ?issues_enabled: bool, ?block_list: Array[String]?) -> void
35
39
 
36
40
  private def default_target_filter_callback: (untyped target_info) -> untyped
37
41
 
@@ -58,6 +62,8 @@ class Puppeteer::Browser
58
62
 
59
63
  private def target_manager: () -> untyped
60
64
 
65
+ private def connection: () -> untyped
66
+
61
67
  # @rbs return: Puppeteer::BrowserContext -- New incognito browser context
62
68
  def create_incognito_browser_context: () -> Puppeteer::BrowserContext
63
69
 
@@ -140,6 +146,27 @@ class Puppeteer::Browser
140
146
  # @rbs return: String -- Browser user agent string
141
147
  def user_agent: () -> String
142
148
 
149
+ # @rbs page_target_id: String -- Page target id
150
+ # @rbs return: String? -- DevTools target id for page
151
+ def _has_devtools_target: (String page_target_id) -> String?
152
+
153
+ # @rbs path: String -- Extension path
154
+ # @rbs return: String -- Installed extension id
155
+ def install_extension: (String path) -> String
156
+
157
+ # @rbs extension_id: String -- Extension id
158
+ # @rbs return: void -- No return value
159
+ def uninstall_extension: (String extension_id) -> void
160
+
161
+ # @rbs return: Hash[String, Puppeteer::Extension] -- Installed extensions
162
+ def extensions: () -> Hash[String, Puppeteer::Extension]
163
+
164
+ # @rbs return: bool -- Whether issue events are enabled
165
+ def issues_enabled?: () -> bool
166
+
167
+ # @rbs return: Array[String]? -- URL block list patterns
168
+ def block_list: () -> Array[String]?
169
+
143
170
  # @rbs return: void -- No return value
144
171
  def close: () -> void
145
172
 
@@ -0,0 +1,30 @@
1
+ # Generated from lib/puppeteer/chrome_user_data_dir.rb with RBS::Inline
2
+
3
+ module Puppeteer::ChromeUserDataDir
4
+ CHANNELS: Array[String]
5
+
6
+ MAC_DIR_NAMES: Hash[String, String]
7
+
8
+ LINUX_DIR_NAMES: Hash[String, String]
9
+
10
+ WINDOWS_DIR_NAMES: Hash[String, Array[String]]
11
+
12
+ # @rbs channel: (String | Symbol) -- Chrome release channel
13
+ # @rbs platform: Symbol? -- Optional platform override
14
+ # @rbs env: Hash[String, String] -- Environment variables
15
+ # @rbs home: String? -- Home directory override
16
+ # @rbs return: String -- Default user data directory
17
+ def self.resolve_default: (String | Symbol channel, ?platform: Symbol?, ?env: Hash[String, String], ?home: String?) -> String
18
+
19
+ # @rbs channel: (String | Symbol) -- Chrome release channel
20
+ # @rbs return: String -- Normalized channel
21
+ def self.normalize_channel: (String | Symbol channel) -> String
22
+
23
+ # @rbs return: Symbol -- Current platform
24
+ def self.current_platform: () -> Symbol
25
+
26
+ # @rbs platform: Symbol -- Target platform
27
+ # @rbs parts: String -- Path segments
28
+ # @rbs return: String -- Joined path
29
+ def self.join_path: (Symbol platform, *untyped parts) -> String
30
+ end
@@ -216,6 +216,11 @@ class Puppeteer::ElementHandle < Puppeteer::JSHandle
216
216
  # @rbs return: void -- No return value
217
217
  def upload_file: (*untyped file_paths) -> void
218
218
 
219
+ # @rbs credit_card: Hash[Symbol | String, untyped]? -- Credit card autofill payload
220
+ # @rbs address: Hash[Symbol | String, untyped]? -- Address autofill payload
221
+ # @rbs return: void -- No return value
222
+ def autofill: (?credit_card: Hash[Symbol | String, untyped]?, ?address: Hash[Symbol | String, untyped]?) -> void
223
+
219
224
  # @rbs block: Proc? -- Optional block for Object#tap usage
220
225
  # @rbs return: Puppeteer::ElementHandle | nil -- Element handle or nil
221
226
  def tap: () ?{ (?) -> untyped } -> (Puppeteer::ElementHandle | nil)
@@ -81,6 +81,10 @@ class Puppeteer::ExecutionContext
81
81
  # @return [Object|Puppeteer::JSHandle]
82
82
  private def evaluate_internal: (untyped return_by_value, untyped page_function, *untyped args) -> untyped
83
83
 
84
+ # @param error [Puppeteer::Connection::ProtocolError]
85
+ # @return [StandardError]
86
+ private def rewrite_evaluation_error: (untyped error) -> untyped
87
+
84
88
  # @rbs page_function: String -- JavaScript code to check
85
89
  # @rbs return: bool -- Whether the code represents a function
86
90
  private def function_string?: (String page_function) -> bool
@@ -0,0 +1,37 @@
1
+ # Generated from lib/puppeteer/extension.rb with RBS::Inline
2
+
3
+ class Puppeteer::Extension
4
+ # @rbs id: String -- Extension id
5
+ # @rbs version: String -- Extension version
6
+ # @rbs name: String -- Extension name
7
+ # @rbs path: String -- Extension path
8
+ # @rbs enabled: bool -- Whether extension is enabled
9
+ # @rbs browser: Puppeteer::Browser -- Browser instance
10
+ # @rbs return: void -- No return value
11
+ def initialize: (id: String, version: String, name: String, path: String, enabled: bool, browser: Puppeteer::Browser) -> void
12
+
13
+ # @rbs return: String -- Extension id
14
+ attr_reader id: untyped
15
+
16
+ # @rbs return: String -- Extension version
17
+ attr_reader version: untyped
18
+
19
+ # @rbs return: String -- Extension name
20
+ attr_reader name: untyped
21
+
22
+ # @rbs return: String -- Extension path
23
+ attr_reader path: untyped
24
+
25
+ # @rbs return: bool -- Whether extension is enabled
26
+ attr_reader enabled: untyped
27
+
28
+ # @rbs return: Array[Puppeteer::CdpWebWorker] -- Extension workers
29
+ def workers: () -> Array[Puppeteer::CdpWebWorker]
30
+
31
+ # @rbs return: Array[Puppeteer::Page] -- Extension pages
32
+ def pages: () -> Array[Puppeteer::Page]
33
+
34
+ # @rbs page: Puppeteer::Page -- Target page
35
+ # @rbs return: void -- No return value
36
+ def trigger_action: (Puppeteer::Page page) -> void
37
+ end
@@ -41,6 +41,8 @@ class Puppeteer::Frame
41
41
 
42
42
  attr_accessor puppeteer_world: untyped
43
43
 
44
+ attr_accessor extension_worlds: untyped
45
+
44
46
  attr_reader client: untyped
45
47
 
46
48
  # @rbs other: Object -- Other object to compare
@@ -122,6 +124,9 @@ class Puppeteer::Frame
122
124
  # @rbs return: String? -- Frame URL
123
125
  def url: () -> String?
124
126
 
127
+ # @rbs return: Array[untyped] -- Extension execution realms for this frame
128
+ def extension_realms: () -> Array[untyped]
129
+
125
130
  # @rbs return: Puppeteer::Frame? -- Parent frame
126
131
  def parent_frame: () -> Puppeteer::Frame?
127
132
 
@@ -0,0 +1,13 @@
1
+ # Generated from lib/puppeteer/issue.rb with RBS::Inline
2
+
3
+ class Puppeteer::Issue
4
+ # @rbs issue: Hash[String, untyped] -- CDP issue payload
5
+ # @rbs return: void -- No return value
6
+ def initialize: (Hash[String, untyped] issue) -> void
7
+
8
+ # @rbs return: String -- Issue code
9
+ attr_reader code: untyped
10
+
11
+ # @rbs return: Hash[String, untyped] -- Issue details payload
12
+ attr_reader details: untyped
13
+ end
@@ -82,6 +82,16 @@ class Puppeteer::Page
82
82
  # @rbs return: Puppeteer::BrowserContext -- Owning browser context
83
83
  def browser_context: () -> Puppeteer::BrowserContext
84
84
 
85
+ # @rbs return: bool -- Whether DevTools is attached to this page
86
+ def has_devtools: () -> bool
87
+
88
+ # @rbs extension: Puppeteer::Extension -- Extension to trigger
89
+ # @rbs return: void -- No return value
90
+ def trigger_extension_action: (Puppeteer::Extension extension) -> void
91
+
92
+ # @rbs return: Array[untyped] -- Extension execution realms on the main frame
93
+ def extension_realms: () -> Array[untyped]
94
+
85
95
  class TargetCrashedError < Puppeteer::Error
86
96
  end
87
97
 
@@ -258,6 +268,10 @@ class Puppeteer::Page
258
268
 
259
269
  private def add_console_message: (untyped type, untyped args, untyped stack_trace) -> untyped
260
270
 
271
+ private def console_value_from_js_handle: (untyped handle) -> untyped
272
+
273
+ private def value_from_remote_object_reference: (untyped remote_object) -> untyped
274
+
261
275
  private def handle_dialog_opening: (untyped event) -> untyped
262
276
 
263
277
  private def set_transparent_background_color: () ?{ (?) -> untyped } -> untyped
@@ -28,25 +28,31 @@ class Puppeteer::Puppeteer
28
28
  # @rbs headless: bool? -- Run browser in headless mode
29
29
  # @rbs ignore_https_errors: bool? -- Ignore HTTPS errors
30
30
  # @rbs network_enabled: bool? -- Enable network domain
31
+ # @rbs issues_enabled: bool? -- Enable issues domain
32
+ # @rbs block_list: Array[String]? -- URL block list patterns
33
+ # @rbs enable_extensions: (bool | Array[String])? -- Enable extensions or load unpacked extensions
31
34
  # @rbs default_viewport: Puppeteer::Viewport? -- Default viewport
32
35
  # @rbs slow_mo: Integer? -- Delay between operations (ms)
33
36
  # @rbs protocol_timeout: Integer? -- CDP protocol timeout in milliseconds
34
37
  # @rbs wait_for_initial_page: bool? -- Wait for initial page to load
35
38
  # @rbs block: Proc? -- Optional block receiving the browser
36
39
  # @rbs return: Puppeteer::Browser -- Browser instance
37
- def launch: (?product: String?, ?channel: (String | Symbol)?, ?executable_path: String?, ?ignore_default_args: Array[String]?, ?handle_SIGINT: bool?, ?handle_SIGTERM: bool?, ?handle_SIGHUP: bool?, ?timeout: Integer?, ?dumpio: bool?, ?env: Hash[String, String]?, ?pipe: bool?, ?args: Array[String]?, ?user_data_dir: String?, ?devtools: bool?, ?debugging_port: Integer?, ?headless: bool?, ?ignore_https_errors: bool?, ?network_enabled: bool?, ?default_viewport: Puppeteer::Viewport?, ?slow_mo: Integer?, ?protocol_timeout: Integer?, ?wait_for_initial_page: bool?) ?{ (?) -> untyped } -> Puppeteer::Browser
40
+ def launch: (?product: String?, ?channel: (String | Symbol)?, ?executable_path: String?, ?ignore_default_args: Array[String]?, ?handle_SIGINT: bool?, ?handle_SIGTERM: bool?, ?handle_SIGHUP: bool?, ?timeout: Integer?, ?dumpio: bool?, ?env: Hash[String, String]?, ?pipe: bool?, ?args: Array[String]?, ?user_data_dir: String?, ?devtools: bool?, ?debugging_port: Integer?, ?headless: bool?, ?ignore_https_errors: bool?, ?network_enabled: bool?, ?issues_enabled: bool?, ?block_list: Array[String]?, ?enable_extensions: (bool | Array[String])?, ?default_viewport: Puppeteer::Viewport?, ?slow_mo: Integer?, ?protocol_timeout: Integer?, ?wait_for_initial_page: bool?) ?{ (?) -> untyped } -> Puppeteer::Browser
38
41
 
39
42
  # @rbs browser_ws_endpoint: String? -- Browser WebSocket endpoint
40
43
  # @rbs browser_url: String? -- Browser HTTP URL for WebSocket discovery
41
44
  # @rbs transport: Puppeteer::WebSocketTransport? -- Pre-connected transport
45
+ # @rbs channel: (String | Symbol)? -- Browser channel
42
46
  # @rbs ignore_https_errors: bool? -- Ignore HTTPS errors
43
47
  # @rbs network_enabled: bool? -- Enable network domain
48
+ # @rbs issues_enabled: bool? -- Enable issues domain
49
+ # @rbs block_list: Array[String]? -- URL block list patterns
44
50
  # @rbs default_viewport: Puppeteer::Viewport? -- Default viewport
45
51
  # @rbs slow_mo: Integer? -- Delay between operations (ms)
46
52
  # @rbs protocol_timeout: Integer? -- CDP protocol timeout in milliseconds
47
53
  # @rbs block: Proc? -- Optional block receiving the browser
48
54
  # @rbs return: Puppeteer::Browser -- Browser instance
49
- def connect: (?browser_ws_endpoint: String?, ?browser_url: String?, ?transport: Puppeteer::WebSocketTransport?, ?ignore_https_errors: bool?, ?network_enabled: bool?, ?default_viewport: Puppeteer::Viewport?, ?slow_mo: Integer?, ?protocol_timeout: Integer?) ?{ (?) -> untyped } -> Puppeteer::Browser
55
+ def connect: (?browser_ws_endpoint: String?, ?browser_url: String?, ?transport: Puppeteer::WebSocketTransport?, ?channel: (String | Symbol)?, ?ignore_https_errors: bool?, ?network_enabled: bool?, ?issues_enabled: bool?, ?block_list: Array[String]?, ?default_viewport: Puppeteer::Viewport?, ?slow_mo: Integer?, ?protocol_timeout: Integer?) ?{ (?) -> untyped } -> Puppeteer::Browser
50
56
 
51
57
  # @rbs channel: String? -- Browser channel
52
58
  # @rbs return: String -- Executable path
@@ -17,6 +17,8 @@ class Puppeteer::RemoteObject
17
17
 
18
18
  attr_reader type: untyped
19
19
 
20
+ attr_reader class_name: untyped
21
+
20
22
  attr_reader description: untyped
21
23
 
22
24
  # @rbs return: bool
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppeteer-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.51.0
4
+ version: 0.52.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-02-09 00:00:00.000000000 Z
11
+ date: 2026-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -317,6 +317,7 @@ files:
317
317
  - lib/puppeteer/browser_runner.rb
318
318
  - lib/puppeteer/cdp_session.rb
319
319
  - lib/puppeteer/chrome_target_manager.rb
320
+ - lib/puppeteer/chrome_user_data_dir.rb
320
321
  - lib/puppeteer/connection.rb
321
322
  - lib/puppeteer/console_message.rb
322
323
  - lib/puppeteer/console_patch.rb
@@ -341,6 +342,7 @@ files:
341
342
  - lib/puppeteer/exception_details.rb
342
343
  - lib/puppeteer/executable_path_finder.rb
343
344
  - lib/puppeteer/execution_context.rb
345
+ - lib/puppeteer/extension.rb
344
346
  - lib/puppeteer/file_chooser.rb
345
347
  - lib/puppeteer/frame.rb
346
348
  - lib/puppeteer/frame_manager.rb
@@ -349,6 +351,7 @@ files:
349
351
  - lib/puppeteer/http_response.rb
350
352
  - lib/puppeteer/if_present.rb
351
353
  - lib/puppeteer/isolated_world.rb
354
+ - lib/puppeteer/issue.rb
352
355
  - lib/puppeteer/js_coverage.rb
353
356
  - lib/puppeteer/js_handle.rb
354
357
  - lib/puppeteer/keyboard.rb
@@ -397,12 +400,15 @@ files:
397
400
  - sig/_supplementary.rbs
398
401
  - sig/puppeteer/browser.rbs
399
402
  - sig/puppeteer/cdp_session.rbs
403
+ - sig/puppeteer/chrome_user_data_dir.rbs
400
404
  - sig/puppeteer/dialog.rbs
401
405
  - sig/puppeteer/element_handle.rbs
402
406
  - sig/puppeteer/execution_context.rbs
407
+ - sig/puppeteer/extension.rbs
403
408
  - sig/puppeteer/frame.rbs
404
409
  - sig/puppeteer/http_request.rbs
405
410
  - sig/puppeteer/http_response.rbs
411
+ - sig/puppeteer/issue.rbs
406
412
  - sig/puppeteer/js_handle.rbs
407
413
  - sig/puppeteer/keyboard.rbs
408
414
  - sig/puppeteer/locators.rbs