puppeteer-ruby 0.50.1 → 0.52.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/docs/api_coverage.md +38 -6
  3. data/lib/puppeteer/browser.rb +82 -0
  4. data/lib/puppeteer/browser_connector.rb +2 -0
  5. data/lib/puppeteer/browser_context.rb +51 -3
  6. data/lib/puppeteer/chrome_target_manager.rb +53 -6
  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/http_request.rb +15 -1
  15. data/lib/puppeteer/http_response.rb +6 -1
  16. data/lib/puppeteer/isolated_world.rb +22 -1
  17. data/lib/puppeteer/issue.rb +16 -0
  18. data/lib/puppeteer/js_coverage.rb +14 -1
  19. data/lib/puppeteer/launcher/browser_options.rb +6 -1
  20. data/lib/puppeteer/launcher/chrome.rb +17 -2
  21. data/lib/puppeteer/launcher/chrome_arg_options.rb +2 -1
  22. data/lib/puppeteer/locators.rb +56 -37
  23. data/lib/puppeteer/network_manager.rb +16 -16
  24. data/lib/puppeteer/page.rb +90 -7
  25. data/lib/puppeteer/puppeteer.rb +15 -0
  26. data/lib/puppeteer/remote_object.rb +2 -1
  27. data/lib/puppeteer/target.rb +17 -0
  28. data/lib/puppeteer/version.rb +2 -1
  29. data/lib/puppeteer.rb +2 -0
  30. data/puppeteer-ruby.gemspec +1 -1
  31. data/sig/_supplementary.rbs +7 -0
  32. data/sig/puppeteer/browser.rbs +34 -2
  33. data/sig/puppeteer/element_handle.rbs +5 -0
  34. data/sig/puppeteer/execution_context.rbs +4 -0
  35. data/sig/puppeteer/extension.rbs +37 -0
  36. data/sig/puppeteer/frame.rbs +5 -0
  37. data/sig/puppeteer/http_request.rbs +2 -0
  38. data/sig/puppeteer/issue.rbs +13 -0
  39. data/sig/puppeteer/locators.rbs +5 -2
  40. data/sig/puppeteer/page.rbs +20 -0
  41. data/sig/puppeteer/puppeteer.rbs +7 -2
  42. data/sig/puppeteer/remote_object.rbs +2 -0
  43. metadata +8 -4
@@ -193,7 +193,6 @@ class Puppeteer::Page
193
193
  @workers[session.id] = worker
194
194
  emit_event(PageEmittedEvents::WorkerCreated, worker)
195
195
  end
196
-
197
196
  end
198
197
 
199
198
  # @rbs return: Array[untyped] -- Initialization results
@@ -360,6 +359,22 @@ class Puppeteer::Page
360
359
  @target.browser_context
361
360
  end
362
361
 
362
+ # @rbs return: bool -- Whether DevTools is attached to this page
363
+ def has_devtools
364
+ !!browser._has_devtools_target(@target.target_id)
365
+ end
366
+
367
+ # @rbs extension: Puppeteer::Extension -- Extension to trigger
368
+ # @rbs return: void -- No return value
369
+ def trigger_extension_action(extension)
370
+ extension.trigger_action(self)
371
+ end
372
+
373
+ # @rbs return: Array[untyped] -- Extension execution realms on the main frame
374
+ def extension_realms
375
+ main_frame.extension_realms
376
+ end
377
+
363
378
  class TargetCrashedError < Puppeteer::Error; end
364
379
 
365
380
  private def handle_target_crashed
@@ -560,6 +575,15 @@ class Puppeteer::Page
560
575
  raise ArgumentError.new("Each coookie must have #{requires.join(" and ")} attribute.")
561
576
  end
562
577
 
578
+ private def convert_same_site_for_cdp(same_site)
579
+ case same_site
580
+ when 'Strict', 'Lax', 'None'
581
+ same_site
582
+ else
583
+ nil
584
+ end
585
+ end
586
+
563
587
  # @rbs cookies: Array[Hash[Symbol | String, untyped]] -- cookies parameter
564
588
  # @rbs return: void -- No return value
565
589
  def delete_cookie(*cookies)
@@ -582,8 +606,28 @@ class Puppeteer::Page
582
606
  starts_with_http = page_url.start_with?("http")
