puppeteer-bidi 0.0.1.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +13 -0
  4. data/CLAUDE/README.md +158 -0
  5. data/CLAUDE/async_programming.md +158 -0
  6. data/CLAUDE/click_implementation.md +340 -0
  7. data/CLAUDE/core_layer_gotchas.md +136 -0
  8. data/CLAUDE/error_handling.md +232 -0
  9. data/CLAUDE/file_chooser.md +95 -0
  10. data/CLAUDE/frame_architecture.md +346 -0
  11. data/CLAUDE/javascript_evaluation.md +341 -0
  12. data/CLAUDE/jshandle_implementation.md +505 -0
  13. data/CLAUDE/keyboard_implementation.md +250 -0
  14. data/CLAUDE/mouse_implementation.md +140 -0
  15. data/CLAUDE/navigation_waiting.md +234 -0
  16. data/CLAUDE/porting_puppeteer.md +214 -0
  17. data/CLAUDE/query_handler.md +194 -0
  18. data/CLAUDE/rspec_pending_vs_skip.md +262 -0
  19. data/CLAUDE/selector_evaluation.md +198 -0
  20. data/CLAUDE/test_server_routes.md +263 -0
  21. data/CLAUDE/testing_strategy.md +236 -0
  22. data/CLAUDE/two_layer_architecture.md +180 -0
  23. data/CLAUDE/wrapped_element_click.md +247 -0
  24. data/CLAUDE.md +185 -0
  25. data/LICENSE.txt +21 -0
  26. data/README.md +488 -0
  27. data/Rakefile +21 -0
  28. data/lib/puppeteer/bidi/async_utils.rb +151 -0
  29. data/lib/puppeteer/bidi/browser.rb +285 -0
  30. data/lib/puppeteer/bidi/browser_context.rb +53 -0
  31. data/lib/puppeteer/bidi/browser_launcher.rb +240 -0
  32. data/lib/puppeteer/bidi/connection.rb +182 -0
  33. data/lib/puppeteer/bidi/core/README.md +169 -0
  34. data/lib/puppeteer/bidi/core/browser.rb +230 -0
  35. data/lib/puppeteer/bidi/core/browsing_context.rb +601 -0
  36. data/lib/puppeteer/bidi/core/disposable.rb +69 -0
  37. data/lib/puppeteer/bidi/core/errors.rb +64 -0
  38. data/lib/puppeteer/bidi/core/event_emitter.rb +83 -0
  39. data/lib/puppeteer/bidi/core/navigation.rb +128 -0
  40. data/lib/puppeteer/bidi/core/realm.rb +315 -0
  41. data/lib/puppeteer/bidi/core/request.rb +300 -0
  42. data/lib/puppeteer/bidi/core/session.rb +153 -0
  43. data/lib/puppeteer/bidi/core/user_context.rb +208 -0
  44. data/lib/puppeteer/bidi/core/user_prompt.rb +102 -0
  45. data/lib/puppeteer/bidi/core.rb +45 -0
  46. data/lib/puppeteer/bidi/deserializer.rb +132 -0
  47. data/lib/puppeteer/bidi/element_handle.rb +602 -0
  48. data/lib/puppeteer/bidi/errors.rb +42 -0
  49. data/lib/puppeteer/bidi/file_chooser.rb +52 -0
  50. data/lib/puppeteer/bidi/frame.rb +597 -0
  51. data/lib/puppeteer/bidi/http_response.rb +23 -0
  52. data/lib/puppeteer/bidi/injected.js +1 -0
  53. data/lib/puppeteer/bidi/injected_source.rb +21 -0
  54. data/lib/puppeteer/bidi/js_handle.rb +302 -0
  55. data/lib/puppeteer/bidi/keyboard.rb +265 -0
  56. data/lib/puppeteer/bidi/lazy_arg.rb +23 -0
  57. data/lib/puppeteer/bidi/mouse.rb +170 -0
  58. data/lib/puppeteer/bidi/page.rb +613 -0
  59. data/lib/puppeteer/bidi/query_handler.rb +397 -0
  60. data/lib/puppeteer/bidi/realm.rb +242 -0
  61. data/lib/puppeteer/bidi/serializer.rb +139 -0
  62. data/lib/puppeteer/bidi/target.rb +81 -0
  63. data/lib/puppeteer/bidi/task_manager.rb +44 -0
  64. data/lib/puppeteer/bidi/timeout_settings.rb +20 -0
  65. data/lib/puppeteer/bidi/transport.rb +129 -0
  66. data/lib/puppeteer/bidi/version.rb +7 -0
  67. data/lib/puppeteer/bidi/wait_task.rb +322 -0
  68. data/lib/puppeteer/bidi.rb +49 -0
  69. data/scripts/update_injected_source.rb +57 -0
  70. data/sig/puppeteer/bidi/browser.rbs +80 -0
  71. data/sig/puppeteer/bidi/element_handle.rbs +238 -0
  72. data/sig/puppeteer/bidi/frame.rbs +205 -0
  73. data/sig/puppeteer/bidi/js_handle.rbs +90 -0
  74. data/sig/puppeteer/bidi/page.rbs +247 -0
  75. data/sig/puppeteer/bidi.rbs +15 -0
  76. metadata +176 -0
