puppeteer-ruby 0.45.6 → 0.50.0.alpha5
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -3
- data/AGENTS.md +169 -0
- data/CLAUDE/README.md +41 -0
- data/CLAUDE/architecture.md +253 -0
- data/CLAUDE/cdp_protocol.md +230 -0
- data/CLAUDE/concurrency.md +216 -0
- data/CLAUDE/porting_puppeteer.md +575 -0
- data/CLAUDE/rbs_type_checking.md +101 -0
- data/CLAUDE/spec_migration_plans.md +1041 -0
- data/CLAUDE/testing.md +278 -0
- data/CLAUDE.md +242 -0
- data/README.md +8 -0
- data/Rakefile +7 -0
- data/Steepfile +28 -0
- data/docs/api_coverage.md +105 -56
- data/lib/puppeteer/aria_query_handler.rb +3 -2
- data/lib/puppeteer/async_utils.rb +214 -0
- data/lib/puppeteer/browser.rb +98 -56
- data/lib/puppeteer/browser_connector.rb +18 -3
- data/lib/puppeteer/browser_context.rb +196 -3
- data/lib/puppeteer/browser_runner.rb +18 -10
- data/lib/puppeteer/cdp_session.rb +67 -23
- data/lib/puppeteer/chrome_target_manager.rb +65 -40
- data/lib/puppeteer/connection.rb +55 -36
- data/lib/puppeteer/console_message.rb +9 -1
- data/lib/puppeteer/console_patch.rb +47 -0
- data/lib/puppeteer/css_coverage.rb +5 -3
- data/lib/puppeteer/custom_query_handler.rb +80 -33
- data/lib/puppeteer/define_async_method.rb +31 -37
- data/lib/puppeteer/dialog.rb +47 -14
- data/lib/puppeteer/element_handle.rb +231 -62
- data/lib/puppeteer/emulation_manager.rb +1 -1
- data/lib/puppeteer/env.rb +1 -1
- data/lib/puppeteer/errors.rb +25 -2
- data/lib/puppeteer/event_callbackable.rb +15 -0
- data/lib/puppeteer/events.rb +4 -0
- data/lib/puppeteer/execution_context.rb +148 -3
- data/lib/puppeteer/file_chooser.rb +6 -0
- data/lib/puppeteer/frame.rb +162 -91
- data/lib/puppeteer/frame_manager.rb +69 -48
- data/lib/puppeteer/http_request.rb +114 -38
- data/lib/puppeteer/http_response.rb +24 -7
- data/lib/puppeteer/isolated_world.rb +64 -41
- data/lib/puppeteer/js_coverage.rb +5 -3
- data/lib/puppeteer/js_handle.rb +58 -16
- data/lib/puppeteer/keyboard.rb +30 -17
- data/lib/puppeteer/launcher/browser_options.rb +3 -1
- data/lib/puppeteer/launcher/chrome.rb +8 -5
- data/lib/puppeteer/launcher/launch_options.rb +7 -2
- data/lib/puppeteer/launcher.rb +4 -8
- data/lib/puppeteer/lifecycle_watcher.rb +38 -22
- data/lib/puppeteer/mouse.rb +273 -64
- data/lib/puppeteer/network_event_manager.rb +7 -0
- data/lib/puppeteer/network_manager.rb +393 -112
- data/lib/puppeteer/page/screenshot_task_queue.rb +14 -4
- data/lib/puppeteer/page.rb +568 -226
- data/lib/puppeteer/puppeteer.rb +171 -64
- data/lib/puppeteer/query_handler_manager.rb +112 -16
- data/lib/puppeteer/reactor_runner.rb +247 -0
- data/lib/puppeteer/remote_object.rb +127 -47
- data/lib/puppeteer/target.rb +74 -27
- data/lib/puppeteer/task_manager.rb +3 -1
- data/lib/puppeteer/timeout_helper.rb +6 -10
- data/lib/puppeteer/touch_handle.rb +39 -0
- data/lib/puppeteer/touch_screen.rb +72 -22
- data/lib/puppeteer/tracing.rb +3 -3
- data/lib/puppeteer/version.rb +1 -1
- data/lib/puppeteer/wait_task.rb +264 -101
- data/lib/puppeteer/web_socket.rb +2 -2
- data/lib/puppeteer/web_socket_transport.rb +91 -27
- data/lib/puppeteer/web_worker.rb +175 -0
- data/lib/puppeteer.rb +20 -4
- data/puppeteer-ruby.gemspec +15 -11
- data/sig/_external.rbs +8 -0
- data/sig/_supplementary.rbs +314 -0
- data/sig/puppeteer/browser.rbs +166 -0
- data/sig/puppeteer/cdp_session.rbs +64 -0
- data/sig/puppeteer/dialog.rbs +41 -0
- data/sig/puppeteer/element_handle.rbs +305 -0
- data/sig/puppeteer/execution_context.rbs +87 -0
- data/sig/puppeteer/frame.rbs +226 -0
- data/sig/puppeteer/http_request.rbs +214 -0
- data/sig/puppeteer/http_response.rbs +89 -0
- data/sig/puppeteer/js_handle.rbs +64 -0
- data/sig/puppeteer/keyboard.rbs +40 -0
- data/sig/puppeteer/mouse.rbs +113 -0
- data/sig/puppeteer/page.rbs +515 -0
- data/sig/puppeteer/puppeteer.rbs +98 -0
- data/sig/puppeteer/remote_object.rbs +78 -0
- data/sig/puppeteer/touch_handle.rbs +21 -0
- data/sig/puppeteer/touch_screen.rbs +35 -0
- data/sig/puppeteer/web_worker.rbs +83 -0
- metadata +116 -45
- data/CHANGELOG.md +0 -397
- data/lib/puppeteer/concurrent_ruby_utils.rb +0 -81
- data/lib/puppeteer/firefox_target_manager.rb +0 -157
- data/lib/puppeteer/launcher/firefox.rb +0 -453
|
@@ -0,0 +1,1041 @@
|
|
|
1
|
+
# Puppeteer Test Comparison Report
|
|
2
|
+
|
|
3
|
+
This report compares test files between [puppeteer/puppeteer](https://github.com/puppeteer/puppeteer/tree/main/test/src) (Node.js) and [puppeteer-ruby](https://github.com/YusukeIwaki/puppeteer-ruby/tree/main/spec/integration).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Migration Rules
|
|
8
|
+
|
|
9
|
+
### 1. Faithful Porting Principle
|
|
10
|
+
Tests must be **faithfully ported** from Node.js Puppeteer to Ruby RSpec:
|
|
11
|
+
- `describe` blocks in Node.js should correspond to `describe` or `context` blocks in Ruby
|
|
12
|
+
- `it` blocks should have equivalent test cases with the same test name (converted to snake_case)
|
|
13
|
+
- Test logic and assertions should match the original implementation
|
|
14
|
+
- If a test cannot be ported exactly (e.g., due to language differences), document the reason
|
|
15
|
+
|
|
16
|
+
### 2. File Naming Convention
|
|
17
|
+
- **`xxx_spec.rb`**: Contains tests ported from Node.js Puppeteer
|
|
18
|
+
- These files should only contain faithful ports of upstream tests
|
|
19
|
+
- The structure should mirror the Node.js test file as closely as possible
|
|
20
|
+
|
|
21
|
+
- **`xxx_ext_spec.rb`**: Contains Ruby-only tests (extensions)
|
|
22
|
+
- Tests that exist only in Ruby (not in Node.js) MUST be placed here
|
|
23
|
+
- Ruby-specific features, additional validations, or regression tests go here
|
|
24
|
+
- Examples: Ruby block-style APIs, Ruby-specific error handling
|
|
25
|
+
|
|
26
|
+
### 3. Comparison Granularity
|
|
27
|
+
- Compare at the `it` (test case) level, not just file level
|
|
28
|
+
- Each `it` block should be tracked as a separate item
|
|
29
|
+
- Document any tests that appear to have independent implementations rather than faithful ports
|
|
30
|
+
|
|
31
|
+
### 4. Handling Differences
|
|
32
|
+
- **Language differences**: Some Node.js patterns don't translate directly to Ruby
|
|
33
|
+
- `async/await` → Ruby's synchronous style or Async gem
|
|
34
|
+
- `AbortSignal` → Not supported in Ruby (document as N/A)
|
|
35
|
+
- `Symbol.dispose` → Ruby's block-based resource management
|
|
36
|
+
- **Feature gaps**: Document features that don't exist in puppeteer-ruby yet
|
|
37
|
+
|
|
38
|
+
### 5. Progress Tracking
|
|
39
|
+
- Update this document whenever migration work is done
|
|
40
|
+
- Mark tests as `[PORTED]`, `[MISSING IN RUBY]`, or `[RUBY ONLY]`
|
|
41
|
+
- Use the Phase-based tracking checklist to monitor overall progress
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
**Legend:**
|
|
46
|
+
- `[MISSING IN RUBY]` - Test exists in Node.js but not ported to RSpec
|
|
47
|
+
- `[RUBY ONLY]` - Test exists only in Ruby (should be moved to `xxx_ext_spec.rb`)
|
|
48
|
+
- `[PORTED]` - Test successfully ported
|
|
49
|
+
- `[PARTIAL]` - Test exists but implementation differs significantly
|
|
50
|
+
- `[ ]` - Not started
|
|
51
|
+
- `[x]` - Completed
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Spec File Mapping Overview
|
|
56
|
+
|
|
57
|
+
### Node.js → Ruby Mapping Status
|
|
58
|
+
|
|
59
|
+
| Node.js Spec | Ruby Spec | Status |
|
|
60
|
+
|--------------|-----------|--------|
|
|
61
|
+
| acceptInsecureCerts.spec.ts | - | No Ruby equivalent (feature may be in launcher_spec) |
|
|
62
|
+
| accessibility.spec.ts | - | **[MISSING]** Not ported |
|
|
63
|
+
| ariaqueryhandler.spec.ts | aria_query_handler_spec.rb | [x] Ported |
|
|
64
|
+
| autofill.spec.ts | - | **[MISSING]** Not ported |
|
|
65
|
+
| bluetooth-emulation.spec.ts | - | Low priority (specialized feature) |
|
|
66
|
+
| browser.spec.ts | browser_spec.rb | [x] Ported |
|
|
67
|
+
| browsercontext.spec.ts | browser_context_spec.rb | [x] Ported |
|
|
68
|
+
| browsercontext-cookies.spec.ts | browser_context_cookies_spec.rb | [x] Ported |
|
|
69
|
+
| click.spec.ts | click_spec.rb | [x] Ported |
|
|
70
|
+
| connect.spec.ts | (in launcher_spec.rb) | [x] Ported |
|
|
71
|
+
| cookies.spec.ts | cookies_spec.rb | [x] Ported |
|
|
72
|
+
| coverage.spec.ts | coverage_spec.rb | [x] Ported |
|
|
73
|
+
| debugInfo.spec.ts | - | Low priority (debugging feature) |
|
|
74
|
+
| defaultbrowsercontext.spec.ts | (in browser_context_spec.rb) | [x] Ported |
|
|
75
|
+
| device-request-prompt.spec.ts | - | **[MISSING]** Not ported |
|
|
76
|
+
| dialog.spec.ts | dialog_spec.rb | [x] Ported |
|
|
77
|
+
| download.spec.ts | download_spec.rb | [x] Ported |
|
|
78
|
+
| drag-and-drop.spec.ts | drag_and_drop_spec.rb | [x] Ported |
|
|
79
|
+
| elementhandle.spec.ts | element_handle_spec.rb | [x] Ported |
|
|
80
|
+
| emulation.spec.ts | emulation_spec.rb | [x] Ported |
|
|
81
|
+
| evaluation.spec.ts | evaluation_spec.rb | [x] Ported |
|
|
82
|
+
| fixtures.spec.ts | - | N/A (test infrastructure) |
|
|
83
|
+
| frame.spec.ts | frame_spec.rb | [x] Ported |
|
|
84
|
+
| headful.spec.ts | - | Low priority (headful-specific) |
|
|
85
|
+
| idle_override.spec.ts | idle_override_spec.rb | [x] Ported |
|
|
86
|
+
| injected.spec.ts | - | N/A (internal implementation) |
|
|
87
|
+
| input.spec.ts | input_spec.rb | [x] Ported |
|
|
88
|
+
| jshandle.spec.ts | js_handle_spec.rb | [x] Ported |
|
|
89
|
+
| keyboard.spec.ts | keyboard_spec.rb | [x] Ported |
|
|
90
|
+
| launcher.spec.ts | launcher_spec.rb | [x] Ported |
|
|
91
|
+
| locator.spec.ts | - | **[MISSING]** Locator API not ported |
|
|
92
|
+
| mouse.spec.ts | mouse_spec.rb | [x] Ported |
|
|
93
|
+
| navigation.spec.ts | navigation_spec.rb | [x] Ported |
|
|
94
|
+
| network.spec.ts | network_spec.rb | [x] Ported |
|
|
95
|
+
| oopif.spec.ts | oopif_spec.rb | [x] Ported |
|
|
96
|
+
| page.spec.ts | page_spec.rb | [x] Ported |
|
|
97
|
+
| proxy.spec.ts | - | **[MISSING]** Not ported |
|
|
98
|
+
| queryhandler.spec.ts | query_handler_spec.rb | [x] Ported |
|
|
99
|
+
| queryselector.spec.ts | query_selector_spec.rb | [x] Ported |
|
|
100
|
+
| requestinterception.spec.ts | request_interception_spec.rb | [x] Ported |
|
|
101
|
+
| requestinterception-experimental.spec.ts | request_interception_experimental_spec.rb | [x] Ported |
|
|
102
|
+
| screenshot.spec.ts | screenshot_spec.rb | [x] Ported |
|
|
103
|
+
| stacktrace.spec.ts | - | Low priority (debugging feature) |
|
|
104
|
+
| target.spec.ts | target_spec.rb | [PARTIAL] AbortSignal not supported |
|
|
105
|
+
| touchscreen.spec.ts | touchscreen_spec.rb | [x] Ported |
|
|
106
|
+
| tracing.spec.ts | tracing_spec.rb | [x] Ported |
|
|
107
|
+
| waittask.spec.ts | wait_task_spec.rb | [x] Ported |
|
|
108
|
+
| webExtension.spec.ts | - | Low priority (Chrome extension feature) |
|
|
109
|
+
| webgl.spec.ts | - | Low priority (WebGL-specific) |
|
|
110
|
+
| worker.spec.ts | worker_spec.rb | [x] Ported |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## High Priority Missing Features
|
|
115
|
+
|
|
116
|
+
### 1. Accessibility API (`accessibility.spec.ts`)
|
|
117
|
+
**Priority: HIGH** - Important for web accessibility testing
|
|
118
|
+
|
|
119
|
+
Node.js tests include:
|
|
120
|
+
- `Accessibility > should work`
|
|
121
|
+
- `Accessibility > should report uninteresting nodes`
|
|
122
|
+
- `Accessibility > iframes` (same-origin, cross-origin)
|
|
123
|
+
- `Accessibility > filtering children of leaf nodes`
|
|
124
|
+
- `Accessibility > elementHandle()` - get ElementHandle from snapshot
|
|
125
|
+
|
|
126
|
+
**Ruby status:** Not implemented. Need to add `Page#accessibility` API.
|
|
127
|
+
|
|
128
|
+
### 2. Locator API (`locator.spec.ts`)
|
|
129
|
+
**Priority: HIGH** - Modern element interaction API
|
|
130
|
+
|
|
131
|
+
Node.js tests include:
|
|
132
|
+
- `Locator.click` - with retries, timeouts, visibility checks
|
|
133
|
+
- `Locator.hover`
|
|
134
|
+
- `Locator.scroll`
|
|
135
|
+
- `Locator.fill` - for inputs, textareas, selects, contenteditable
|
|
136
|
+
- `Locator.race` - race multiple locators
|
|
137
|
+
- `Locator.prototype.map/filter/wait/clone`
|
|
138
|
+
- `FunctionLocator`
|
|
139
|
+
|
|
140
|
+
**Ruby status:** Not implemented. This is a significant new API addition.
|
|
141
|
+
|
|
142
|
+
### 3. Navigation Tests (`navigation.spec.ts`)
|
|
143
|
+
**Priority: HIGH** - Core navigation functionality
|
|
144
|
+
|
|
145
|
+
**Ruby status:** Ported to `spec/integration/navigation_spec.rb`.
|
|
146
|
+
|
|
147
|
+
### 4. Network Tests (`network.spec.ts`)
|
|
148
|
+
**Priority: HIGH** - Network inspection is core functionality
|
|
149
|
+
|
|
150
|
+
**Ruby status:** Ported to `spec/integration/network_spec.rb`.
|
|
151
|
+
|
|
152
|
+
### 5. Target API (`target.spec.ts`)
|
|
153
|
+
**Priority: MEDIUM** - Target management
|
|
154
|
+
|
|
155
|
+
Missing tests:
|
|
156
|
+
- `Browser.waitForTarget` with abort
|
|
157
|
+
|
|
158
|
+
**Ruby status:** Ported to `spec/integration/target_spec.rb`, with AbortSignal test skipped.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Medium Priority Missing Features
|
|
163
|
+
|
|
164
|
+
### 6. Download API (`download.spec.ts`)
|
|
165
|
+
**Priority: MEDIUM** - File download handling
|
|
166
|
+
|
|
167
|
+
Node.js tests:
|
|
168
|
+
- `Browser.createBrowserContext > should download to configured location`
|
|
169
|
+
- `Browser.createBrowserContext > should not download to location`
|
|
170
|
+
|
|
171
|
+
**Ruby status:** Ported (see `spec/integration/download_spec.rb`).
|
|
172
|
+
|
|
173
|
+
### 7. Proxy Support (`proxy.spec.ts`)
|
|
174
|
+
**Priority: MEDIUM** - Proxy configuration
|
|
175
|
+
|
|
176
|
+
**Ruby status:** Not implemented. Would need proxy launch options.
|
|
177
|
+
|
|
178
|
+
### 8. Device Request Prompt (`device-request-prompt.spec.ts`)
|
|
179
|
+
**Priority: LOW** - Bluetooth/USB device selection
|
|
180
|
+
|
|
181
|
+
**Ruby status:** Not implemented. Specialized feature.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Migration Progress Tracking
|
|
186
|
+
|
|
187
|
+
### Phase 1: Core Functionality Gaps (High Priority)
|
|
188
|
+
- [ ] Port `accessibility.spec.ts` tests → Create `accessibility_spec.rb`
|
|
189
|
+
- [x] Port missing `navigation.spec.ts` tests → Create `navigation_spec.rb`
|
|
190
|
+
- [x] Port missing `network.spec.ts` tests → Expand `network_spec.rb`
|
|
191
|
+
- [x] Port missing `target.spec.ts` tests → Create `target_spec.rb` (AbortSignal pending)
|
|
192
|
+
|
|
193
|
+
### Phase 2: New APIs (High Priority)
|
|
194
|
+
- [ ] Implement Locator API and port `locator.spec.ts` tests
|
|
195
|
+
|
|
196
|
+
### Phase 3: Medium Priority
|
|
197
|
+
- [x] Port `download.spec.ts` tests
|
|
198
|
+
- [ ] Port `proxy.spec.ts` tests
|
|
199
|
+
- [x] Port missing `waittask.spec.ts` tests (especially `Frame.waitForFunction`)
|
|
200
|
+
|
|
201
|
+
### Phase 4: Clean Up
|
|
202
|
+
- [ ] Move Ruby-only tests to `_ext_spec.rb` files
|
|
203
|
+
- [ ] Port remaining edge case tests from Node.js
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Detailed File-by-File Comparison
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 1. browsercontext.spec.ts vs browser_context_spec.rb
|
|
212
|
+
|
|
213
|
+
### Ported Tests
|
|
214
|
+
| Node.js Test | Ruby Test | Status |
|
|
215
|
+
|--------------|-----------|--------|
|
|
216
|
+
| should have default context | should have default context | [PORTED] |
|
|
217
|
+
| should not be able to close default context | cannot be closed | [PORTED] |
|
|
218
|
+
| should create new context | should create new incognito context | [PORTED] |
|
|
219
|
+
| should close all belonging targets once closing context | should close all belonging targets once closing context | [PORTED] |
|
|
220
|
+
| window.open should use parent tab context | window.open should use parent tab context | [PORTED] |
|
|
221
|
+
| should fire target events | should fire target events | [PORTED] |
|
|
222
|
+
| should wait for a target | should wait for a target | [PORTED] |
|
|
223
|
+
| should timeout waiting for a non-existent target | should timeout waiting for a non-existent target | [PORTED] |
|
|
224
|
+
| should isolate localStorage and cookies | should isolate localStorage and cookies | [PORTED] |
|
|
225
|
+
| should work across sessions | should work across sessions | [PORTED] |
|
|
226
|
+
| should provide a context id | should provide a context id | [PORTED] |
|
|
227
|
+
|
|
228
|
+
### Missing in Ruby
|
|
229
|
+
| Node.js Test | Notes |
|
|
230
|
+
|--------------|-------|
|
|
231
|
+
| BrowserContext.overridePermissions > should be prompt by default | [MISSING IN RUBY] |
|
|
232
|
+
| BrowserContext.overridePermissions > should deny permission when not listed | [MISSING IN RUBY] |
|
|
233
|
+
| BrowserContext.overridePermissions > should fail when bad permission is given | [MISSING IN RUBY] |
|
|
234
|
+
| BrowserContext.overridePermissions > should grant permission when listed | [MISSING IN RUBY] |
|
|
235
|
+
| BrowserContext.overridePermissions > should reset permissions | [MISSING IN RUBY] |
|
|
236
|
+
| BrowserContext.overridePermissions > should trigger permission onchange | [MISSING IN RUBY] |
|
|
237
|
+
| BrowserContext.overridePermissions > should isolate permissions between browser contexts | [MISSING IN RUBY] |
|
|
238
|
+
| BrowserContext.overridePermissions > should grant persistent-storage | [MISSING IN RUBY] |
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 2. browser.spec.ts vs browser_spec.rb
|
|
243
|
+
|
|
244
|
+
### Ported Tests
|
|
245
|
+
| Node.js Test | Ruby Test | Status |
|
|
246
|
+
|--------------|-----------|--------|
|
|
247
|
+
| Browser.version > should return version | should return version | [PORTED] |
|
|
248
|
+
| Browser.userAgent > should include Browser engine | should include WebKit | [PORTED] |
|
|
249
|
+
| Browser.target > should return browser target | should return browser target | [PORTED] |
|
|
250
|
+
| Browser.isConnected > should set the browser connected state | should return the browser connected state | [PORTED] |
|
|
251
|
+
|
|
252
|
+
### Missing in Ruby
|
|
253
|
+
| Node.js Test | Notes |
|
|
254
|
+
|--------------|-------|
|
|
255
|
+
| Browser.userAgent > should include Browser name | [MISSING IN RUBY] |
|
|
256
|
+
| Browser.process > should return child_process instance | [MISSING IN RUBY] |
|
|
257
|
+
| Browser.process > should not return child_process for remote browser | [MISSING IN RUBY] |
|
|
258
|
+
| Browser.process > should keep connected after the last page is closed | [MISSING IN RUBY] |
|
|
259
|
+
| Browser.screens > should return default screen info | [MISSING IN RUBY] |
|
|
260
|
+
| Browser.add\|removeScreen > should add and remove a screen | [MISSING IN RUBY] |
|
|
261
|
+
| Browser.get\|setWindowBounds > should get and set browser window bounds | [MISSING IN RUBY] |
|
|
262
|
+
| Browser.get\|setWindowBounds > should set and get browser window maximized state | [MISSING IN RUBY] |
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## 3. click.spec.ts vs click_spec.rb
|
|
267
|
+
|
|
268
|
+
### Ported Tests (All tests appear to be faithfully ported)
|
|
269
|
+
| Node.js Test | Ruby Test | Status |
|
|
270
|
+
|--------------|-----------|--------|
|
|
271
|
+
| should click the button | should click the button | [PORTED] |
|
|
272
|
+
| should click svg | should click svg | [PORTED] |
|
|
273
|
+
| should click the button if window.Node is removed | should click the button if window.Node is removed | [PORTED] |
|
|
274
|
+
| should click on a span with an inline element inside | should click on a span with an inline element inside | [PORTED] |
|
|
275
|
+
| should not throw UnhandledPromiseRejection when page closes | should not throw UnhandledPromiseRejection when page closes | [PORTED] |
|
|
276
|
+
| should click the button after navigation | should click the button after navigation | [PORTED] |
|
|
277
|
+
| should click with disabled javascript | should click with disabled javascript | [PORTED] |
|
|
278
|
+
| should scroll and click with disabled javascript | should scroll and click with disabled javascript | [PORTED] |
|
|
279
|
+
| should click when one of inline box children is outside of viewport | should click when one of inline box children is outside of viewport | [PORTED] |
|
|
280
|
+
| should select the text by triple clicking | should select the text by triple clicking | [PORTED] |
|
|
281
|
+
| should click offscreen buttons | should click offscreen buttons | [PORTED] |
|
|
282
|
+
| should click half-offscreen elements | should click half-offscreen elements | [PORTED] |
|
|
283
|
+
| should click wrapped links | should click wrapped links | [PORTED] |
|
|
284
|
+
| should click on checkbox input and toggle | should click on checkbox input and toggle | [PORTED] |
|
|
285
|
+
| should click on checkbox label and toggle | should click on checkbox label and toggle | [PORTED] |
|
|
286
|
+
| should fail to click a missing button | should fail to click a missing button | [PORTED] |
|
|
287
|
+
| should not hang with touch-enabled viewports | should not hang with touch-enabled viewports | [PORTED] |
|
|
288
|
+
| should scroll and click the button | should scroll and click the button | [PORTED] |
|
|
289
|
+
| should double click the button | should double click the button | [PORTED] |
|
|
290
|
+
| should double multiple times | should double multiple times | [PORTED] |
|
|
291
|
+
| should click a partially obscured button | should click a partially obscured button | [PORTED] |
|
|
292
|
+
| should click a rotated button | should click a rotated button | [PORTED] |
|
|
293
|
+
| should fire contextmenu event on right click | should fire contextmenu event on right click | [PORTED] |
|
|
294
|
+
| should fire aux event on middle click | should fire aux event on middle click | [PORTED] |
|
|
295
|
+
| should fire back click | should fire back click | [PORTED] |
|
|
296
|
+
| should fire forward click | should fire forward click | [PORTED] |
|
|
297
|
+
| should click links which cause navigation | should click links which cause navigation | [PORTED] |
|
|
298
|
+
| should click the button inside an iframe | should click the button inside an iframe | [PORTED] |
|
|
299
|
+
| should click the button with fixed position inside an iframe | should click the button with fixed position inside an iframe | [PORTED] |
|
|
300
|
+
| should click the button with deviceScaleFactor set | should click the button with deviceScaleFactor set | [PORTED] |
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 4. cookies.spec.ts vs cookies_spec.rb
|
|
305
|
+
|
|
306
|
+
### Ported Tests
|
|
307
|
+
| Node.js Test | Ruby Test | Status |
|
|
308
|
+
|--------------|-----------|--------|
|
|
309
|
+
| Page.cookies > should return no cookies in pristine browser context | should return no cookies in pristine browser context | [PORTED] |
|
|
310
|
+
| Page.cookies > should get a cookie | should get a cookie | [PORTED] |
|
|
311
|
+
| Page.cookies > should properly report httpOnly cookie | should properly report httpOnly cookie | [PORTED] |
|
|
312
|
+
| Page.cookies > should properly report "Strict" sameSite cookie | should properly report "Strict" sameSite cookie | [PORTED] |
|
|
313
|
+
| Page.cookies > should properly report "Lax" sameSite cookie | should properly report "Lax" sameSite cookie | [PORTED] |
|
|
314
|
+
| Page.cookies > should get multiple cookies | should get multiple cookies | [PORTED] |
|
|
315
|
+
| Page.cookies > should get cookies from multiple urls | should get cookies from multiple urls | [PORTED] |
|
|
316
|
+
| Page.setCookie > should work | should work | [PORTED] |
|
|
317
|
+
| Page.setCookie > should isolate cookies in browser contexts | should isolate cookies in browser contexts | [PORTED] |
|
|
318
|
+
| Page.setCookie > should set multiple cookies | should set multiple cookies | [PORTED] |
|
|
319
|
+
| Page.setCookie > should have \|expires\| set to \|-1\| for session cookies | should have \|expires\| set to \|-1\| for session cookies | [PORTED] |
|
|
320
|
+
| Page.setCookie > should set cookie with reasonable defaults | should set cookie with reasonable defaults | [PORTED] |
|
|
321
|
+
| Page.setCookie > should set a cookie with a path | should set a cookie with a path | [PORTED] |
|
|
322
|
+
| Page.setCookie > should not set a cookie on a blank page | should not set a cookie on a blank page | [PORTED] |
|
|
323
|
+
| Page.setCookie > should not set a cookie with blank page URL | should not set a cookie with blank page URL | [PORTED] |
|
|
324
|
+
| Page.setCookie > should not set a cookie on a data URL page | should not set a cookie on a data URL page | [PORTED] |
|
|
325
|
+
| Page.setCookie > should default to setting secure cookie for HTTPS websites | should default to setting secure cookie for HTTPS websites | [PORTED] |
|
|
326
|
+
| Page.setCookie > should be able to set insecure cookie for HTTP website | should be able to set unsecure cookie for HTTP website | [PORTED] |
|
|
327
|
+
| Page.setCookie > should set a cookie on a different domain | should set a cookie on a different domain | [PORTED] |
|
|
328
|
+
| Page.setCookie > should set cookies from a frame | should set cookies from a frame | [PORTED] |
|
|
329
|
+
| Page.deleteCookie > should delete cookie | should work | [PORTED] |
|
|
330
|
+
|
|
331
|
+
### Missing in Ruby
|
|
332
|
+
| Node.js Test | Notes |
|
|
333
|
+
|--------------|-------|
|
|
334
|
+
| Page.cookies > should get cookies from subdomain if the domain field allows it | [MISSING IN RUBY] |
|
|
335
|
+
| Page.cookies > should not get cookies from subdomain if the cookie is for top-level domain | [MISSING IN RUBY] |
|
|
336
|
+
| Page.cookies > should get cookies from nested path | [MISSING IN RUBY] |
|
|
337
|
+
| Page.cookies > should not get cookies from not nested path | [MISSING IN RUBY] |
|
|
338
|
+
| Page.setCookie > should set cookie with all available properties | [MISSING IN RUBY] |
|
|
339
|
+
| Page.setCookie > should set a cookie with a partitionKey | [MISSING IN RUBY] |
|
|
340
|
+
| Page.setCookie > should set secure same-site cookies from a frame | [MISSING IN RUBY] (commented out in Ruby) |
|
|
341
|
+
| Page.deleteCookie > should not delete cookie for different domain | [MISSING IN RUBY] |
|
|
342
|
+
| Page.deleteCookie > should delete cookie for specified URL | [MISSING IN RUBY] |
|
|
343
|
+
| Page.deleteCookie > should delete cookie for specified URL regardless of the current page | [MISSING IN RUBY] |
|
|
344
|
+
| Page.deleteCookie > should only delete cookie from the default partition if partitionkey is not specified | [MISSING IN RUBY] |
|
|
345
|
+
| Page.deleteCookie > should delete cookie with partition key if partition key is specified | [MISSING IN RUBY] |
|
|
346
|
+
|
|
347
|
+
### Ruby Only
|
|
348
|
+
| Ruby Test | Notes |
|
|
349
|
+
|-----------|-------|
|
|
350
|
+
| should fail if specifying wrong cookie | [RUBY ONLY] - Ruby-specific validation |
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## 5. dialog.spec.ts vs dialog_spec.rb
|
|
355
|
+
|
|
356
|
+
### Ported Tests (Fully ported)
|
|
357
|
+
| Node.js Test | Ruby Test | Status |
|
|
358
|
+
|--------------|-----------|--------|
|
|
359
|
+
| should fire | should fire | [PORTED] |
|
|
360
|
+
| should allow accepting prompts | should allow accepting prompts | [PORTED] |
|
|
361
|
+
| should dismiss the prompt | should dismiss the prompt | [PORTED] |
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## 6. elementhandle.spec.ts vs element_handle_spec.rb
|
|
366
|
+
|
|
367
|
+
### Ported Tests
|
|
368
|
+
| Node.js Test | Ruby Test | Status |
|
|
369
|
+
|--------------|-----------|--------|
|
|
370
|
+
| ElementHandle.boundingBox > should work | should work | [PORTED] |
|
|
371
|
+
| ElementHandle.boundingBox > should handle nested frames | should handle nested frames | [PORTED] |
|
|
372
|
+
| ElementHandle.boundingBox > should return null for invisible elements | should return null for invisible elements | [PORTED] |
|
|
373
|
+
| ElementHandle.boundingBox > should force a layout | should force a layout | [PORTED] |
|
|
374
|
+
| ElementHandle.boundingBox > should work with SVG nodes | should work with SVG nodes | [PORTED] |
|
|
375
|
+
| ElementHandle.boxModel > should work | should work | [PORTED] |
|
|
376
|
+
| ElementHandle.boxModel > should return null for invisible elements | should return null for invisible elements | [PORTED] |
|
|
377
|
+
| ElementHandle.boxModel > should correctly compute box model with offsets | should correctly compute box model with offsets | [PORTED] |
|
|
378
|
+
| ElementHandle.contentFrame > should work | should work | [PORTED] |
|
|
379
|
+
| ElementHandle.isVisible and ElementHandle.isHidden > should work | should work | [PORTED] |
|
|
380
|
+
| ElementHandle.click > should work | should work | [PORTED] |
|
|
381
|
+
| ElementHandle.click > should return Point data | should return Point data | [PORTED] |
|
|
382
|
+
| ElementHandle.click > should work for Shadow DOM v1 | should work for Shadow DOM v1 | [PORTED] |
|
|
383
|
+
| ElementHandle.click > should not work for TextNodes | should throw for TextNodes | [PORTED] |
|
|
384
|
+
| ElementHandle.click > should throw for detached nodes | should throw for detached nodes | [PORTED] |
|
|
385
|
+
| ElementHandle.click > should throw for hidden nodes | should throw for hidden nodes | [PORTED] |
|
|
386
|
+
| ElementHandle.click > should throw for recursively hidden nodes | should throw for recursively hidden nodes | [PORTED] |
|
|
387
|
+
| ElementHandle.click > should throw for <br> elements | should throw for <br> elements | [PORTED] |
|
|
388
|
+
| ElementHandle.touchStart > should work | should work | [PORTED] |
|
|
389
|
+
| ElementHandle.touchStart > should work with the returned Touch | should work with the returned Touch | [PORTED] |
|
|
390
|
+
| ElementHandle.touchMove > should work | should work | [PORTED] |
|
|
391
|
+
| ElementHandle.touchMove > should work with a pre-existing Touch | should work with a pre-existing Touch | [PORTED] |
|
|
392
|
+
| ElementHandle.touchEnd > should work | should work | [PORTED] |
|
|
393
|
+
| ElementHandle.clickablePoint > should work | should work | [PORTED] |
|
|
394
|
+
| ElementHandle.clickablePoint > should not work if the click box is not visible | should not work if click box is not visible | [PORTED] |
|
|
395
|
+
| ElementHandle.clickablePoint > should not work if the click box is not visible due to the iframe | should not work if click box is not visible due to iframe | [PORTED] |
|
|
396
|
+
| ElementHandle.clickablePoint > should work for iframes | should work for iframes | [PORTED] |
|
|
397
|
+
| Element.waitForSelector > should wait correctly with waitForSelector on an element | should wait correctly with waitForSelector on an element | [PORTED] |
|
|
398
|
+
| ElementHandle.hover > should work | should work | [PORTED] |
|
|
399
|
+
| ElementHandle.isIntersectingViewport > should work | should work | [PORTED] |
|
|
400
|
+
| ElementHandle.isIntersectingViewport > should work with threshold | should work with threshold | [PORTED] |
|
|
401
|
+
| ElementHandle.isIntersectingViewport > should work with threshold of 1 | should work with threshold of 1 | [PORTED] |
|
|
402
|
+
| ElementHandle.isIntersectingViewport > should work with svg elements | should work with svg elements | [PORTED] |
|
|
403
|
+
| Custom queries > should register and unregister | should register and unregister | [PORTED] |
|
|
404
|
+
| Custom queries > should throw with invalid query names | should throw with invalid query names | [PORTED] |
|
|
405
|
+
| Custom queries > should work for multiple elements | should work for multiple elements | [PORTED] |
|
|
406
|
+
| Custom queries > should eval correctly | should eval correctly | [PORTED] |
|
|
407
|
+
| Custom queries > should work when both queryOne and queryAll are registered | should work when both queryOne and queryAll are registered | [PORTED] |
|
|
408
|
+
| ElementHandle.toElement > should work | should work | [PORTED] |
|
|
409
|
+
| ElementHandle.dispose > should dispose cached isolated handler | should dispose element handles | [PORTED] |
|
|
410
|
+
| ElementHandle.move > should work | should work | [PORTED] |
|
|
411
|
+
|
|
412
|
+
### Missing in Ruby
|
|
413
|
+
| Node.js Test | Notes |
|
|
414
|
+
|--------------|-------|
|
|
415
|
+
| Custom queries > should wait correctly with waitForSelector | [MISSING IN RUBY] (commented out) |
|
|
416
|
+
| Custom queries > should wait correctly with waitForSelector on an element | [MISSING IN RUBY] (commented out) |
|
|
417
|
+
| Custom queries > should work with function shorthands | [MISSING IN RUBY] |
|
|
418
|
+
| ElementHandle[Symbol.dispose] > should work | [MISSING IN RUBY] |
|
|
419
|
+
| ElementHandle[Symbol.asyncDispose] > should work | [MISSING IN RUBY] |
|
|
420
|
+
|
|
421
|
+
### Ruby Only
|
|
422
|
+
| Ruby Test | Notes |
|
|
423
|
+
|-----------|-------|
|
|
424
|
+
| #wait_for_xpath > should wait correctly with waitForXPath on an element | [RUBY ONLY] - XPath specific test |
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## 7. evaluation.spec.ts vs evaluation_spec.rb
|
|
429
|
+
|
|
430
|
+
### Ported Tests (Comprehensive porting)
|
|
431
|
+
Most tests are faithfully ported. Notable coverage includes:
|
|
432
|
+
- All basic `Page.evaluate` tests
|
|
433
|
+
- BigInt, NaN, Infinity, -Infinity transfer tests
|
|
434
|
+
- Arrays, RegEx transfer tests
|
|
435
|
+
- Error handling tests
|
|
436
|
+
- `Page.evaluateOnNewDocument` tests
|
|
437
|
+
- `Page.removeScriptToEvaluateOnNewDocument` tests
|
|
438
|
+
- `Frame.evaluate` tests
|
|
439
|
+
|
|
440
|
+
### Missing in Ruby
|
|
441
|
+
| Node.js Test | Notes |
|
|
442
|
+
|--------------|-------|
|
|
443
|
+
| Page.evaluateOnNewDocument > should work with CSP | Partially implemented (test exists but CSP handling may differ) |
|
|
444
|
+
|
|
445
|
+
---
|
|
446
|
+
|
|
447
|
+
## 8. frame.spec.ts vs frame_spec.rb
|
|
448
|
+
|
|
449
|
+
### Ported Tests
|
|
450
|
+
| Node.js Test | Ruby Test | Status |
|
|
451
|
+
|--------------|-----------|--------|
|
|
452
|
+
| Frame.evaluateHandle > should work | should work | [PORTED] |
|
|
453
|
+
| Frame.evaluate > should throw for detached frames | should throw for detached frames | [PORTED] |
|
|
454
|
+
| Frame.evaluate > allows readonly array to be an argument | allows readonly array to be an argument | [PORTED] |
|
|
455
|
+
| Frame.page > should retrieve the page from a frame | should retrieve the page from a frame | [PORTED] |
|
|
456
|
+
| Frame Management > should handle nested frames | should handle nested frames | [PORTED] |
|
|
457
|
+
| Frame Management > should send events when frames are manipulated dynamically | should send events when frames are manipulated dynamically | [PORTED] |
|
|
458
|
+
| Frame Management > should send "framenavigated" when navigating on anchor URLs | should send "framenavigated" when navigating on anchor URLs | [PORTED] |
|
|
459
|
+
| Frame Management > should persist mainFrame on cross-process navigation | should persist mainFrame on cross-process navigation | [PORTED] |
|
|
460
|
+
| Frame Management > should not send attach/detach events for main frame | should not send attach/detach events for main frame | [PORTED] |
|
|
461
|
+
| Frame Management > should detach child frames on navigation | should detach child frames on navigation | [PORTED] |
|
|
462
|
+
| Frame Management > should support framesets | should support framesets | [PORTED] |
|
|
463
|
+
| Frame Management > should click elements in a frameset | should click elements in a frameset | [PORTED] |
|
|
464
|
+
| Frame Management > should report frame from-inside shadow DOM | should report frame from-inside shadow DOM | [PORTED] |
|
|
465
|
+
| Frame Management > should report frame.parent() | should report frame.parent() | [PORTED] |
|
|
466
|
+
| Frame Management > should report different frame instance when frame re-attaches | should report different frame instance when frame re-attaches | [PORTED] |
|
|
467
|
+
| Frame Management > should support url fragment | should support url fragment | [PORTED] |
|
|
468
|
+
| Frame Management > should support lazy frames | should support lazy frames | [PORTED] |
|
|
469
|
+
| Frame.client > should return the client instance | should return the client instance | [PORTED] |
|
|
470
|
+
| Frame.prototype.frameElement > should work | should work | [PORTED] |
|
|
471
|
+
| Frame.prototype.frameElement > should handle shadow roots | should handle shadow roots | [PORTED] |
|
|
472
|
+
| Frame.prototype.frameElement > should return ElementHandle in the correct world | should return ElementHandle in the correct world | [PORTED] |
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## 9. input.spec.ts vs input_spec.rb
|
|
477
|
+
|
|
478
|
+
### Ported Tests (All major tests ported)
|
|
479
|
+
| Node.js Test | Ruby Test | Status |
|
|
480
|
+
|--------------|-----------|--------|
|
|
481
|
+
| ElementHandle.uploadFile > should upload the file | should upload the file | [PORTED] |
|
|
482
|
+
| ElementHandle.uploadFile > should read the file | should read the file | [PORTED] |
|
|
483
|
+
| Page.waitForFileChooser > should work when file input is attached to DOM | should work when file input is attached to DOM | [PORTED] |
|
|
484
|
+
| Page.waitForFileChooser > should work when file input is not attached to DOM | should work when file input is not attached to DOM | [PORTED] |
|
|
485
|
+
| Page.waitForFileChooser > should respect timeout | should respect timeout | [PORTED] |
|
|
486
|
+
| Page.waitForFileChooser > should respect default timeout when there is no custom timeout | should respect default timeout when there is no custom timeout | [PORTED] |
|
|
487
|
+
| Page.waitForFileChooser > should prioritize exact timeout over default timeout | should prioritize exact timeout over default timeout | [PORTED] |
|
|
488
|
+
| Page.waitForFileChooser > should work with no timeout | should work with no timeout | [PORTED] |
|
|
489
|
+
| Page.waitForFileChooser > should return the same file chooser when there are many watchdogs simultaneously | should return the same file chooser when there are many watchdogs simultaneously | [PORTED] |
|
|
490
|
+
| FileChooser.accept > should accept single file | should accept single file | [PORTED] |
|
|
491
|
+
| FileChooser.accept > should be able to read selected file | should be able to read selected file | [PORTED] |
|
|
492
|
+
| FileChooser.accept > should be able to reset selected files with empty file list | should be able to reset selected files with empty file list | [PORTED] |
|
|
493
|
+
| FileChooser.accept > should not accept multiple files for single-file input | should not accept multiple files for single-file input | [PORTED] |
|
|
494
|
+
| FileChooser.accept > should succeed even for non-existent files | should succeed even for non-existent files | [PORTED] |
|
|
495
|
+
| FileChooser.accept > should error on read of non-existent files | should error on read of non-existent files | [PORTED] |
|
|
496
|
+
| FileChooser.accept > should fail when accepting file chooser twice | should fail when accepting file chooser twice | [PORTED] |
|
|
497
|
+
| FileChooser.cancel > should cancel dialog | should cancel dialog | [PORTED] |
|
|
498
|
+
| FileChooser.cancel > should fail when canceling file chooser twice | should fail when canceling file chooser twice | [PORTED] |
|
|
499
|
+
| FileChooser.isMultiple > should work for single file pick | should work for single file pick | [PORTED] |
|
|
500
|
+
| FileChooser.isMultiple > should work for "multiple" | should work for "multiple" | [PORTED] |
|
|
501
|
+
| FileChooser.isMultiple > should work for "webkitdirectory" | should work for "webkitdirectory" | [PORTED] |
|
|
502
|
+
|
|
503
|
+
### Missing in Ruby
|
|
504
|
+
| Node.js Test | Notes |
|
|
505
|
+
|--------------|-------|
|
|
506
|
+
| Page.waitForFileChooser > should be able to abort | [MISSING IN RUBY] - AbortController not supported |
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## 10. jshandle.spec.ts vs js_handle_spec.rb
|
|
511
|
+
|
|
512
|
+
### Ported Tests (Comprehensive)
|
|
513
|
+
All major tests are ported including:
|
|
514
|
+
- `Page.evaluateHandle` tests
|
|
515
|
+
- `JSHandle.getProperty` tests
|
|
516
|
+
- `JSHandle.jsonValue` tests (including dates, circular objects)
|
|
517
|
+
- `JSHandle.getProperties` tests
|
|
518
|
+
- `JSHandle.asElement` tests
|
|
519
|
+
- `JSHandle.toString` tests
|
|
520
|
+
- Symbol dispose tests
|
|
521
|
+
- `JSHandle.move` tests
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
## 11. keyboard.spec.ts vs keyboard_spec.rb
|
|
526
|
+
|
|
527
|
+
### Ported Tests (All major tests ported)
|
|
528
|
+
All keyboard tests appear to be faithfully ported including:
|
|
529
|
+
- Type into textarea
|
|
530
|
+
- Arrow key movement
|
|
531
|
+
- Keyboard shortcuts/commands
|
|
532
|
+
- `ElementHandle.press`
|
|
533
|
+
- `sendCharacter` tests
|
|
534
|
+
- Modifier keys (Shift, Alt, Control)
|
|
535
|
+
- Multiple modifiers
|
|
536
|
+
- Proper codes while typing
|
|
537
|
+
- Repeat property
|
|
538
|
+
- Unicode/emoji typing
|
|
539
|
+
- Location specification
|
|
540
|
+
- Meta key tests
|
|
541
|
+
|
|
542
|
+
---
|
|
543
|
+
|
|
544
|
+
## 12. launcher.spec.ts vs launcher_spec.rb
|
|
545
|
+
|
|
546
|
+
### Ported Tests
|
|
547
|
+
| Node.js Test | Ruby Test | Status |
|
|
548
|
+
|--------------|-----------|--------|
|
|
549
|
+
| Browser.disconnect > should reject navigation when browser closes | should reject navigation when browser closes | [PORTED] |
|
|
550
|
+
| Browser.disconnect > should reject waitForSelector when browser closes | should reject wait_for_selector when browser closes | [PORTED] |
|
|
551
|
+
| Browser.close > should terminate network waiters | should terminate network waiters | [PORTED] |
|
|
552
|
+
| Puppeteer.launch > should reject all promises when browser is closed | should reject all promises when browser is closed | [PORTED] |
|
|
553
|
+
| Puppeteer.launch > should reject if executable path is invalid | should reject if executable path is invalid | [PORTED] |
|
|
554
|
+
| Puppeteer.launch > userDataDir option | user_data_dir option | [PORTED] |
|
|
555
|
+
| Puppeteer.launch > userDataDir argument | user_data_dir argument | [PORTED] |
|
|
556
|
+
| Puppeteer.launch > userDataDir option should restore state | user_data_dir option should restore state | [PORTED] |
|
|
557
|
+
| Puppeteer.launch > userDataDir option should restore cookies | user_data_dir option should restore cookies | [PORTED] |
|
|
558
|
+
| Puppeteer.launch > should filter out ignored default arguments in Chrome | should filter out ignored default arguments | [PORTED] |
|
|
559
|
+
| Puppeteer.launch > should have default URL when launching browser | should have default URL when launching browser | [PORTED] |
|
|
560
|
+
| Puppeteer.launch > should have custom URL when launching browser | should have custom URL when launching browser | [PORTED] |
|
|
561
|
+
| Puppeteer.launch > should pass the timeout parameter to browser.waitForTarget | should pass the timeout parameter to browser.waitForTarget | [PORTED] |
|
|
562
|
+
| Puppeteer.launch > should set the default viewport | should set the default viewport | [PORTED] |
|
|
563
|
+
| Puppeteer.launch > should disable the default viewport | should disable the default viewport | [PORTED] |
|
|
564
|
+
| Puppeteer.launch > should set the debugging port | should set the debugging port | [PORTED] |
|
|
565
|
+
| Puppeteer.connect > should be able to connect multiple times to the same browser | should be able to connect multiple times to the same browser | [PORTED] |
|
|
566
|
+
| Puppeteer.connect > should be able to close remote browser | should be able to close remote browser | [PORTED] |
|
|
567
|
+
| Puppeteer.connect > should be able to reconnect to a disconnected browser | should be able to reconnect to a disconnected browser | [PORTED] |
|
|
568
|
+
| Puppeteer.connect > should be able to connect to the same page simultaneously | should be able to connect to the same page simultaneously | [PORTED] |
|
|
569
|
+
| Puppeteer.executablePath > should work | returns browser executable path | [PORTED] |
|
|
570
|
+
| Browser target events > should work | should work | [PORTED] |
|
|
571
|
+
| Browser.Events.disconnected > should be emitted when: browser gets closed, disconnected or underlying websocket gets closed | should be emitted when: browser gets closed, disconnected or underlying websocket gets closed | [PORTED] |
|
|
572
|
+
|
|
573
|
+
### Missing in Ruby
|
|
574
|
+
| Node.js Test | Notes |
|
|
575
|
+
|--------------|-------|
|
|
576
|
+
| Puppeteer.launch > can launch and close the browser | [MISSING IN RUBY] |
|
|
577
|
+
| Puppeteer.launch > can launch multiple instances without node warnings | [MISSING IN RUBY] |
|
|
578
|
+
| Puppeteer.launch > should close browser with beforeunload page | [MISSING IN RUBY] |
|
|
579
|
+
| Puppeteer.launch > tmp profile should be cleaned up | [MISSING IN RUBY] |
|
|
580
|
+
| Puppeteer.launch > userDataDir option restores preferences | [MISSING IN RUBY] |
|
|
581
|
+
| Puppeteer.launch > userDataDir argument with non-existent dir | [MISSING IN RUBY] |
|
|
582
|
+
| Puppeteer.launch > should return the default arguments | [MISSING IN RUBY] |
|
|
583
|
+
| Puppeteer.launch > should report the correct product | [MISSING IN RUBY] |
|
|
584
|
+
| Puppeteer.launch > should filter out ignored default argument in Firefox | [MISSING IN RUBY] |
|
|
585
|
+
| Puppeteer.launch > should work with timeout = 0 | [MISSING IN RUBY] |
|
|
586
|
+
| Puppeteer.launch > should not allow setting debuggingPort and pipe | [MISSING IN RUBY] |
|
|
587
|
+
| Puppeteer.launch > throws an error if executable path is not valid with pipe=true | [MISSING IN RUBY] |
|
|
588
|
+
| Puppeteer.connect > should be able to connect to a browser with no page targets | [MISSING IN RUBY] |
|
|
589
|
+
| Puppeteer.connect > should support acceptInsecureCerts option | [MISSING IN RUBY] |
|
|
590
|
+
| Puppeteer.connect > should support targetFilter option in puppeteer.launch | [MISSING IN RUBY] |
|
|
591
|
+
| Puppeteer.connect > should support targetFilter option | [MISSING IN RUBY] |
|
|
592
|
+
| Puppeteer.connect > should be able to reconnect | [MISSING IN RUBY] |
|
|
593
|
+
| Puppeteer.executablePath > returns executablePath for channel | [MISSING IN RUBY] |
|
|
594
|
+
| Puppeteer.executablePath > when executable path is configured > its value is used | [MISSING IN RUBY] |
|
|
595
|
+
|
|
596
|
+
### Ruby Only
|
|
597
|
+
| Ruby Test | Notes |
|
|
598
|
+
|-----------|-------|
|
|
599
|
+
| should work with no default arguments | [RUBY ONLY] |
|
|
600
|
+
| should take fullPage screenshots when defaultViewport is null | [RUBY ONLY] |
|
|
601
|
+
| should take Element screenshots when defaultViewport is null | [RUBY ONLY] |
|
|
602
|
+
| Puppeteer.default_args tests | [RUBY ONLY] - Ruby-specific API |
|
|
603
|
+
| #product | [RUBY ONLY] |
|
|
604
|
+
|
|
605
|
+
---
|
|
606
|
+
|
|
607
|
+
## 13. mouse.spec.ts vs mouse_spec.rb
|
|
608
|
+
|
|
609
|
+
### Ported Tests (All major tests ported)
|
|
610
|
+
| Node.js Test | Ruby Test | Status |
|
|
611
|
+
|--------------|-----------|--------|
|
|
612
|
+
| should click the document | should click the document | [PORTED] |
|
|
613
|
+
| should resize the textarea | should resize the textarea | [PORTED] |
|
|
614
|
+
| should select the text with mouse | should select the text with mouse | [PORTED] |
|
|
615
|
+
| should trigger hover state | should trigger hover state | [PORTED] |
|
|
616
|
+
| should trigger hover state with removed window.Node | should trigger hover state with removed window.Node | [PORTED] |
|
|
617
|
+
| should set modifier keys on click | should set modifier keys on click | [PORTED] |
|
|
618
|
+
| should send mouse wheel events | should send mouse wheel events | [PORTED] |
|
|
619
|
+
| should set ctrlKey on the wheel event | should set ctrlKey on the wheel event | [PORTED] |
|
|
620
|
+
| should tween mouse movement | should tween mouse movement | [PORTED] |
|
|
621
|
+
| should work with mobile viewports and cross process navigations | should work with mobile viewports and cross process navigations | [PORTED] |
|
|
622
|
+
| should not throw if buttons are pressed twice | should not throw if buttons are pressed twice | [PORTED] |
|
|
623
|
+
| should not throw if clicking in parallel | should not throw if clicking in parallel | [PORTED] |
|
|
624
|
+
| should reset properly | should reset properly | [PORTED] |
|
|
625
|
+
| should evaluate before mouse event | should evaluate before mouse event | [PORTED] |
|
|
626
|
+
|
|
627
|
+
---
|
|
628
|
+
|
|
629
|
+
## 14. network.spec.ts vs network_spec.rb
|
|
630
|
+
|
|
631
|
+
### Ported Tests
|
|
632
|
+
| Node.js Test | Ruby Test | Status |
|
|
633
|
+
|--------------|-----------|--------|
|
|
634
|
+
| Request.initiator > should return the initiator | shoud return the initiator | [PORTED] |
|
|
635
|
+
| Response.statusText > should work | should work | [PORTED] |
|
|
636
|
+
|
|
637
|
+
### Missing in Ruby (Significant gaps)
|
|
638
|
+
| Node.js Test | Notes |
|
|
639
|
+
|--------------|-------|
|
|
640
|
+
| Page.Events.Request > should fire for navigation requests | [MISSING IN RUBY] |
|
|
641
|
+
| Page.Events.Request > should fire for iframes | [MISSING IN RUBY] |
|
|
642
|
+
| Page.Events.Request > should fire for fetches | [MISSING IN RUBY] |
|
|
643
|
+
| Request.frame > (all tests) | [MISSING IN RUBY] |
|
|
644
|
+
| Request.headers > (all tests) | [MISSING IN RUBY] |
|
|
645
|
+
| Response.headers > should work | [MISSING IN RUBY] |
|
|
646
|
+
| Response.fromCache > (all tests) | [MISSING IN RUBY] |
|
|
647
|
+
| Response.fromServiceWorker > (all tests) | [MISSING IN RUBY] |
|
|
648
|
+
| Request.fetchPostData > (all tests) | [MISSING IN RUBY] |
|
|
649
|
+
| Response.text > (all tests) | [MISSING IN RUBY] |
|
|
650
|
+
| Response.json > should work | [MISSING IN RUBY] |
|
|
651
|
+
| Response.buffer > (all tests) | [MISSING IN RUBY] |
|
|
652
|
+
| Response.statusText > handles missing status text | [MISSING IN RUBY] |
|
|
653
|
+
| Response.timing > returns timing information | [MISSING IN RUBY] |
|
|
654
|
+
| Network Events > (all tests) | [MISSING IN RUBY] |
|
|
655
|
+
| Request.isNavigationRequest > (all tests) | [MISSING IN RUBY] |
|
|
656
|
+
| Page.setExtraHTTPHeaders > (all tests) | [MISSING IN RUBY] |
|
|
657
|
+
| Page.authenticate > (all tests) | [MISSING IN RUBY] |
|
|
658
|
+
| raw network headers > (all tests) | [MISSING IN RUBY] |
|
|
659
|
+
| Page.setBypassServiceWorker > (all tests) | [MISSING IN RUBY] |
|
|
660
|
+
| Request.resourceType > (all tests) | [MISSING IN RUBY] |
|
|
661
|
+
| Response.remoteAddress > (all tests) | [MISSING IN RUBY] |
|
|
662
|
+
|
|
663
|
+
**Note:** The Ruby network_spec.rb is minimal compared to Node.js. Many network tests may exist in other spec files or require porting.
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
## 15. page.spec.ts vs page_spec.rb
|
|
668
|
+
|
|
669
|
+
### Ported Tests (Extensive coverage)
|
|
670
|
+
Most Page tests are faithfully ported. Key areas covered:
|
|
671
|
+
- Page.close tests
|
|
672
|
+
- Page.Events.Load
|
|
673
|
+
- Event handler adding/removing
|
|
674
|
+
- Page.Events.error
|
|
675
|
+
- Page.Events.Popup (all variations)
|
|
676
|
+
- Page.setGeolocation
|
|
677
|
+
- Page.setOfflineMode
|
|
678
|
+
- Page.Events.Console (comprehensive)
|
|
679
|
+
- Page.Events.DOMContentLoaded
|
|
680
|
+
- Page.metrics
|
|
681
|
+
- Page.waitForRequest
|
|
682
|
+
- Page.waitForResponse
|
|
683
|
+
- Page.waitForNetworkIdle
|
|
684
|
+
- Page.waitForFrame
|
|
685
|
+
- Page.exposeFunction (comprehensive)
|
|
686
|
+
- Page.removeExposedFunction
|
|
687
|
+
- Page.Events.PageError
|
|
688
|
+
- Page.setUserAgent
|
|
689
|
+
- Page.setContent
|
|
690
|
+
- Page.setBypassCSP
|
|
691
|
+
- Page.addScriptTag
|
|
692
|
+
- Page.addStyleTag
|
|
693
|
+
- Page.url
|
|
694
|
+
- Page.setJavaScriptEnabled
|
|
695
|
+
- Page.reload
|
|
696
|
+
- Page.setCacheEnabled
|
|
697
|
+
- Page.pdf
|
|
698
|
+
- Page.title
|
|
699
|
+
- Page.select
|
|
700
|
+
- Page.Events.Close
|
|
701
|
+
- Page.browser
|
|
702
|
+
- Page.browserContext
|
|
703
|
+
- Page.client
|
|
704
|
+
- Page.bringToFront
|
|
705
|
+
|
|
706
|
+
### Missing in Ruby
|
|
707
|
+
| Node.js Test | Notes |
|
|
708
|
+
|--------------|-------|
|
|
709
|
+
| Page.newPage > should open pages in a new window | skipped |
|
|
710
|
+
| Page.newPage > should open pages in a new window at the specified position | skipped |
|
|
711
|
+
| Page.newPage > should open pages in a new window in maximized state | skipped |
|
|
712
|
+
| Page.newPage > should create a background page | skipped |
|
|
713
|
+
| Page.waitForRequest > should be cancellable | [MISSING IN RUBY] - AbortSignal not supported |
|
|
714
|
+
| Page.waitForResponse > should be cancellable | [MISSING IN RUBY] - AbortSignal not supported |
|
|
715
|
+
| Page.waitForNetworkIdle > should be cancelable | [MISSING IN RUBY] - AbortSignal not supported |
|
|
716
|
+
| Page.waitForFrame > should be cancellable | [MISSING IN RUBY] - AbortSignal not supported |
|
|
717
|
+
| Page.exposeFunction > should await returned promise | [MISSING IN RUBY] - Ruby doesn't have async functions |
|
|
718
|
+
| Page.exposeFunction > should fallback to default export when passed a module object | skipped |
|
|
719
|
+
| Page.setUserAgent > should work with options parameter | skipped |
|
|
720
|
+
| Page.setUserAgent > should work with platform option | skipped |
|
|
721
|
+
| Page.setUserAgent > should work with platform option without userAgent | skipped |
|
|
722
|
+
| Page.resize > should resize the browser window to fit page content | skipped |
|
|
723
|
+
|
|
724
|
+
---
|
|
725
|
+
|
|
726
|
+
## 16. queryselector.spec.ts vs query_selector_spec.rb
|
|
727
|
+
|
|
728
|
+
### Ported Tests (All major tests ported)
|
|
729
|
+
All querySelector tests are faithfully ported including:
|
|
730
|
+
- Page.$eval tests
|
|
731
|
+
- Page.$$eval tests
|
|
732
|
+
- Page.$ tests
|
|
733
|
+
- Page.$$ tests (including xpath)
|
|
734
|
+
- ElementHandle.$ tests
|
|
735
|
+
- ElementHandle.$eval tests
|
|
736
|
+
- ElementHandle.$$eval tests
|
|
737
|
+
- ElementHandle.$$ tests (including xpath)
|
|
738
|
+
- QueryAll custom handler tests
|
|
739
|
+
|
|
740
|
+
---
|
|
741
|
+
|
|
742
|
+
## 17. requestinterception.spec.ts vs request_interception_spec.rb
|
|
743
|
+
|
|
744
|
+
### Ported Tests (Comprehensive coverage)
|
|
745
|
+
The Ruby spec has extensive request interception tests including:
|
|
746
|
+
- Page.setRequestInterception basics
|
|
747
|
+
- Request.continue
|
|
748
|
+
- Request.respond
|
|
749
|
+
- Request.abort
|
|
750
|
+
- Request.resourceType
|
|
751
|
+
|
|
752
|
+
### Missing in Ruby
|
|
753
|
+
| Node.js Test | Notes |
|
|
754
|
+
|--------------|-------|
|
|
755
|
+
| should work with keep alive redirects | [MISSING IN RUBY] |
|
|
756
|
+
| should not allow mutating request headers | [MISSING IN RUBY] |
|
|
757
|
+
| should work with requests without networkId | [MISSING IN RUBY] |
|
|
758
|
+
| should work with file URLs | [MISSING IN RUBY] |
|
|
759
|
+
| Request.continue > should fail if the header value is invalid | [MISSING IN RUBY] |
|
|
760
|
+
| Request.respond > should report correct content-length header with string | [MISSING IN RUBY] |
|
|
761
|
+
| Request.respond > should report correct content-length header with buffer | [MISSING IN RUBY] |
|
|
762
|
+
| Request.respond > should report correct encoding from page when content-type is set | [MISSING IN RUBY] |
|
|
763
|
+
|
|
764
|
+
---
|
|
765
|
+
|
|
766
|
+
## 18. screenshot.spec.ts vs screenshot_spec.rb
|
|
767
|
+
|
|
768
|
+
### Ported Tests
|
|
769
|
+
| Node.js Test | Ruby Test | Status |
|
|
770
|
+
|--------------|-----------|--------|
|
|
771
|
+
| Page.screenshot > should work | should work | [PORTED] |
|
|
772
|
+
| Page.screenshot > should clip rect | should clip rect | [PORTED] |
|
|
773
|
+
| Page.screenshot > should use scale for clip | should use scale for clip | [PORTED] |
|
|
774
|
+
| Page.screenshot > should run in parallel | should run in parallel | [PORTED] |
|
|
775
|
+
| Page.screenshot > should take fullPage screenshots | should take fullPage screenshots | [PORTED] |
|
|
776
|
+
| Page.screenshot > should work with webp | should work with webp | [PORTED] |
|
|
777
|
+
| Page.screenshot > should work in "fromSurface: false" mode | should work in "fromSurface: false" mode | [PORTED] |
|
|
778
|
+
| ElementHandle.screenshot > should work | should work | [PORTED] |
|
|
779
|
+
| ElementHandle.screenshot > should take into account padding and border | should take into account padding and border | [PORTED] |
|
|
780
|
+
| ElementHandle.screenshot > should capture full element when larger than viewport | should capture full element when larger than viewport | [PORTED] |
|
|
781
|
+
| ElementHandle.screenshot > should scroll element into view | should scroll element into view | [PORTED] |
|
|
782
|
+
| ElementHandle.screenshot > should work with a rotated element | should work with a rotated element | [PORTED] |
|
|
783
|
+
| ElementHandle.screenshot > should fail to screenshot a detached element | should fail to screenshot a detached element | [PORTED] |
|
|
784
|
+
| ElementHandle.screenshot > should work for an element with fractional dimensions | should work for an element with fractional dimensions | [PORTED] |
|
|
785
|
+
| ElementHandle.screenshot > should work for an element with an offset | should work for an element with an offset | [PORTED] |
|
|
786
|
+
|
|
787
|
+
### Missing in Ruby
|
|
788
|
+
| Node.js Test | Notes |
|
|
789
|
+
|--------------|-------|
|
|
790
|
+
| Page.screenshot > should get screenshot bigger than the viewport | [MISSING IN RUBY] |
|
|
791
|
+
| Page.screenshot > should clip clip bigger than the viewport without "captureBeyondViewport" | [MISSING IN RUBY] |
|
|
792
|
+
| Page.screenshot > should take fullPage screenshots without captureBeyondViewport | [MISSING IN RUBY] |
|
|
793
|
+
| Page.screenshot > should run in parallel in multiple pages | [MISSING IN RUBY] (commented out) |
|
|
794
|
+
| Page.screenshot > should work with odd clip size on Retina displays | [MISSING IN RUBY] (commented out) |
|
|
795
|
+
| Page.screenshot > should return base64 | [MISSING IN RUBY] (commented out) |
|
|
796
|
+
| Page.screenshot > should take fullPage screenshots when defaultViewport is null | [MISSING IN RUBY] |
|
|
797
|
+
| Page.screenshot > should restore to original viewport size after taking fullPage screenshots when defaultViewport is null | [MISSING IN RUBY] |
|
|
798
|
+
| ElementHandle.screenshot > should work with a null viewport | [MISSING IN RUBY] |
|
|
799
|
+
| ElementHandle.screenshot > should not hang with zero width/height element | [MISSING IN RUBY] |
|
|
800
|
+
| ElementHandle.screenshot > should run in parallel in multiple pages | [MISSING IN RUBY] |
|
|
801
|
+
| ElementHandle.screenshot > should run in parallel with page.close() | [MISSING IN RUBY] |
|
|
802
|
+
| ElementHandle.screenshot > should use element clip | [MISSING IN RUBY] |
|
|
803
|
+
| Cdp > should allow transparency | [MISSING IN RUBY] (commented out) |
|
|
804
|
+
| Cdp > should render white background on jpeg file | [MISSING IN RUBY] (commented out) |
|
|
805
|
+
|
|
806
|
+
### Ruby Only
|
|
807
|
+
| Ruby Test | Notes |
|
|
808
|
+
|-----------|-------|
|
|
809
|
+
| full_page > keep input value (with Mobile viewport) | [RUBY ONLY] - Regression test for issue #96 |
|
|
810
|
+
| full_page > keep input value (with 1200x1200 viewport) | [RUBY ONLY] - Regression test for issue #96 |
|
|
811
|
+
|
|
812
|
+
---
|
|
813
|
+
|
|
814
|
+
## 19. waittask.spec.ts vs wait_task_spec.rb
|
|
815
|
+
|
|
816
|
+
### Ported Tests
|
|
817
|
+
All tests from `waittask.spec.ts` have been ported to `spec/integration/wait_task_spec.rb`, including:
|
|
818
|
+
- `Frame.waitForFunction` coverage (string input, polling modes, timeouts, navigation survival, cancellation)
|
|
819
|
+
- `Frame.waitForSelector` coverage (shadow DOM, pseudo-classes, visibility/hidden variants, xpath)
|
|
820
|
+
- protocol timeout behavior
|
|
821
|
+
|
|
822
|
+
---
|
|
823
|
+
|
|
824
|
+
## 20. worker.spec.ts vs worker_spec.rb
|
|
825
|
+
|
|
826
|
+
### Ported Tests
|
|
827
|
+
| Node.js Test | Ruby Test | Status |
|
|
828
|
+
|--------------|-----------|--------|
|
|
829
|
+
| Page.workers | Page.workers | [PORTED] |
|
|
830
|
+
| should emit created and destroyed events | should emit created and destroyed events | [PORTED] |
|
|
831
|
+
| should report console logs | should report console logs | [PORTED] |
|
|
832
|
+
| should work with console logs | should work with console logs | [PORTED] |
|
|
833
|
+
| should have an execution context | should have an execution context | [PORTED] |
|
|
834
|
+
| should report errors | should report errors | [PORTED] |
|
|
835
|
+
| can be closed | can be closed | [PORTED] |
|
|
836
|
+
| should work with waitForNetworkIdle | should work with waitForNetworkIdle | [PORTED] |
|
|
837
|
+
| should retrieve body for main worker requests | should retrieve body for main worker requests | [PORTED] |
|
|
838
|
+
|
|
839
|
+
**Note:** All worker tests are faithfully ported.
|
|
840
|
+
|
|
841
|
+
---
|
|
842
|
+
|
|
843
|
+
---
|
|
844
|
+
|
|
845
|
+
## 21. emulation.spec.ts vs emulation_spec.rb
|
|
846
|
+
|
|
847
|
+
### Ported Tests (Comprehensive)
|
|
848
|
+
| Node.js Test | Ruby Test | Status |
|
|
849
|
+
|--------------|-----------|--------|
|
|
850
|
+
| Page.viewport > should get the proper viewport size | should get the proper viewport size | [PORTED] |
|
|
851
|
+
| Page.viewport > should support mobile emulation | should support mobile emulation | [PORTED] |
|
|
852
|
+
| Page.viewport > should support touch emulation | should support touch emulation | [PORTED] |
|
|
853
|
+
| Page.viewport > should be detectable by Modernizr | should be detectable by Modernizr | [PORTED] |
|
|
854
|
+
| Page.viewport > should detect touch when applying viewport with touches | should detect touch when applying viewport with touches | [PORTED] |
|
|
855
|
+
| Page.viewport > should support landscape emulation | should support landscape emulation | [PORTED] |
|
|
856
|
+
| Page.emulate > should work | should work | [PORTED] |
|
|
857
|
+
| Page.emulate > should support clicking | should support clicking | [PORTED] |
|
|
858
|
+
| Page.emulateMediaType > should work | should work | [PORTED] |
|
|
859
|
+
| Page.emulateMediaType > should throw in case of bad argument | should throw in case of bad argument | [PORTED] |
|
|
860
|
+
| Page.emulateMediaFeatures > should work | should work | [PORTED] |
|
|
861
|
+
| Page.emulateMediaFeatures > should throw in case of bad argument | should throw in case of bad argument | [PORTED] |
|
|
862
|
+
| Page.emulateTimezone > should work | should work | [PORTED] |
|
|
863
|
+
| Page.emulateTimezone > should throw for invalid timezone IDs | should throw for invalid timezone IDs | [PORTED] |
|
|
864
|
+
| Page.emulateVisionDeficiency > should work | should work | [PORTED] |
|
|
865
|
+
| Page.emulateVisionDeficiency > should throw for invalid vision deficiencies | should throw for invalid vision deficiencies | [PORTED] |
|
|
866
|
+
| Page.emulateNetworkConditions > should change navigator.connection.effectiveType | should change navigator.connection.effectiveType | [PORTED] |
|
|
867
|
+
| Page.emulateCPUThrottling > should change the CPU throttling rate successfully | should change the CPU throttling rate successfully | [PORTED] |
|
|
868
|
+
|
|
869
|
+
### Missing in Ruby
|
|
870
|
+
| Node.js Test | Notes |
|
|
871
|
+
|--------------|-------|
|
|
872
|
+
| Page.viewport > should update media queries when resolution changes | [MISSING IN RUBY] |
|
|
873
|
+
| Page.viewport > should load correct pictures when emulation dpr | [MISSING IN RUBY] |
|
|
874
|
+
| Page.emulate > should work twice on about:blank | [MISSING IN RUBY] |
|
|
875
|
+
| Page.emulateNetworkConditions > should support offline | [MISSING IN RUBY] |
|
|
876
|
+
| Page.emulateFocusedPage > should emulate focus | [MISSING IN RUBY] |
|
|
877
|
+
| Page.emulateFocusedPage > should reset focus | [MISSING IN RUBY] |
|
|
878
|
+
|
|
879
|
+
---
|
|
880
|
+
|
|
881
|
+
## 22. touchscreen.spec.ts vs touchscreen_spec.rb
|
|
882
|
+
|
|
883
|
+
### Ported Tests (Comprehensive)
|
|
884
|
+
All touchscreen tests are faithfully ported including:
|
|
885
|
+
- `Touchscreen.prototype.tap` - basic tap, tap with existing touch
|
|
886
|
+
- `Touchscreen.prototype.touchMove` - basic move, two touches, three touches, move separately
|
|
887
|
+
- `Touchscreen.prototype.touchEnd` - error handling
|
|
888
|
+
|
|
889
|
+
---
|
|
890
|
+
|
|
891
|
+
## 23. drag-and-drop.spec.ts vs drag_and_drop_spec.rb
|
|
892
|
+
|
|
893
|
+
### Ported Tests (All ported)
|
|
894
|
+
| Node.js Test | Ruby Test | Status |
|
|
895
|
+
|--------------|-----------|--------|
|
|
896
|
+
| should emit a dragIntercepted event when dragged | should emit a dragIntercepted event when dragged | [PORTED] |
|
|
897
|
+
| should emit a dragEnter | should emit a dragEnter | [PORTED] |
|
|
898
|
+
| should emit a dragOver event | should emit a dragOver event | [PORTED] |
|
|
899
|
+
| can be dropped | can be dropped | [PORTED] |
|
|
900
|
+
| can be dragged and dropped with a single function | can be dragged and dropped with a single function | [PORTED] |
|
|
901
|
+
|
|
902
|
+
### Ruby Only
|
|
903
|
+
| Ruby Test | Notes |
|
|
904
|
+
|-----------|-------|
|
|
905
|
+
| should throw an exception if not enabled before usage | [RUBY ONLY] - Additional validation test |
|
|
906
|
+
| can be disabled | [RUBY ONLY] - Tests disabling drag interception |
|
|
907
|
+
|
|
908
|
+
---
|
|
909
|
+
|
|
910
|
+
## 24. coverage.spec.ts vs coverage_spec.rb
|
|
911
|
+
|
|
912
|
+
### Ported Tests (Comprehensive)
|
|
913
|
+
All JSCoverage and CSSCoverage tests are ported including:
|
|
914
|
+
- Basic coverage collection
|
|
915
|
+
- Source URL reporting
|
|
916
|
+
- Anonymous scripts handling
|
|
917
|
+
- Multiple scripts/stylesheets
|
|
918
|
+
- Range reporting
|
|
919
|
+
- Media queries
|
|
920
|
+
- Reset on navigation
|
|
921
|
+
- Raw script coverage
|
|
922
|
+
|
|
923
|
+
### Ruby Only
|
|
924
|
+
| Ruby Test | Notes |
|
|
925
|
+
|-----------|-------|
|
|
926
|
+
| should work with block | [RUBY ONLY] - Ruby block-style API |
|
|
927
|
+
|
|
928
|
+
---
|
|
929
|
+
|
|
930
|
+
## 25. tracing.spec.ts vs tracing_spec.rb
|
|
931
|
+
|
|
932
|
+
### Ported Tests (All ported)
|
|
933
|
+
All tracing tests are faithfully ported.
|
|
934
|
+
|
|
935
|
+
---
|
|
936
|
+
|
|
937
|
+
## 26. oopif.spec.ts vs oopif_spec.rb
|
|
938
|
+
|
|
939
|
+
### Ported Tests (Comprehensive)
|
|
940
|
+
Most OOPIF tests are ported including:
|
|
941
|
+
- OOP iframes vs normal iframes
|
|
942
|
+
- Navigation within OOP iframes
|
|
943
|
+
- Frames within OOP frames
|
|
944
|
+
- Detached OOP frames
|
|
945
|
+
- Evaluating in OOP iframes
|
|
946
|
+
- clickablePoint, boundingBox, boxModel for OOPIF elements
|
|
947
|
+
|
|
948
|
+
### Missing in Ruby
|
|
949
|
+
| Node.js Test | Notes |
|
|
950
|
+
|--------------|-------|
|
|
951
|
+
| should recover cross-origin frames on reconnect | [MISSING IN RUBY] |
|
|
952
|
+
| should detect existing OOPIFs when Puppeteer connects | [MISSING IN RUBY] |
|
|
953
|
+
| should exposeFunction on a page with a PDF viewer | [MISSING IN RUBY] |
|
|
954
|
+
| should evaluate on a page with a PDF viewer | [MISSING IN RUBY] |
|
|
955
|
+
| should support evaluateOnNewDocument | [MISSING IN RUBY] |
|
|
956
|
+
| should support removing evaluateOnNewDocument scripts | [MISSING IN RUBY] |
|
|
957
|
+
| should support exposeFunction | [MISSING IN RUBY] |
|
|
958
|
+
| should support removing exposed function | [MISSING IN RUBY] |
|
|
959
|
+
| should report google.com frame | [MISSING IN RUBY] |
|
|
960
|
+
| should expose events within OOPIFs | [MISSING IN RUBY] |
|
|
961
|
+
| should retrieve body for OOPIF document requests | [MISSING IN RUBY] |
|
|
962
|
+
|
|
963
|
+
---
|
|
964
|
+
|
|
965
|
+
## 27. aria_query_handler.spec.ts vs aria_query_handler_spec.rb
|
|
966
|
+
|
|
967
|
+
### Ported Tests (Core functionality ported)
|
|
968
|
+
- parseAriaSelector tests
|
|
969
|
+
- queryOne tests (find by role, name, first matching)
|
|
970
|
+
- queryAll tests
|
|
971
|
+
- queryAllArray tests
|
|
972
|
+
- waitForSelector (aria) - basic waiting, visibility
|
|
973
|
+
|
|
974
|
+
### Missing in Ruby
|
|
975
|
+
| Node.js Test | Notes |
|
|
976
|
+
|--------------|-------|
|
|
977
|
+
| waitForSelector > should work for ElementHandle.waitForSelector | [MISSING IN RUBY] |
|
|
978
|
+
| waitForSelector > should survive cross-process navigation | [MISSING IN RUBY] |
|
|
979
|
+
| waitForSelector > should wait for visible recursively | [MISSING IN RUBY] |
|
|
980
|
+
| waitForSelector > hidden should wait for visibility: hidden | [MISSING IN RUBY] |
|
|
981
|
+
| waitForSelector > should have error message specifically for awaiting element | [MISSING IN RUBY] |
|
|
982
|
+
| waitForSelector > should respond to node attribute mutation | [MISSING IN RUBY] |
|
|
983
|
+
| waitForSelector > should have correct stack trace for timeout | [MISSING IN RUBY] |
|
|
984
|
+
| Chromium web test queries | [MISSING IN RUBY] |
|
|
985
|
+
|
|
986
|
+
---
|
|
987
|
+
|
|
988
|
+
## Summary
|
|
989
|
+
|
|
990
|
+
### Overall Statistics
|
|
991
|
+
|
|
992
|
+
| Category | Count |
|
|
993
|
+
|----------|-------|
|
|
994
|
+
| Node.js spec files | 47 |
|
|
995
|
+
| Ruby spec files | 42 |
|
|
996
|
+
| Fully ported spec files | 35 |
|
|
997
|
+
| Partially ported spec files | 1 |
|
|
998
|
+
| Missing spec files (important) | 4 |
|
|
999
|
+
| Low priority/N/A spec files | 11 |
|
|
1000
|
+
|
|
1001
|
+
### Spec Files Status Summary
|
|
1002
|
+
|
|
1003
|
+
**Fully Ported (35):**
|
|
1004
|
+
aria_query_handler, browser, browser_context, browser_context_cookies, click, connect (in launcher), cookies, coverage, defaultbrowsercontext (in browser_context), dialog, download, drag_and_drop, element_handle, emulation, evaluation, frame, idle_override, input, js_handle, keyboard, launcher, mouse, navigation, network, oopif, page, query_handler, query_selector, request_interception, request_interception_experimental, screenshot, touchscreen, tracing, waittask, worker
|
|
1005
|
+
|
|
1006
|
+
**Partially Ported (1):**
|
|
1007
|
+
- target.spec.ts → target_spec.rb (AbortSignal unsupported)
|
|
1008
|
+
|
|
1009
|
+
**Missing - High Priority (4):**
|
|
1010
|
+
1. **accessibility.spec.ts** - Accessibility API not implemented
|
|
1011
|
+
2. **locator.spec.ts** - Locator API not implemented
|
|
1012
|
+
3. **proxy.spec.ts** - Proxy support not implemented
|
|
1013
|
+
4. **autofill.spec.ts** - Autofill not implemented
|
|
1014
|
+
|
|
1015
|
+
**Low Priority/N/A (11):**
|
|
1016
|
+
acceptInsecureCerts, bluetooth-emulation, debugInfo, device-request-prompt, fixtures, headful, injected, stacktrace, webExtension, webgl
|
|
1017
|
+
|
|
1018
|
+
### Priority Recommendations
|
|
1019
|
+
|
|
1020
|
+
#### High Priority (Core functionality gaps)
|
|
1021
|
+
1. **Accessibility API** - Add `Page#accessibility` and port accessibility.spec.ts
|
|
1022
|
+
2. **Locator API** - Implement Locator class and port locator.spec.ts
|
|
1023
|
+
|
|
1024
|
+
#### Medium Priority
|
|
1025
|
+
1. **proxy.spec.ts** - Proxy configuration support
|
|
1026
|
+
2. **target.spec.ts** - AbortSignal support for waitForTarget
|
|
1027
|
+
3. **oopif.spec.ts** - Several advanced OOPIF tests missing
|
|
1028
|
+
|
|
1029
|
+
#### Low Priority (Feature-specific)
|
|
1030
|
+
1. AbortSignal/cancellation tests (Ruby doesn't support this pattern)
|
|
1031
|
+
2. Firefox-specific tests (puppeteer-ruby focuses on Chrome)
|
|
1032
|
+
3. WebGL, Bluetooth, Web Extension tests
|
|
1033
|
+
|
|
1034
|
+
### Files that may need `_ext_spec.rb` split
|
|
1035
|
+
The following Ruby-only tests should potentially be moved to extension spec files:
|
|
1036
|
+
- `cookies_spec.rb` - "should fail if specifying wrong cookie" (Ruby-specific validation)
|
|
1037
|
+
- `screenshot_spec.rb` - Issue #96 regression tests
|
|
1038
|
+
- `launcher_spec.rb` - Ruby-specific API tests (default_args, product)
|
|
1039
|
+
- `element_handle_spec.rb` - XPath-specific tests
|
|
1040
|
+
- `drag_and_drop_spec.rb` - Ruby-specific validation tests
|
|
1041
|
+
- `coverage_spec.rb` - Ruby block-style API tests
|