583
607
  items = cookies.map do |cookie|
584
608
  (starts_with_http ? { url: page_url } : {}).merge(cookie).tap do |item|
585
- raise ArgumentError.new("Blank page can not have cookie \"#{item[:name]}\"") if item[:url] == "about:blank"
586
- raise ArgumentError.new("Data URL page can not have cookie \"#{item[:name]}\"") if item[:url]&.start_with?("data:")
609
+ item_name = item[:name] || item['name']
610
+ item_url = item[:url] || item['url']
611
+ raise ArgumentError.new("Blank page can not have cookie \"#{item_name}\"") if item_url == "about:blank"
612
+ raise ArgumentError.new("Data URL page can not have cookie \"#{item_name}\"") if item_url&.start_with?("data:")
613
+
614
+ same_site =
615
+ if item.key?(:sameSite)
616
+ item[:sameSite]
617
+ elsif item.key?('sameSite')
618
+ item['sameSite']
619
+ elsif item.key?(:same_site)
620
+ item[:same_site]
621
+ else
622
+ item['same_site']
623
+ end
624
+
625
+ converted_same_site = convert_same_site_for_cdp(same_site)
626
+ item.delete(:sameSite)
627
+ item.delete('sameSite')
628
+ item.delete(:same_site)
629
+ item.delete('same_site')
630
+ item[:sameSite] = converted_same_site if converted_same_site
587
631
  end
588
632
  end
589
633
  delete_cookie(*items)
@@ -708,6 +752,29 @@ class Puppeteer::Page
708
752
  Metrics.new(response['metrics'])
709
753
  end
710
754
 
755
+ # @rbs path: String -- Output path for the heap snapshot
756
+ # @rbs return: void -- No return value
757
+ def capture_heap_snapshot(path:)
758
+ @client.send_message('HeapProfiler.enable')
759
+ @client.send_message('HeapProfiler.collectGarbage')
760
+
761
+ begin
762
+ File.open(path, 'w') do |file|
763
+ listener_id = @client.add_event_listener('HeapProfiler.addHeapSnapshotChunk') do |event|
764
+ file.write(event['chunk'])
765
+ end
766
+
767
+ begin
768
+ @client.send_message('HeapProfiler.takeHeapSnapshot', reportProgress: false)
769
+ ensure
770
+ @client.remove_event_listener(listener_id)
771
+ end
772
+ end
773
+ ensure
774
+ @client.send_message('HeapProfiler.disable')
775
+ end
776
+ end
777
+
711
778
  class PageError < Puppeteer::Error ; end
712
779
 
713
780
  private def handle_exception(exception_details)
@@ -803,10 +870,7 @@ class Puppeteer::Page
803
870
  end
804
871
 
805
872
  private def add_console_message(type, args, stack_trace)
806
- text_tokens = args.map do |arg|
807
- value = arg.remote_object.value
808
- value.nil? ? arg.to_s : value
809
- end
873
+ text_tokens = args.map { |arg| console_value_from_js_handle(arg) }
810
874
 
811
875
  stack_trace_locations =
812
876
  if stack_trace && stack_trace['callFrames']
@@ -824,6 +888,25 @@ class Puppeteer::Page
824
888
  emit_event(PageEmittedEvents::Console, console_message)
825
889
  end
826
890
 
891
+ private def console_value_from_js_handle(handle)
892
+ remote_object = handle.remote_object
893
+ return remote_object.value unless remote_object.object_id?
894
+
895
+ value_from_remote_object_reference(remote_object)
896
+ end
897
+
898
+ private def value_from_remote_object_reference(remote_object)
899
+ description = remote_object.description.to_s
900
+ if remote_object.sub_type == 'error' && !description.empty?
901
+ newline_index = description.index("\n")
902
+ return newline_index ? description[0...newline_index] : description
903
+ end
904
+
905
+ type = remote_object.sub_type || remote_object.type
906
+ class_name = remote_object.class_name || remote_object.description || 'Object'
907
+ "[#{type} #{class_name}]"
908
+ end
909
+
827
910
  private def handle_dialog_opening(event)
828
911
  dialog_type = event['type']
829
912
  unless %w(alert confirm prompt beforeunload).include?(dialog_type)