@@ -0,0 +1,247 @@
1
+ # Generated from lib/puppeteer/bidi/page.rb with RBS::Inline
2
+
3
+ module Puppeteer
4
+ module Bidi
5
+ # Page represents a single page/tab in the browser
6
+ # This is a high-level wrapper around Core::BrowsingContext
7
+ class Page
8
+ DEFAULT_TIMEOUT: Integer
9
+
10
+ attr_reader browsing_context: Core::BrowsingContext
11
+
12
+ attr_reader browser_context: BrowserContext
13
+
14
+ attr_reader timeout_settings: TimeoutSettings
15
+
16
+ # @rbs browser_context: BrowserContext
17
+ # @rbs browsing_context: Core::BrowsingContext
18
+ # @rbs return: void
19
+ def initialize: (BrowserContext browser_context, Core::BrowsingContext browsing_context) -> void
20
+
21
+ # Register an event listener
22
+ # @rbs event: Symbol | String
23
+ # @rbs &block: (untyped) -> void
24
+ # @rbs return: void
25
+ def on: (Symbol | String event) { (untyped) -> void } -> void
26
+
27
+ # Register a one-time event listener
28
+ # @rbs event: Symbol | String
29
+ # @rbs &block: (untyped) -> void
30
+ # @rbs return: void
31
+ def once: (Symbol | String event) { (untyped) -> void } -> void
32
+
33
+ # Remove an event listener
34
+ # @rbs event: Symbol | String
35
+ # @rbs &block: (untyped) -> void
36
+ # @rbs return: void
37
+ def off: (Symbol | String event) { (untyped) -> void } -> void
38
+
39
+ # Emit an event to all registered listeners
40
+ # @rbs event: Symbol | String
41
+ # @rbs data: untyped
42
+ # @rbs return: void
43
+ def emit: (Symbol | String event, ?untyped data) -> void
44
+
45
+ # Navigate to a URL
46
+ # @rbs url: String
47
+ # @rbs wait_until: String
48
+ # @rbs return: HTTPResponse?
49
+ def goto: (String url, ?wait_until: String) -> HTTPResponse?
50
+
51
+ # Set page content
52
+ # @rbs html: String
53
+ # @rbs wait_until: String
54
+ # @rbs return: void
55
+ def set_content: (String html, ?wait_until: String) -> void
56
+
57
+ # Take a screenshot
58
+ # @rbs path: String?
59
+ # @rbs type: String
60
+ # @rbs full_page: bool
61
+ # @rbs clip: Hash[Symbol, Numeric]?
62
+ # @rbs capture_beyond_viewport: bool
63
+ # @rbs return: String
64
+ def screenshot: (?path: String?, ?type: String, ?full_page: bool, ?clip: Hash[Symbol, Numeric]?, ?capture_beyond_viewport: bool) -> String
65
+
66
+ # Evaluate JavaScript in the page context
67
+ # @rbs script: String
68
+ # @rbs *args: untyped
69
+ # @rbs return: untyped
70
+ def evaluate: (String script, *untyped args) -> untyped
71
+
72
+ # Evaluate JavaScript and return a handle to the result
73
+ # @rbs script: String
74
+ # @rbs *args: untyped
75
+ # @rbs return: JSHandle
76
+ def evaluate_handle: (String script, *untyped args) -> JSHandle
77
+
78
+ # Query for an element matching the selector
79
+ # @rbs selector: String
80
+ # @rbs return: ElementHandle?
81
+ def query_selector: (String selector) -> ElementHandle?
82
+
83
+ # Query for all elements matching the selector
84
+ # @rbs selector: String
85
+ # @rbs return: Array[ElementHandle]
86
+ def query_selector_all: (String selector) -> Array[ElementHandle]
87
+
88
+ # Evaluate a function on the first element matching the selector
89
+ # @rbs selector: String
90
+ # @rbs page_function: String
91
+ # @rbs *args: untyped
92
+ # @rbs return: untyped
93
+ def eval_on_selector: (String selector, String page_function, *untyped args) -> untyped
94
+
95
+ # Evaluate a function on all elements matching the selector
96
+ # @rbs selector: String
97
+ # @rbs page_function: String
98
+ # @rbs *args: untyped
99
+ # @rbs return: untyped
100
+ def eval_on_selector_all: (String selector, String page_function, *untyped args) -> untyped
101
+
102
+ # Click an element matching the selector
103
+ # @rbs selector: String
104
+ # @rbs button: String
105
+ # @rbs count: Integer
106
+ # @rbs delay: Numeric?
107
+ # @rbs offset: Hash[Symbol, Numeric]?
108
+ # @rbs return: void
109
+ def click: (String selector, ?button: String, ?count: Integer, ?delay: Numeric?, ?offset: Hash[Symbol, Numeric]?) -> void
110
+
111
+ # Type text into an element matching the selector
112
+ # @rbs selector: String
113
+ # @rbs text: String
114
+ # @rbs delay: Numeric
115
+ # @rbs return: void
116
+ def type: (String selector, String text, ?delay: Numeric) -> void
117
+
118
+ # Hover over an element matching the selector
119
+ # @rbs selector: String
120
+ # @rbs return: void
121
+ def hover: (String selector) -> void
122
+
123
+ # Focus an element matching the selector
124
+ # @rbs selector: String
125
+ # @rbs return: void
126
+ def focus: (String selector) -> void
127
+
128
+ # Get the page title
129
+ # @rbs return: String
130
+ def title: () -> String
131
+
132
+ # Get the page URL
133
+ # @rbs return: String
134
+ def url: () -> String
135
+
136
+ # Close the page
137
+ # @rbs return: void
138
+ def close: () -> void
139
+
140
+ # Check if page is closed
141
+ # @rbs return: bool
142
+ def closed?: () -> bool
143
+
144
+ # Get the main frame
145
+ # @rbs return: Frame
146
+ def main_frame: () -> Frame
147
+
148
+ # Get the focused frame
149
+ # @rbs return: Frame
150
+ def focused_frame: () -> Frame
151
+
152
+ # Get all frames (main frame + all nested child frames)
153
+ # Following Puppeteer's pattern of returning all frames recursively
154
+ # @rbs return: Array[Frame]
155
+ def frames: () -> Array[Frame]
156
+
157
+ # Get the mouse instance
158
+ # @rbs return: Mouse
159
+ def mouse: () -> Mouse
160
+
161
+ # Get the keyboard instance
162
+ # @rbs return: Keyboard
163
+ def keyboard: () -> Keyboard
164
+
165
+ # Wait for a function to return a truthy value
166
+ # @rbs page_function: String
167
+ # @rbs options: Hash[Symbol, untyped]
168
+ # @rbs *args: untyped
169
+ # @rbs &block: ((JSHandle) -> void)?
170
+ # @rbs return: JSHandle
171
+ def wait_for_function: (String page_function, ?Hash[Symbol, untyped] options, *untyped args) ?{ (?) -> untyped } -> JSHandle
172
+
173
+ # Wait for an element matching the selector to appear in the page
174
+ # @rbs selector: String
175
+ # @rbs visible: bool?
176
+ # @rbs hidden: bool?
177
+ # @rbs timeout: Numeric?
178
+ # @rbs &block: ((ElementHandle?) -> void)?
179
+ # @rbs return: ElementHandle?
180
+ def wait_for_selector: (String selector, ?visible: bool?, ?hidden: bool?, ?timeout: Numeric?) ?{ (?) -> untyped } -> ElementHandle?
181
+
182
+ # Set the default timeout for waiting operations (e.g., waitForFunction).
183
+ # @rbs timeout: Numeric
184
+ # @rbs return: void
185
+ def set_default_timeout: (Numeric timeout) -> void
186
+
187
+ # Get the current default timeout in milliseconds.
188
+ # @rbs return: Numeric
189
+ def default_timeout: () -> Numeric
190
+
191
+ # Wait for navigation to complete
192
+ # @rbs timeout: Numeric
193
+ # @rbs wait_until: String
194
+ # @rbs &block: (-> void)?
195
+ # @rbs return: HTTPResponse?
196
+ def wait_for_navigation: (?timeout: Numeric, ?wait_until: String) ?{ (?) -> untyped } -> HTTPResponse?
197
+
198
+ # Wait for a file chooser to be opened
199
+ # @rbs timeout: Numeric?
200
+ # @rbs &block: (-> void)?
201
+ # @rbs return: FileChooser
202
+ def wait_for_file_chooser: (?timeout: Numeric?) ?{ (?) -> untyped } -> FileChooser
203
+
204
+ # Wait for network to be idle (no more than concurrency connections for idle_time)
205
+ # Based on Puppeteer's waitForNetworkIdle implementation
206
+ # @rbs idle_time: Numeric
207
+ # @rbs timeout: Numeric
208
+ # @rbs concurrency: Integer
209
+ # @rbs return: void
210
+ def wait_for_network_idle: (?idle_time: Numeric, ?timeout: Numeric, ?concurrency: Integer) -> void
211
+
212
+ # Set viewport size
213
+ # @rbs width: Integer
214
+ # @rbs height: Integer
215
+ # @rbs return: void
216
+ def set_viewport: (width: Integer, height: Integer) -> void
217
+
218
+ # Get current viewport size
219
+ # @rbs return: Hash[Symbol, Integer]?
220
+ def viewport: () -> Hash[Symbol, Integer]?
221
+
222
+ alias viewport= set_viewport
223
+
224
+ alias default_timeout= set_default_timeout
225
+
226
+ # Set JavaScript enabled state
227
+ # @rbs enabled: bool
228
+ # @rbs return: void
229
+ def set_javascript_enabled: (bool enabled) -> void
230
+
231
+ # Check if JavaScript is enabled
232
+ # @rbs return: bool
233
+ def javascript_enabled?: () -> bool
234
+
235
+ private
236
+
237
+ # Recursively collect all frames starting from the given frame
238
+ # @rbs frame: Frame
239
+ # @rbs return: Array[Frame]
240
+ def collect_frames: (Frame frame) -> Array[Frame]
241
+
242
+ # Check if this page is closed and raise error if so
243
+ # @rbs return: void
244
+ def assert_not_closed: () -> void
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,15 @@
1
+ # Generated from lib/puppeteer/bidi.rb with RBS::Inline
2
+
3
+ module Puppeteer
4
+ module Bidi
5
+ # Launch a new browser instance
6
+ # @rbs **options: untyped
7
+ # @rbs return: Browser
8
+ def self.launch: (**untyped options) -> Browser
9
+
10
+ # Connect to an existing browser instance
11
+ # @rbs ws_endpoint: String
12
+ # @rbs return: Browser
13
+ def self.connect: (String ws_endpoint) -> Browser
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: puppeteer-bidi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.beta1
5
+ platform: ruby
6
+ authors:
7
+ - YusukeIwaki
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: async
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: async-websocket
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.26'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.26'
40
+ - !ruby/object:Gem::Dependency
41
+ name: async-http
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.66'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.66'
54
+ - !ruby/object:Gem::Dependency
55
+ name: base64
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.2'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.2'
68
+ description: Puppeteer-BiDi is a Ruby implementation of Puppeteer that uses the WebDriver
69
+ BiDi protocol to automate Firefox browsers. Unlike puppeteer-ruby which uses Chrome
70
+ DevTools Protocol (CDP), this gem focuses on BiDi protocol support for cross-browser
71
+ automation, particularly targeting Firefox.
72
+ email:
73
+ - iwaki@i3-systems.com
74
+ executables: []
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - ".rspec"
79
+ - ".rubocop.yml"
80
+ - CLAUDE.md
81
+ - CLAUDE/README.md
82
+ - CLAUDE/async_programming.md
83
+ - CLAUDE/click_implementation.md
84
+ - CLAUDE/core_layer_gotchas.md
85
+ - CLAUDE/error_handling.md
86
+ - CLAUDE/file_chooser.md
87
+ - CLAUDE/frame_architecture.md
88
+ - CLAUDE/javascript_evaluation.md
89
+ - CLAUDE/jshandle_implementation.md
90
+ - CLAUDE/keyboard_implementation.md
91
+ - CLAUDE/mouse_implementation.md
92
+ - CLAUDE/navigation_waiting.md
93
+ - CLAUDE/porting_puppeteer.md
94
+ - CLAUDE/query_handler.md
95
+ - CLAUDE/rspec_pending_vs_skip.md
96
+ - CLAUDE/selector_evaluation.md
97
+ - CLAUDE/test_server_routes.md
98
+ - CLAUDE/testing_strategy.md
99
+ - CLAUDE/two_layer_architecture.md
100
+ - CLAUDE/wrapped_element_click.md
101
+ - LICENSE.txt
102
+ - README.md
103
+ - Rakefile
104
+ - lib/puppeteer/bidi.rb
105
+ - lib/puppeteer/bidi/async_utils.rb
106
+ - lib/puppeteer/bidi/browser.rb
107
+ - lib/puppeteer/bidi/browser_context.rb
108
+ - lib/puppeteer/bidi/browser_launcher.rb
109
+ - lib/puppeteer/bidi/connection.rb
110
+ - lib/puppeteer/bidi/core.rb
111
+ - lib/puppeteer/bidi/core/README.md
112
+ - lib/puppeteer/bidi/core/browser.rb
113
+ - lib/puppeteer/bidi/core/browsing_context.rb
114
+ - lib/puppeteer/bidi/core/disposable.rb
115
+ - lib/puppeteer/bidi/core/errors.rb
116
+ - lib/puppeteer/bidi/core/event_emitter.rb
117
+ - lib/puppeteer/bidi/core/navigation.rb
118
+ - lib/puppeteer/bidi/core/realm.rb
119
+ - lib/puppeteer/bidi/core/request.rb
120
+ - lib/puppeteer/bidi/core/session.rb
121
+ - lib/puppeteer/bidi/core/user_context.rb
122
+ - lib/puppeteer/bidi/core/user_prompt.rb
123
+ - lib/puppeteer/bidi/deserializer.rb
124
+ - lib/puppeteer/bidi/element_handle.rb
125
+ - lib/puppeteer/bidi/errors.rb
126
+ - lib/puppeteer/bidi/file_chooser.rb
127
+ - lib/puppeteer/bidi/frame.rb
128
+ - lib/puppeteer/bidi/http_response.rb
129
+ - lib/puppeteer/bidi/injected.js
130
+ - lib/puppeteer/bidi/injected_source.rb
131
+ - lib/puppeteer/bidi/js_handle.rb
132
+ - lib/puppeteer/bidi/keyboard.rb
133
+ - lib/puppeteer/bidi/lazy_arg.rb
134
+ - lib/puppeteer/bidi/mouse.rb
135
+ - lib/puppeteer/bidi/page.rb
136
+ - lib/puppeteer/bidi/query_handler.rb
137
+ - lib/puppeteer/bidi/realm.rb
138
+ - lib/puppeteer/bidi/serializer.rb
139
+ - lib/puppeteer/bidi/target.rb
140
+ - lib/puppeteer/bidi/task_manager.rb
141
+ - lib/puppeteer/bidi/timeout_settings.rb
142
+ - lib/puppeteer/bidi/transport.rb
143
+ - lib/puppeteer/bidi/version.rb
144
+ - lib/puppeteer/bidi/wait_task.rb
145
+ - scripts/update_injected_source.rb
146
+ - sig/puppeteer/bidi.rbs
147
+ - sig/puppeteer/bidi/browser.rbs
148
+ - sig/puppeteer/bidi/element_handle.rbs
149
+ - sig/puppeteer/bidi/frame.rbs
150
+ - sig/puppeteer/bidi/js_handle.rbs
151
+ - sig/puppeteer/bidi/page.rbs
152
+ homepage: https://github.com/YusukeIwaki/puppeteer-bidi
153
+ licenses:
154
+ - MIT
155
+ metadata:
156
+ homepage_uri: https://github.com/YusukeIwaki/puppeteer-bidi
157
+ source_code_uri: https://github.com/YusukeIwaki/puppeteer-bidi
158
+ changelog_uri: https://github.com/YusukeIwaki/puppeteer-bidi/blob/master/CHANGELOG.md
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 3.2.0
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubygems_version: 3.6.9
174
+ specification_version: 4
175
+ summary: A Ruby port of Puppeteer using WebDriver BiDi protocol for Firefox automation
176
+ test_files: []