playwriter 0.0.63 → 0.0.80
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.
- package/dist/aria-snapshot.d.ts +41 -3
- package/dist/aria-snapshot.d.ts.map +1 -1
- package/dist/aria-snapshot.js +131 -54
- package/dist/aria-snapshot.js.map +1 -1
- package/dist/aria-snapshot.test.js +5 -2
- package/dist/aria-snapshot.test.js.map +1 -1
- package/dist/aria-snapshot.unit.test.js +83 -41
- package/dist/aria-snapshot.unit.test.js.map +1 -1
- package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +5 -0
- package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +1 -0
- package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +5 -0
- package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +1 -0
- package/dist/bippy.js +1 -1
- package/dist/cdp-log.d.ts +1 -1
- package/dist/cdp-log.d.ts.map +1 -1
- package/dist/cdp-log.js +1 -1
- package/dist/cdp-log.js.map +1 -1
- package/dist/cdp-relay.d.ts.map +1 -1
- package/dist/cdp-relay.js +408 -298
- package/dist/cdp-relay.js.map +1 -1
- package/dist/cdp-session.d.ts.map +1 -1
- package/dist/cdp-session.js.map +1 -1
- package/dist/cdp-types.d.ts.map +1 -1
- package/dist/cdp-types.js +7 -7
- package/dist/cdp-types.js.map +1 -1
- package/dist/clean-html.d.ts.map +1 -1
- package/dist/clean-html.js +4 -5
- package/dist/clean-html.js.map +1 -1
- package/dist/cli.js +45 -27
- package/dist/cli.js.map +1 -1
- package/dist/create-logger.d.ts.map +1 -1
- package/dist/create-logger.js +3 -1
- package/dist/create-logger.js.map +1 -1
- package/dist/debugger-examples-types.d.ts.map +1 -1
- package/dist/debugger.d.ts.map +1 -1
- package/dist/debugger.js +1 -3
- package/dist/debugger.js.map +1 -1
- package/dist/diff-utils.d.ts.map +1 -1
- package/dist/diff-utils.js +1 -4
- package/dist/diff-utils.js.map +1 -1
- package/dist/editor-api.md +12 -2
- package/dist/editor-examples.d.ts +1 -1
- package/dist/editor-examples.d.ts.map +1 -1
- package/dist/editor-examples.js +1 -1
- package/dist/editor-examples.js.map +1 -1
- package/dist/editor.d.ts +1 -1
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +1 -1
- package/dist/editor.js.map +1 -1
- package/dist/executor.d.ts +26 -3
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +295 -64
- package/dist/executor.js.map +1 -1
- package/dist/executor.unit.test.js +38 -1
- package/dist/executor.unit.test.js.map +1 -1
- package/dist/extension-connection.test.js +139 -36
- package/dist/extension-connection.test.js.map +1 -1
- package/dist/ffmpeg.d.ts +148 -0
- package/dist/ffmpeg.d.ts.map +1 -0
- package/dist/ffmpeg.js +523 -0
- package/dist/ffmpeg.js.map +1 -0
- package/dist/ghost-browser.d.ts.map +1 -1
- package/dist/ghost-browser.js.map +1 -1
- package/dist/ghost-cursor-client.js +281 -0
- package/dist/ghost-cursor.d.ts +27 -0
- package/dist/ghost-cursor.d.ts.map +1 -0
- package/dist/ghost-cursor.js +63 -0
- package/dist/ghost-cursor.js.map +1 -0
- package/dist/htmlrewrite.d.ts.map +1 -1
- package/dist/htmlrewrite.js +17 -55
- package/dist/htmlrewrite.js.map +1 -1
- package/dist/htmlrewrite.test.js.map +1 -1
- package/dist/kill-port.d.ts.map +1 -1
- package/dist/kill-port.js +1 -3
- package/dist/kill-port.js.map +1 -1
- package/dist/locator-selector.test.d.ts +2 -0
- package/dist/locator-selector.test.d.ts.map +1 -0
- package/dist/locator-selector.test.js +96 -0
- package/dist/locator-selector.test.js.map +1 -0
- package/dist/mcp-client.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +8 -3
- package/dist/mcp.js.map +1 -1
- package/dist/on-mouse-action.test.d.ts +2 -0
- package/dist/on-mouse-action.test.d.ts.map +1 -0
- package/dist/on-mouse-action.test.js +155 -0
- package/dist/on-mouse-action.test.js.map +1 -0
- package/dist/page-markdown.js +4 -4
- package/dist/page-markdown.js.map +1 -1
- package/dist/prompt.md +594 -255
- package/dist/protocol.d.ts +4 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/readability.js +1 -1
- package/dist/recording-ghost-cursor.d.ts +41 -0
- package/dist/recording-ghost-cursor.d.ts.map +1 -0
- package/dist/recording-ghost-cursor.js +79 -0
- package/dist/recording-ghost-cursor.js.map +1 -0
- package/dist/recording-relay.d.ts.map +1 -1
- package/dist/recording-relay.js +8 -8
- package/dist/recording-relay.js.map +1 -1
- package/dist/relay-client.d.ts +17 -4
- package/dist/relay-client.d.ts.map +1 -1
- package/dist/relay-client.js +44 -10
- package/dist/relay-client.js.map +1 -1
- package/dist/relay-core.test.d.ts.map +1 -1
- package/dist/relay-core.test.js +187 -26
- package/dist/relay-core.test.js.map +1 -1
- package/dist/relay-navigation.test.d.ts.map +1 -1
- package/dist/relay-navigation.test.js +54 -31
- package/dist/relay-navigation.test.js.map +1 -1
- package/dist/relay-session.test.d.ts.map +1 -1
- package/dist/relay-session.test.js +113 -65
- package/dist/relay-session.test.js.map +1 -1
- package/dist/relay-state.d.ts +158 -0
- package/dist/relay-state.d.ts.map +1 -0
- package/dist/relay-state.js +306 -0
- package/dist/relay-state.js.map +1 -0
- package/dist/relay-state.test.d.ts +2 -0
- package/dist/relay-state.test.d.ts.map +1 -0
- package/dist/relay-state.test.js +472 -0
- package/dist/relay-state.test.js.map +1 -0
- package/dist/scoped-fs.d.ts.map +1 -1
- package/dist/scoped-fs.js.map +1 -1
- package/dist/screen-recording.d.ts +42 -4
- package/dist/screen-recording.d.ts.map +1 -1
- package/dist/screen-recording.js +88 -13
- package/dist/screen-recording.js.map +1 -1
- package/dist/selector-generator.js +1 -1
- package/dist/snapshot-tools.test.js +71 -28
- package/dist/snapshot-tools.test.js.map +1 -1
- package/dist/start-relay-server.d.ts +1 -1
- package/dist/start-relay-server.d.ts.map +1 -1
- package/dist/start-relay-server.js +1 -1
- package/dist/start-relay-server.js.map +1 -1
- package/dist/styles-api.md +8 -1
- package/dist/styles-examples.d.ts +1 -1
- package/dist/styles-examples.d.ts.map +1 -1
- package/dist/styles-examples.js +1 -1
- package/dist/styles-examples.js.map +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +1 -3
- package/dist/styles.js.map +1 -1
- package/dist/test-declarations.d.ts.map +1 -1
- package/dist/test-utils.d.ts +1 -1
- package/dist/test-utils.d.ts.map +1 -1
- package/dist/test-utils.js +7 -5
- package/dist/test-utils.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/wait-for-page-load.d.ts.map +1 -1
- package/dist/wait-for-page-load.js +1 -1
- package/dist/wait-for-page-load.js.map +1 -1
- package/package.json +4 -3
- package/src/a11y-client.ts +5 -4
- package/src/aria-snapshot.test.ts +5 -2
- package/src/aria-snapshot.ts +303 -116
- package/src/aria-snapshot.unit.test.ts +199 -141
- package/src/aria-snapshots/github-raw.txt +1 -1
- package/src/aria-snapshots/hackernews-interactive.txt +240 -240
- package/src/aria-snapshots/hackernews-raw.txt +270 -270
- package/src/assets/aria-labels-example.png +0 -0
- package/src/assets/aria-labels-github.png +0 -0
- package/src/assets/aria-labels-hacker-news.png +0 -0
- package/src/assets/aria-labels-old-reddit.png +0 -0
- package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +5 -0
- package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +18 -0
- package/src/cdp-log.ts +4 -1
- package/src/cdp-relay.ts +949 -737
- package/src/cdp-session.ts +12 -3
- package/src/cdp-types.ts +51 -51
- package/src/clean-html.ts +4 -5
- package/src/cli.ts +82 -55
- package/src/create-logger.ts +5 -3
- package/src/debugger-examples-types.ts +4 -1
- package/src/debugger.ts +1 -5
- package/src/diff-utils.ts +2 -5
- package/src/editor-examples.ts +11 -1
- package/src/editor.ts +10 -2
- package/src/executor.ts +372 -73
- package/src/executor.unit.test.ts +48 -1
- package/src/extension-connection.test.ts +612 -488
- package/src/ffmpeg.ts +769 -0
- package/src/ghost-browser.ts +4 -6
- package/src/ghost-cursor-client.ts +368 -0
- package/src/ghost-cursor.ts +110 -0
- package/src/htmlrewrite.test.ts +6 -2
- package/src/htmlrewrite.ts +348 -386
- package/src/kill-port.ts +1 -3
- package/src/locator-selector.test.ts +115 -0
- package/src/mcp-client.ts +1 -1
- package/src/mcp.ts +21 -15
- package/src/on-mouse-action.test.ts +196 -0
- package/src/page-markdown.ts +7 -7
- package/src/protocol.ts +73 -57
- package/src/recording-ghost-cursor.ts +107 -0
- package/src/recording-relay.ts +20 -12
- package/src/relay-client.ts +84 -17
- package/src/relay-core.test.ts +761 -583
- package/src/relay-navigation.test.ts +517 -484
- package/src/relay-session.test.ts +984 -929
- package/src/relay-state.test.ts +570 -0
- package/src/relay-state.ts +497 -0
- package/src/resource.md +21 -49
- package/src/scoped-fs.ts +9 -3
- package/src/screen-recording.ts +175 -31
- package/src/skill.md +619 -271
- package/src/snapshot-tools.test.ts +580 -528
- package/src/snapshots/shadcn-ui-accessibility-full.md +181 -183
- package/src/snapshots/shadcn-ui-accessibility-interactive.md +119 -121
- package/src/start-relay-server.ts +14 -11
- package/src/styles-examples.ts +8 -1
- package/src/styles.ts +20 -21
- package/src/test-declarations.ts +6 -6
- package/src/test-utils.ts +104 -91
- package/src/utils.ts +2 -1
- package/src/wait-for-page-load.ts +6 -1
package/dist/relay-core.test.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createMCPClient } from './mcp-client.js';
|
|
2
2
|
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
3
3
|
import { getCDPSessionForPage } from './cdp-session.js';
|
|
4
|
-
import { setupTestContext, cleanupTestContext, getExtensionServiceWorker, withTimeout, js, tryJsonParse } from './test-utils.js';
|
|
4
|
+
import { setupTestContext, cleanupTestContext, getExtensionServiceWorker, withTimeout, js, tryJsonParse, createSimpleServer, } from './test-utils.js';
|
|
5
5
|
import './test-declarations.js';
|
|
6
6
|
const TEST_PORT = 19987;
|
|
7
7
|
describe('Relay Core Tests', () => {
|
|
@@ -43,7 +43,9 @@ describe('Relay Core Tests', () => {
|
|
|
43
43
|
timeoutMs: 10000,
|
|
44
44
|
errorMessage: 'Timed out toggling extension for active tab',
|
|
45
45
|
});
|
|
46
|
-
await new Promise((r) => {
|
|
46
|
+
await new Promise((r) => {
|
|
47
|
+
setTimeout(r, 100);
|
|
48
|
+
});
|
|
47
49
|
const cdpSession = await withTimeout({
|
|
48
50
|
promise: getCDPSessionForPage({ page }),
|
|
49
51
|
timeoutMs: 10000,
|
|
@@ -131,7 +133,7 @@ describe('Relay Core Tests', () => {
|
|
|
131
133
|
connected: !!testTab && !!testTab.id && state.tabs.has(testTab.id),
|
|
132
134
|
tabId: testTab?.id,
|
|
133
135
|
tabInfo: testTab?.id ? state.tabs.get(testTab.id) : null,
|
|
134
|
-
connectionState: state.connectionState
|
|
136
|
+
connectionState: state.connectionState,
|
|
135
137
|
};
|
|
136
138
|
});
|
|
137
139
|
expect(extensionState.connected).toBe(true);
|
|
@@ -150,7 +152,7 @@ describe('Relay Core Tests', () => {
|
|
|
150
152
|
},
|
|
151
153
|
});
|
|
152
154
|
}, 30000);
|
|
153
|
-
const
|
|
155
|
+
const snapshotTestCases = [
|
|
154
156
|
{
|
|
155
157
|
name: 'hacker-news',
|
|
156
158
|
url: 'https://news.ycombinator.com/item?id=1',
|
|
@@ -162,7 +164,7 @@ describe('Relay Core Tests', () => {
|
|
|
162
164
|
expectedContent: ['shadcn'],
|
|
163
165
|
},
|
|
164
166
|
];
|
|
165
|
-
for (const testCase of
|
|
167
|
+
for (const testCase of snapshotTestCases) {
|
|
166
168
|
it(`should get accessibility snapshot of ${testCase.name}`, async () => {
|
|
167
169
|
await client.callTool({
|
|
168
170
|
name: 'execute',
|
|
@@ -181,8 +183,8 @@ describe('Relay Core Tests', () => {
|
|
|
181
183
|
arguments: {
|
|
182
184
|
code: js `
|
|
183
185
|
await state.page.goto('${testCase.url}', { waitUntil: 'domcontentloaded' });
|
|
184
|
-
const
|
|
185
|
-
return
|
|
186
|
+
const snap = await snapshot({ page: state.page, showDiffSinceLastCall: false, interactiveOnly: true });
|
|
187
|
+
return snap;
|
|
186
188
|
`,
|
|
187
189
|
},
|
|
188
190
|
});
|
|
@@ -199,8 +201,8 @@ describe('Relay Core Tests', () => {
|
|
|
199
201
|
name: 'execute',
|
|
200
202
|
arguments: {
|
|
201
203
|
code: js `
|
|
202
|
-
const
|
|
203
|
-
return
|
|
204
|
+
const snap = await snapshot({ page: state.page, showDiffSinceLastCall: false, interactiveOnly: false });
|
|
205
|
+
return snap;
|
|
204
206
|
`,
|
|
205
207
|
},
|
|
206
208
|
});
|
|
@@ -541,21 +543,92 @@ describe('Relay Core Tests', () => {
|
|
|
541
543
|
},
|
|
542
544
|
});
|
|
543
545
|
}, 30000);
|
|
544
|
-
|
|
545
|
-
|
|
546
|
+
it('should capture console logs from cross-origin iframes', async () => {
|
|
547
|
+
// Two servers on different ports = different origins
|
|
548
|
+
const iframeServer = await createSimpleServer({
|
|
549
|
+
routes: {
|
|
550
|
+
'/iframe.html': `<!doctype html><html><body>
|
|
551
|
+
<script>
|
|
552
|
+
console.log('iframe-log-ALPHA');
|
|
553
|
+
console.error('iframe-error-BETA');
|
|
554
|
+
console.warn('iframe-warn-GAMMA');
|
|
555
|
+
</script>
|
|
556
|
+
<p>cross-origin iframe</p>
|
|
557
|
+
</body></html>`,
|
|
558
|
+
},
|
|
559
|
+
});
|
|
560
|
+
const parentServer = await createSimpleServer({
|
|
561
|
+
routes: {
|
|
562
|
+
'/': `<!doctype html><html><body>
|
|
563
|
+
<script>console.log('parent-log-DELTA');</script>
|
|
564
|
+
<iframe src="${iframeServer.baseUrl}/iframe.html"></iframe>
|
|
565
|
+
</body></html>`,
|
|
566
|
+
},
|
|
567
|
+
});
|
|
568
|
+
try {
|
|
569
|
+
// Clear logs and navigate to the parent page with cross-origin iframe
|
|
570
|
+
await client.callTool({
|
|
571
|
+
name: 'execute',
|
|
572
|
+
arguments: {
|
|
573
|
+
code: js `
|
|
574
|
+
clearAllLogs();
|
|
575
|
+
state.iframePage = await context.newPage();
|
|
576
|
+
await state.iframePage.goto('${parentServer.baseUrl}', { waitUntil: 'networkidle' });
|
|
577
|
+
// Wait for iframe to load and logs to be captured
|
|
578
|
+
await state.iframePage.frameLocator('iframe').locator('p').waitFor({ timeout: 5000 });
|
|
579
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
580
|
+
`,
|
|
581
|
+
},
|
|
582
|
+
});
|
|
583
|
+
// Retrieve logs and verify both parent and iframe logs are captured
|
|
584
|
+
const logsResult = await client.callTool({
|
|
585
|
+
name: 'execute',
|
|
586
|
+
arguments: {
|
|
587
|
+
code: js `
|
|
588
|
+
const logs = await getLatestLogs({ page: state.iframePage });
|
|
589
|
+
console.log('Cross-origin iframe logs count:', logs.length);
|
|
590
|
+
logs.forEach(log => console.log(log));
|
|
591
|
+
`,
|
|
592
|
+
},
|
|
593
|
+
});
|
|
594
|
+
const output = logsResult.content[0].text;
|
|
595
|
+
// Parent page log
|
|
596
|
+
expect(output).toContain('parent-log-DELTA');
|
|
597
|
+
// Cross-origin iframe logs
|
|
598
|
+
expect(output).toContain('iframe-log-ALPHA');
|
|
599
|
+
expect(output).toContain('iframe-error-BETA');
|
|
600
|
+
expect(output).toContain('iframe-warn-GAMMA');
|
|
601
|
+
// Clean up
|
|
602
|
+
await client.callTool({
|
|
603
|
+
name: 'execute',
|
|
604
|
+
arguments: {
|
|
605
|
+
code: js `
|
|
606
|
+
await state.iframePage.close();
|
|
607
|
+
delete state.iframePage;
|
|
608
|
+
`,
|
|
609
|
+
},
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
finally {
|
|
613
|
+
await Promise.all([parentServer.close(), iframeServer.close()]);
|
|
614
|
+
}
|
|
615
|
+
}, 60000);
|
|
616
|
+
it('should preserve system color scheme instead of forcing light mode', async () => {
|
|
546
617
|
const browserContext = getBrowserContext();
|
|
547
618
|
const serviceWorker = await getExtensionServiceWorker(browserContext);
|
|
548
619
|
const page = await browserContext.newPage();
|
|
549
620
|
await page.goto('https://example.com');
|
|
550
621
|
await page.bringToFront();
|
|
622
|
+
// test-utils launches with colorScheme: 'dark', so before MCP connection
|
|
623
|
+
// the browser should report dark mode
|
|
551
624
|
const colorSchemeBefore = await page.evaluate(() => {
|
|
552
625
|
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
553
626
|
});
|
|
554
|
-
|
|
627
|
+
expect(colorSchemeBefore).toBe('dark');
|
|
555
628
|
await serviceWorker.evaluate(async () => {
|
|
556
629
|
await globalThis.toggleExtensionForActiveTab();
|
|
557
630
|
});
|
|
558
|
-
await new Promise(r => setTimeout(r,
|
|
631
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
559
632
|
const result = await client.callTool({
|
|
560
633
|
name: 'execute',
|
|
561
634
|
arguments: {
|
|
@@ -573,14 +646,17 @@ describe('Relay Core Tests', () => {
|
|
|
573
646
|
},
|
|
574
647
|
});
|
|
575
648
|
console.log('Color scheme after MCP connection:', result.content);
|
|
649
|
+
// After MCP connection, color scheme should NOT be forced to light.
|
|
650
|
+
// The page.ts default is now 'no-override', so the browser's actual
|
|
651
|
+
// color scheme (dark, from test-utils launch config) should be preserved.
|
|
576
652
|
expect(result.content).toMatchInlineSnapshot(`
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
653
|
+
[
|
|
654
|
+
{
|
|
655
|
+
"text": "[return value] { matchesDark: true, matchesLight: false }",
|
|
656
|
+
"type": "text",
|
|
657
|
+
},
|
|
658
|
+
]
|
|
659
|
+
`);
|
|
584
660
|
await page.close();
|
|
585
661
|
}, 60000);
|
|
586
662
|
it('should get clean HTML with getCleanHTML', async () => {
|
|
@@ -607,7 +683,7 @@ describe('Relay Core Tests', () => {
|
|
|
607
683
|
await serviceWorker.evaluate(async () => {
|
|
608
684
|
await globalThis.toggleExtensionForActiveTab();
|
|
609
685
|
});
|
|
610
|
-
await new Promise(r => setTimeout(r, 400));
|
|
686
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
611
687
|
// Test basic getCleanHTML
|
|
612
688
|
const result = await client.callTool({
|
|
613
689
|
name: 'execute',
|
|
@@ -698,7 +774,7 @@ describe('Relay Core Tests', () => {
|
|
|
698
774
|
await serviceWorker.evaluate(async () => {
|
|
699
775
|
await globalThis.toggleExtensionForActiveTab();
|
|
700
776
|
});
|
|
701
|
-
await new Promise(r => setTimeout(r, 400));
|
|
777
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
702
778
|
// Test basic getPageMarkdown
|
|
703
779
|
const result = await client.callTool({
|
|
704
780
|
name: 'execute',
|
|
@@ -759,7 +835,7 @@ describe('Relay Core Tests', () => {
|
|
|
759
835
|
await serviceWorker.evaluate(async () => {
|
|
760
836
|
await globalThis.disconnectEverything();
|
|
761
837
|
});
|
|
762
|
-
await new Promise(r => setTimeout(r, 100));
|
|
838
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
763
839
|
// 2. Create first page and enable extension
|
|
764
840
|
const page1 = await browserContext.newPage();
|
|
765
841
|
await page1.goto('https://example.com/first-page');
|
|
@@ -767,7 +843,7 @@ describe('Relay Core Tests', () => {
|
|
|
767
843
|
await serviceWorker.evaluate(async () => {
|
|
768
844
|
await globalThis.toggleExtensionForActiveTab();
|
|
769
845
|
});
|
|
770
|
-
await new Promise(r => setTimeout(r, 100));
|
|
846
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
771
847
|
// 3. Reset MCP to ensure page1 becomes the default page (only page available)
|
|
772
848
|
const resetResult = await client.callTool({
|
|
773
849
|
name: 'reset',
|
|
@@ -793,10 +869,10 @@ describe('Relay Core Tests', () => {
|
|
|
793
869
|
await serviceWorker.evaluate(async () => {
|
|
794
870
|
await globalThis.toggleExtensionForActiveTab();
|
|
795
871
|
});
|
|
796
|
-
await new Promise(r => setTimeout(r, 100));
|
|
872
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
797
873
|
// 6. Close the first page (which is the default `page` in MCP scope)
|
|
798
874
|
await page1.close();
|
|
799
|
-
await new Promise(r => setTimeout(r, 100));
|
|
875
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
800
876
|
// 7. Execute code via MCP - should NOT fail with "page closed" error
|
|
801
877
|
// Instead, it should automatically switch to the second page
|
|
802
878
|
const afterCloseResult = await client.callTool({
|
|
@@ -819,5 +895,90 @@ describe('Relay Core Tests', () => {
|
|
|
819
895
|
// Cleanup
|
|
820
896
|
await page2.close();
|
|
821
897
|
}, 60000);
|
|
898
|
+
it('should show descriptive error when clicking a hidden element', async () => {
|
|
899
|
+
// Create a fresh page and set content with a collapsed details element
|
|
900
|
+
await client.callTool({
|
|
901
|
+
name: 'execute',
|
|
902
|
+
arguments: {
|
|
903
|
+
code: js `
|
|
904
|
+
state.errorTestPage = await context.newPage();
|
|
905
|
+
await state.errorTestPage.setContent(\`
|
|
906
|
+
<details>
|
|
907
|
+
<summary>Toggle</summary>
|
|
908
|
+
<button id="hidden-btn">Hidden Button</button>
|
|
909
|
+
</details>
|
|
910
|
+
\`);
|
|
911
|
+
`,
|
|
912
|
+
},
|
|
913
|
+
});
|
|
914
|
+
const result = await client.callTool({
|
|
915
|
+
name: 'execute',
|
|
916
|
+
arguments: {
|
|
917
|
+
code: js `
|
|
918
|
+
await state.errorTestPage.click('#hidden-btn');
|
|
919
|
+
`,
|
|
920
|
+
},
|
|
921
|
+
});
|
|
922
|
+
const text = result.content[0].text;
|
|
923
|
+
// Strip stack traces and call logs to only match the descriptive error line
|
|
924
|
+
const errorLine = text.split('\n').find((l) => l.includes('Timeout') || l.includes('not visible') || l.includes('not stable'));
|
|
925
|
+
expect(errorLine).toMatchInlineSnapshot(`"Error executing code: page.click: Timeout 2000ms exceeded. Element is not visible — it may be hidden by CSS, inside a collapsed <details>, inactive tab, or closed accordion. Try: interact with the page to reveal it first, or use { force: true } to skip visibility checks"`);
|
|
926
|
+
expect(result.isError).toBe(true);
|
|
927
|
+
// Cleanup
|
|
928
|
+
await client.callTool({ name: 'execute', arguments: { code: js `await state.errorTestPage.close(); delete state.errorTestPage;` } });
|
|
929
|
+
}, 30000);
|
|
930
|
+
it('should show descriptive error when clicking an element covered by another', async () => {
|
|
931
|
+
await client.callTool({
|
|
932
|
+
name: 'execute',
|
|
933
|
+
arguments: {
|
|
934
|
+
code: js `
|
|
935
|
+
state.errorTestPage = await context.newPage();
|
|
936
|
+
await state.errorTestPage.setContent(\`
|
|
937
|
+
<div style="position:relative">
|
|
938
|
+
<button id="covered-btn" style="position:absolute;top:0;left:0">Covered</button>
|
|
939
|
+
<div id="overlay" style="position:absolute;top:0;left:0;width:200px;height:200px;background:red;z-index:10">Overlay</div>
|
|
940
|
+
</div>
|
|
941
|
+
\`);
|
|
942
|
+
`,
|
|
943
|
+
},
|
|
944
|
+
});
|
|
945
|
+
const result = await client.callTool({
|
|
946
|
+
name: 'execute',
|
|
947
|
+
arguments: {
|
|
948
|
+
code: js `
|
|
949
|
+
await state.errorTestPage.click('#covered-btn');
|
|
950
|
+
`,
|
|
951
|
+
},
|
|
952
|
+
});
|
|
953
|
+
const text = result.content[0].text;
|
|
954
|
+
const errorLine = text.split('\n').find((l) => l.includes('Timeout') || l.includes('intercepts'));
|
|
955
|
+
expect(errorLine).toMatchInlineSnapshot(`"Error executing code: page.click: Timeout 2000ms exceeded. <div id="overlay">Overlay</div> intercepts pointer events"`);
|
|
956
|
+
expect(result.isError).toBe(true);
|
|
957
|
+
await client.callTool({ name: 'execute', arguments: { code: js `await state.errorTestPage.close(); delete state.errorTestPage;` } });
|
|
958
|
+
}, 30000);
|
|
959
|
+
it('should show descriptive error when clicking a display:none element', async () => {
|
|
960
|
+
await client.callTool({
|
|
961
|
+
name: 'execute',
|
|
962
|
+
arguments: {
|
|
963
|
+
code: js `
|
|
964
|
+
state.errorTestPage = await context.newPage();
|
|
965
|
+
await state.errorTestPage.setContent('<button id="invisible" style="display:none">Invisible</button>');
|
|
966
|
+
`,
|
|
967
|
+
},
|
|
968
|
+
});
|
|
969
|
+
const result = await client.callTool({
|
|
970
|
+
name: 'execute',
|
|
971
|
+
arguments: {
|
|
972
|
+
code: js `
|
|
973
|
+
await state.errorTestPage.click('#invisible');
|
|
974
|
+
`,
|
|
975
|
+
},
|
|
976
|
+
});
|
|
977
|
+
const text = result.content[0].text;
|
|
978
|
+
const errorLine = text.split('\n').find((l) => l.includes('Timeout') || l.includes('not visible'));
|
|
979
|
+
expect(errorLine).toMatchInlineSnapshot(`"Error executing code: page.click: Timeout 2000ms exceeded. Element is not visible — it may be hidden by CSS, inside a collapsed <details>, inactive tab, or closed accordion. Try: interact with the page to reveal it first, or use { force: true } to skip visibility checks"`);
|
|
980
|
+
expect(result.isError).toBe(true);
|
|
981
|
+
await client.callTool({ name: 'execute', arguments: { code: js `await state.errorTestPage.close(); delete state.errorTestPage;` } });
|
|
982
|
+
}, 30000);
|
|
822
983
|
});
|
|
823
984
|
//# sourceMappingURL=relay-core.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-core.test.js","sourceRoot":"","sources":["../src/relay-core.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"relay-core.test.js","sourceRoot":"","sources":["../src/relay-core.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-navigation.test.d.ts","sourceRoot":"","sources":["../src/relay-navigation.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relay-navigation.test.d.ts","sourceRoot":"","sources":["../src/relay-navigation.test.ts"],"names":[],"mappings":"AAWA,OAAO,wBAAwB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
2
2
|
import { chromium } from '@xmorse/playwright-core';
|
|
3
3
|
import { getCdpUrl } from './utils.js';
|
|
4
|
-
import { setupTestContext, cleanupTestContext, getExtensionServiceWorker, withTimeout, createSimpleServer } from './test-utils.js';
|
|
4
|
+
import { setupTestContext, cleanupTestContext, getExtensionServiceWorker, withTimeout, createSimpleServer, } from './test-utils.js';
|
|
5
5
|
import './test-declarations.js';
|
|
6
6
|
const TEST_PORT = 19992;
|
|
7
7
|
describe('Relay Navigation Tests', () => {
|
|
@@ -18,7 +18,7 @@ describe('Relay Navigation Tests', () => {
|
|
|
18
18
|
throw new Error('Browser not initialized');
|
|
19
19
|
return testCtx.browserContext;
|
|
20
20
|
};
|
|
21
|
-
const waitForStableDocumentReadyState = async ({ page, timeoutMs
|
|
21
|
+
const waitForStableDocumentReadyState = async ({ page, timeoutMs }) => {
|
|
22
22
|
const startTime = Date.now();
|
|
23
23
|
while (Date.now() - startTime < timeoutMs) {
|
|
24
24
|
try {
|
|
@@ -106,7 +106,9 @@ describe('Relay Navigation Tests', () => {
|
|
|
106
106
|
timeoutMs: 5000,
|
|
107
107
|
errorMessage: 'Timed out toggling extension for iframe test',
|
|
108
108
|
});
|
|
109
|
-
await new Promise((r) => {
|
|
109
|
+
await new Promise((r) => {
|
|
110
|
+
setTimeout(r, 400);
|
|
111
|
+
});
|
|
110
112
|
const browser = await withTimeout({
|
|
111
113
|
promise: chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })),
|
|
112
114
|
timeoutMs: 5000,
|
|
@@ -135,10 +137,7 @@ describe('Relay Navigation Tests', () => {
|
|
|
135
137
|
timeoutMs: 5000,
|
|
136
138
|
errorMessage: 'Timed out closing page for iframe test',
|
|
137
139
|
});
|
|
138
|
-
await Promise.all([
|
|
139
|
-
parentServer.close(),
|
|
140
|
-
childServer.close(),
|
|
141
|
-
]);
|
|
140
|
+
await Promise.all([parentServer.close(), childServer.close()]);
|
|
142
141
|
}
|
|
143
142
|
}, 60000);
|
|
144
143
|
it('should resolve locators for cross-origin iframe that starts with empty src', async () => {
|
|
@@ -245,10 +244,7 @@ describe('Relay Navigation Tests', () => {
|
|
|
245
244
|
timeoutMs: 5000,
|
|
246
245
|
errorMessage: 'Timed out closing page for empty-src iframe test',
|
|
247
246
|
});
|
|
248
|
-
await Promise.all([
|
|
249
|
-
parentServer.close(),
|
|
250
|
-
childServer.close(),
|
|
251
|
-
]);
|
|
247
|
+
await Promise.all([parentServer.close(), childServer.close()]);
|
|
252
248
|
}
|
|
253
249
|
}, 60000);
|
|
254
250
|
it('should have non-empty URLs when connecting to already-loaded pages', async () => {
|
|
@@ -263,14 +259,14 @@ describe('Relay Navigation Tests', () => {
|
|
|
263
259
|
const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT }));
|
|
264
260
|
const context = browser.contexts()[0];
|
|
265
261
|
const pages = context.pages();
|
|
266
|
-
console.log('All page URLs:', pages.map(p => p.url()));
|
|
262
|
+
console.log('All page URLs:', pages.map((p) => p.url()));
|
|
267
263
|
expect(pages.length).toBeGreaterThan(0);
|
|
268
264
|
for (const p of pages) {
|
|
269
265
|
expect(p.url()).not.toBe('');
|
|
270
266
|
expect(p.url()).not.toBe(':');
|
|
271
267
|
expect(p.url()).not.toBeUndefined();
|
|
272
268
|
}
|
|
273
|
-
const discordPage = pages.find(p => p.url().includes('discord.com'));
|
|
269
|
+
const discordPage = pages.find((p) => p.url().includes('discord.com'));
|
|
274
270
|
expect(discordPage).toBeDefined();
|
|
275
271
|
const result = await discordPage.evaluate(() => window.location.href);
|
|
276
272
|
expect(result).toContain('discord.com');
|
|
@@ -287,9 +283,12 @@ describe('Relay Navigation Tests', () => {
|
|
|
287
283
|
await serviceWorker.evaluate(async () => {
|
|
288
284
|
await globalThis.toggleExtensionForActiveTab();
|
|
289
285
|
});
|
|
290
|
-
await new Promise(r => setTimeout(r, 100));
|
|
286
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
291
287
|
const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT }));
|
|
292
|
-
const cdpPage = browser
|
|
288
|
+
const cdpPage = browser
|
|
289
|
+
.contexts()[0]
|
|
290
|
+
.pages()
|
|
291
|
+
.find((p) => p.url() === initialUrl);
|
|
293
292
|
expect(cdpPage).toBeDefined();
|
|
294
293
|
const response = await cdpPage.goto('https://www.notion.so', { waitUntil: 'domcontentloaded', timeout: 20000 });
|
|
295
294
|
const currentUrl = cdpPage.url();
|
|
@@ -309,9 +308,12 @@ describe('Relay Navigation Tests', () => {
|
|
|
309
308
|
await serviceWorker.evaluate(async () => {
|
|
310
309
|
await globalThis.toggleExtensionForActiveTab();
|
|
311
310
|
});
|
|
312
|
-
await new Promise(r => setTimeout(r, 100));
|
|
311
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
313
312
|
const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT }));
|
|
314
|
-
const cdpPage = browser
|
|
313
|
+
const cdpPage = browser
|
|
314
|
+
.contexts()[0]
|
|
315
|
+
.pages()
|
|
316
|
+
.find((p) => p.url().includes('about:'));
|
|
315
317
|
expect(cdpPage).toBeDefined();
|
|
316
318
|
const response = await cdpPage.goto('https://www.youtube.com', { waitUntil: 'domcontentloaded', timeout: 20000 });
|
|
317
319
|
const currentUrl = cdpPage.url();
|
|
@@ -341,7 +343,7 @@ describe('Relay Navigation Tests', () => {
|
|
|
341
343
|
await serviceWorker.evaluate(async () => {
|
|
342
344
|
await globalThis.toggleExtensionForActiveTab();
|
|
343
345
|
});
|
|
344
|
-
await new Promise(r => setTimeout(r, 100));
|
|
346
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
345
347
|
for (let i = 0; i < 3; i++) {
|
|
346
348
|
const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT }));
|
|
347
349
|
const pages = browser.contexts()[0].pages();
|
|
@@ -356,7 +358,7 @@ describe('Relay Navigation Tests', () => {
|
|
|
356
358
|
expect(iframePage).toBeDefined();
|
|
357
359
|
expect(iframePage?.url()).toContain('about:');
|
|
358
360
|
await browser.close();
|
|
359
|
-
await new Promise(r => setTimeout(r, 100));
|
|
361
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
360
362
|
}
|
|
361
363
|
await page.close();
|
|
362
364
|
}, 30000);
|
|
@@ -366,16 +368,16 @@ describe('Relay Navigation Tests', () => {
|
|
|
366
368
|
await serviceWorker.evaluate(async () => {
|
|
367
369
|
await globalThis.disconnectEverything();
|
|
368
370
|
});
|
|
369
|
-
await new Promise(r => setTimeout(r, 100));
|
|
371
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
370
372
|
const targetUrl = 'https://example.com/';
|
|
371
373
|
const enableResult = await serviceWorker.evaluate(async (url) => {
|
|
372
374
|
const tab = await chrome.tabs.create({ url, active: true });
|
|
373
|
-
await new Promise(r => setTimeout(r, 100));
|
|
375
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
374
376
|
return await globalThis.toggleExtensionForActiveTab();
|
|
375
377
|
}, targetUrl);
|
|
376
378
|
console.log('Extension enabled:', enableResult);
|
|
377
379
|
expect(enableResult.isConnected).toBe(true);
|
|
378
|
-
await new Promise(r => setTimeout(r, 100));
|
|
380
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
379
381
|
const { Stagehand } = await import('@browserbasehq/stagehand');
|
|
380
382
|
const stagehand = new Stagehand({
|
|
381
383
|
env: 'LOCAL',
|
|
@@ -391,8 +393,8 @@ describe('Relay Navigation Tests', () => {
|
|
|
391
393
|
const context = stagehand.context;
|
|
392
394
|
expect(context).toBeDefined();
|
|
393
395
|
const pages = context.pages();
|
|
394
|
-
console.log('Stagehand pages:', pages.length, pages.map(p => p.url()));
|
|
395
|
-
const stagehandPage = pages.find(p => p.url().includes('example.com'));
|
|
396
|
+
console.log('Stagehand pages:', pages.length, pages.map((p) => p.url()));
|
|
397
|
+
const stagehandPage = pages.find((p) => p.url().includes('example.com'));
|
|
396
398
|
expect(stagehandPage).toBeDefined();
|
|
397
399
|
const url = stagehandPage.url();
|
|
398
400
|
console.log('Stagehand page URL:', url);
|
|
@@ -408,15 +410,15 @@ describe('Relay Navigation Tests', () => {
|
|
|
408
410
|
await serviceWorker.evaluate(async () => {
|
|
409
411
|
await globalThis.toggleExtensionForActiveTab();
|
|
410
412
|
});
|
|
411
|
-
await new Promise(r => setTimeout(r, 200));
|
|
413
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
412
414
|
// Test /json/version
|
|
413
415
|
const versionRes = await fetch(`http://127.0.0.1:${TEST_PORT}/json/version`);
|
|
414
416
|
expect(versionRes.status).toBe(200);
|
|
415
|
-
const versionJson = await versionRes.json();
|
|
417
|
+
const versionJson = (await versionRes.json());
|
|
416
418
|
expect(versionJson).toMatchObject({
|
|
417
|
-
|
|
419
|
+
Browser: expect.stringContaining('Playwriter/'),
|
|
418
420
|
'Protocol-Version': '1.3',
|
|
419
|
-
|
|
421
|
+
webSocketDebuggerUrl: expect.stringContaining('ws://'),
|
|
420
422
|
});
|
|
421
423
|
expect(versionJson.webSocketDebuggerUrl).toContain(`127.0.0.1:${TEST_PORT}/cdp`);
|
|
422
424
|
// Test /json/version/ (trailing slash)
|
|
@@ -425,7 +427,7 @@ describe('Relay Navigation Tests', () => {
|
|
|
425
427
|
// Test /json/list
|
|
426
428
|
const listRes = await fetch(`http://127.0.0.1:${TEST_PORT}/json/list`);
|
|
427
429
|
expect(listRes.status).toBe(200);
|
|
428
|
-
const listJson = await listRes.json();
|
|
430
|
+
const listJson = (await listRes.json());
|
|
429
431
|
expect(Array.isArray(listJson)).toBe(true);
|
|
430
432
|
expect(listJson.length).toBeGreaterThan(0);
|
|
431
433
|
const examplePage = listJson.find((t) => t.url?.includes('example.com'));
|
|
@@ -458,7 +460,7 @@ describe('Relay Navigation Tests', () => {
|
|
|
458
460
|
await serviceWorker.evaluate(async () => {
|
|
459
461
|
await globalThis.toggleExtensionForActiveTab();
|
|
460
462
|
});
|
|
461
|
-
await new Promise(r => setTimeout(r, 200));
|
|
463
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
462
464
|
const outputPath = path.join(process.cwd(), 'tmp', 'test-recording.mp4');
|
|
463
465
|
if (!fs.existsSync(path.dirname(outputPath))) {
|
|
464
466
|
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
@@ -475,7 +477,7 @@ describe('Relay Navigation Tests', () => {
|
|
|
475
477
|
expect(startResult.isRecording).toBe(true);
|
|
476
478
|
await recordingPage.locator('.titleline a').first().click();
|
|
477
479
|
await recordingPage.waitForLoadState('domcontentloaded');
|
|
478
|
-
await new Promise(r => setTimeout(r, 500));
|
|
480
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
479
481
|
await recordingPage.goBack();
|
|
480
482
|
await recordingPage.waitForLoadState('domcontentloaded');
|
|
481
483
|
const status = await isRecording({ page: recordingPage, relayPort: TEST_PORT });
|
|
@@ -484,8 +486,29 @@ describe('Relay Navigation Tests', () => {
|
|
|
484
486
|
expect(stopResult.path).toBe(outputPath);
|
|
485
487
|
expect(stopResult.size).toBeGreaterThan(10000);
|
|
486
488
|
expect(fs.existsSync(outputPath)).toBe(true);
|
|
489
|
+
// Create a sped-up demo video from the recording.
|
|
490
|
+
// We fake executionTimestamps since this test calls screen-recording
|
|
491
|
+
// directly (not via executor sandbox which tracks them automatically).
|
|
492
|
+
const { createDemoVideo } = await import('./ffmpeg.js');
|
|
493
|
+
const demoPath = await createDemoVideo({
|
|
494
|
+
recordingPath: outputPath,
|
|
495
|
+
durationMs: stopResult.duration,
|
|
496
|
+
executionTimestamps: [
|
|
497
|
+
// Simulate two interactions with an idle gap between them
|
|
498
|
+
{ start: 0.5, end: 1.5 },
|
|
499
|
+
{ start: 3, end: 4 },
|
|
500
|
+
],
|
|
501
|
+
speed: 4,
|
|
502
|
+
});
|
|
503
|
+
expect(fs.existsSync(demoPath)).toBe(true);
|
|
504
|
+
expect(demoPath).toContain('-demo');
|
|
505
|
+
// Verify the demo video is smaller (idle sections were sped up)
|
|
506
|
+
const demoSize = fs.statSync(demoPath).size;
|
|
507
|
+
expect(demoSize).toBeGreaterThan(0);
|
|
508
|
+
console.log(`Recording: ${stopResult.size} bytes, Demo: ${demoSize} bytes`);
|
|
487
509
|
await recordingPage.close();
|
|
488
510
|
fs.unlinkSync(outputPath);
|
|
511
|
+
fs.unlinkSync(demoPath);
|
|
489
512
|
}, 60000);
|
|
490
513
|
});
|
|
491
514
|
//# sourceMappingURL=relay-navigation.test.js.map
|