@@ -31,6 +31,9 @@ class Puppeteer::Puppeteer
31
31
  # @rbs headless: bool? -- Run browser in headless mode
32
32
  # @rbs ignore_https_errors: bool? -- Ignore HTTPS errors
33
33
  # @rbs network_enabled: bool? -- Enable network domain
34
+ # @rbs issues_enabled: bool? -- Enable issues domain
35
+ # @rbs block_list: Array[String]? -- URL block list patterns
36
+ # @rbs enable_extensions: (bool | Array[String])? -- Enable extensions or load unpacked extensions
34
37
  # @rbs default_viewport: Puppeteer::Viewport? -- Default viewport
35
38
  # @rbs slow_mo: Integer? -- Delay between operations (ms)
36
39
  # @rbs protocol_timeout: Integer? -- CDP protocol timeout in milliseconds
@@ -56,6 +59,9 @@ class Puppeteer::Puppeteer
56
59
  headless: nil,
57
60
  ignore_https_errors: nil,
58
61
  network_enabled: true,
62
+ issues_enabled: true,
63
+ block_list: nil,
64
+ enable_extensions: false,
59
65
  default_viewport: NoViewport.new,
60
66
  slow_mo: nil,
61
67
  protocol_timeout: nil,
@@ -85,6 +91,9 @@ class Puppeteer::Puppeteer
85
91
  headless: headless,
86
92
  ignore_https_errors: ignore_https_errors,
87
93
  network_enabled: network_enabled,
94
+ issues_enabled: issues_enabled,
95
+ block_list: block_list,
96
+ enable_extensions: enable_extensions,
88
97
  default_viewport: default_viewport,
89
98
  slow_mo: slow_mo,
90
99
  protocol_timeout: protocol_timeout,
@@ -133,6 +142,8 @@ class Puppeteer::Puppeteer
133
142
  # @rbs transport: Puppeteer::WebSocketTransport? -- Pre-connected transport
134
143
  # @rbs ignore_https_errors: bool? -- Ignore HTTPS errors
135
144
  # @rbs network_enabled: bool? -- Enable network domain
145
+ # @rbs issues_enabled: bool? -- Enable issues domain
146
+ # @rbs block_list: Array[String]? -- URL block list patterns
136
147
  # @rbs default_viewport: Puppeteer::Viewport? -- Default viewport
137
148
  # @rbs slow_mo: Integer? -- Delay between operations (ms)
138
149
  # @rbs protocol_timeout: Integer? -- CDP protocol timeout in milliseconds
@@ -144,6 +155,8 @@ class Puppeteer::Puppeteer
144
155
  transport: nil,
145
156
  ignore_https_errors: nil,
146
157
  network_enabled: true,
158
+ issues_enabled: true,
159
+ block_list: nil,
147
160
  default_viewport: nil,
148
161
  slow_mo: nil,
149
162
  protocol_timeout: nil,
@@ -155,6 +168,8 @@ class Puppeteer::Puppeteer
155
168
  transport: transport,
156
169
  ignore_https_errors: ignore_https_errors,
157
170
  network_enabled: network_enabled,
171
+ issues_enabled: issues_enabled,
172
+ block_list: block_list,
158
173
  default_viewport: default_viewport,
159
174
  slow_mo: slow_mo,
160
175
  protocol_timeout: protocol_timeout,
@@ -16,12 +16,13 @@ class Puppeteer::RemoteObject
16
16
  @object_id = payload['objectId']
17
17
  @type = payload['type']
18
18
  @sub_type = payload['subtype']
19
+ @class_name = payload['className']
19
20
  @unserializable_value = payload['unserializableValue']
20
21
  @value = payload['value']
21
22
  @description = payload['description']
22
23
  end
23
24
 
24
- attr_reader :sub_type, :type, :description
25
+ attr_reader :sub_type, :type, :class_name, :description
25
26
 
26
27
  # @rbs return: bool
27
28
  def object_id?
@@ -142,6 +142,23 @@ class Puppeteer::Target
142
142
  @page
143
143
  end
144
144
 
145
+ # @return [Puppeteer::Page]
146
+ def as_page
147
+ existing_page = page
148
+ return existing_page if existing_page
149
+ return @as_page if @as_page
150
+
151
+ client = @session || @session_factory.call(false)
152
+ client.wait_for_ready if client.respond_to?(:wait_for_ready)
153
+ @as_page = Puppeteer::Page.create(
154
+ client,
155
+ self,
156
+ @ignore_https_errors,
157
+ nil,
158
+ network_enabled: @network_enabled,
159
+ )
160
+ end
161
+
145
162
  # @return [Puppeteer::CdpWebWorker|nil]
146
163
  def worker
147
164
  return nil unless ['service_worker', 'shared_worker'].include?(@target_info.type)
@@ -1,3 +1,4 @@
1
1
  module Puppeteer
2
- VERSION = '0.50.1'
2
+ VERSION = '0.52.0'
3
+ REF_PUPPETEER_VERSION = '24.42.0'
3
4
  end
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'
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency 'rspec', '~> 3.13.2'
37
37
  spec.add_development_dependency 'rspec_junit_formatter' # for CircleCI.
38
38
  spec.add_development_dependency 'rbs-inline'
39
- spec.add_development_dependency 'rubocop', '~> 1.82.1'
39
+ spec.add_development_dependency 'rubocop', '~> 1.84.0'
40
40
  spec.add_development_dependency 'rubocop-rspec', '~> 3.9.0'
41
41
  spec.add_development_dependency 'sinatra', '< 5.0.0'
42
42
  spec.add_development_dependency 'steep'
@@ -134,12 +134,14 @@ class Puppeteer::BrowserContext
134
134
  def delete_cookie: (*Hash[Symbol | String, untyped] cookies) -> void
135
135
  def delete_matching_cookies: (*Hash[Symbol | String, untyped] filters) -> void
136
136
  def set_download_behavior: (Hash[Symbol | String, untyped] download_behavior) -> void
137
+ def set_permission: (String origin, *Hash[Symbol | String, untyped] permissions) -> void
137
138
 
138
139
  private
139
140
  def normalize_cookie_hash: (Hash[Symbol | String, untyped] cookie) -> Hash[String, untyped]
140
141
  def hash_value: (Hash[untyped, untyped]? hash, *(String | Symbol) keys) -> untyped
141
142
  def convert_partition_key_for_cdp: (untyped partition_key) -> Hash[Symbol, untyped]?
142
143
  def convert_partition_key_from_cdp: (untyped partition_key) -> (Hash[String, untyped] | String | nil)
144
+ def convert_same_site_for_cdp: (untyped same_site) -> String?
143
145
  end
144
146
 
145
147
  class Puppeteer::Frame
@@ -187,6 +189,10 @@ class Puppeteer::FrameManager
187
189
  def remove_frame_recursively: (Puppeteer::Frame frame) -> void
188
190
  def referrer_policy_to_protocol: (String? referrer_policy) -> String?
189
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
190
196
  end
191
197
 
192
198
  class Puppeteer::NetworkCondition
@@ -224,6 +230,7 @@ class Puppeteer::Target
224
230
  def browser: () -> Puppeteer::Browser
225
231
  def browser_context: () -> Puppeteer::BrowserContext
226
232
  def opener: () -> Puppeteer::Target?
233
+ def as_page: () -> Puppeteer::Page?
227
234
  def handle_target_info_changed: (Puppeteer::Target::TargetInfo target_info) -> void
228
235
 
229
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
 
@@ -73,6 +79,11 @@ class Puppeteer::Browser
73
79
  # @rbs return: Puppeteer::BrowserContext -- Default browser context
74
80
  def default_browser_context: () -> Puppeteer::BrowserContext
75
81
 
82
+ # @rbs origin: String -- Origin URL, or '*' for all origins
83
+ # @rbs permissions: Array[Hash[Symbol | String, untyped]] -- Permission descriptors and states
84
+ # @rbs return: void -- No return value
85
+ def set_permission: (String origin, *untyped permissions) -> void
86
+
76
87
  # @rbs context_id: String? -- Browser context ID
77
88
  # @rbs return: void -- No return value
78
89
  def dispose_context: (String? context_id) -> void
@@ -135,6 +146,27 @@ class Puppeteer::Browser
135
146
  # @rbs return: String -- Browser user agent string
136
147
  def user_agent: () -> String
137
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
+
138
170
  # @rbs return: void -- No return value
139
171
  def close: () -> void
140
172
 
@@ -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
 
@@ -91,6 +91,8 @@ class Puppeteer::HTTPRequest
91
91
 
92
92
  private def assert_interception_allowed: () -> untyped
93
93
 
94
+ private def parse_post_data: (untyped event) -> untyped
95
+
94
96
  private def assert_interception_not_handled: () -> untyped
95
97
 
96
98
  private def can_be_intercepted?: () -> untyped
@@ -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
@@ -94,8 +94,9 @@ class Puppeteer::Locator
94
94
  def click: (?delay: Numeric?, ?button: String?, ?click_count: Integer?, ?count: Integer?, ?offset: Hash[Symbol, Numeric]?) -> void
95
95
 
96
96
  # @rbs value: String -- Value to fill
97
+ # @rbs typing_threshold: Integer -- Minimum length to switch to direct assignment
97
98
  # @rbs return: void -- No return value
98
- def fill: (String value) -> void
99
+ def fill: (String value, ?typing_threshold: Integer) -> void
99
100
 
100
101
  # @rbs return: void -- No return value
101
102
  def hover: () -> void
@@ -133,7 +134,9 @@ class Puppeteer::Locator
133
134
 
134
135
  private def ensure_element_is_in_viewport_if_needed: (untyped handle, untyped options) -> untyped
135
136
 
136
- private def fill_element: (untyped handle, untyped value) -> untyped
137
+ private def fill_element: (untyped handle, untyped value, ?typing_threshold: untyped) -> untyped
138
+
139
+ private def fill_directly: (untyped handle, untyped value) -> untyped
137
140
  end
138
141
 
139
142
  class Puppeteer::FunctionLocator < Puppeteer::Locator
@@ -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
 
@@ -191,6 +201,8 @@ class Puppeteer::Page
191
201
  # check if each cookie element has required fields ('name' and 'value')
192
202
  private def assert_cookie_params: (untyped cookies, requires: untyped) -> untyped
193
203
 
204
+ private def convert_same_site_for_cdp: (untyped same_site) -> untyped
205
+
194
206
  # @rbs cookies: Array[Hash[Symbol | String, untyped]] -- cookies parameter
195
207
  # @rbs return: void -- No return value
196
208
  def delete_cookie: (*untyped cookies) -> void
@@ -239,6 +251,10 @@ class Puppeteer::Page
239
251
  # @rbs return: Puppeteer::Page::Metrics -- Page metrics
240
252
  def metrics: () -> Puppeteer::Page::Metrics
241
253
 
254
+ # @rbs path: String -- Output path for the heap snapshot
255
+ # @rbs return: void -- No return value
256
+ def capture_heap_snapshot: (path: String) -> void
257
+
242
258
  class PageError < Puppeteer::Error
243
259
  end
244
260
 
@@ -252,6 +268,10 @@ class Puppeteer::Page
252
268
 
253
269
  private def add_console_message: (untyped type, untyped args, untyped stack_trace) -> untyped
254
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
+
255
275
  private def handle_dialog_opening: (untyped event) -> untyped
256
276
 
257
277
  private def set_transparent_background_color: () ?{ (?) -> untyped } -> untyped
@@ -28,25 +28,30 @@ 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
42
45
  # @rbs ignore_https_errors: bool? -- Ignore HTTPS errors
43
46
  # @rbs network_enabled: bool? -- Enable network domain
47
+ # @rbs issues_enabled: bool? -- Enable issues domain
48
+ # @rbs block_list: Array[String]? -- URL block list patterns
44
49
  # @rbs default_viewport: Puppeteer::Viewport? -- Default viewport
45
50
  # @rbs slow_mo: Integer? -- Delay between operations (ms)
46
51
  # @rbs protocol_timeout: Integer? -- CDP protocol timeout in milliseconds
47
52
  # @rbs block: Proc? -- Optional block receiving the browser
48
53
  # @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
54
+ def connect: (?browser_ws_endpoint: String?, ?browser_url: String?, ?transport: Puppeteer::WebSocketTransport?, ?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
55
 
51
56
  # @rbs channel: String? -- Browser channel
52
57
  # @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