diff --git a/playwriter/src/mcp.test.ts b/playwriter/src/mcp.test.ts index 2a449a6..1317b01 100644 --- a/playwriter/src/mcp.test.ts +++ b/playwriter/src/mcp.test.ts @@ -202,7 +202,7 @@ describe('MCP Server Tests', () => { name: 'execute', arguments: { code: js` - await state.page.goto('https://news.ycombinator.com'); + await state.page.goto('https://example.com'); const title = await state.page.title(); console.log('Page title:', title); return { url: state.page.url(), title }; @@ -213,12 +213,12 @@ describe('MCP Server Tests', () => { [ { "text": "Console output: - [log] Page title: Hacker News + [log] Page title: Example Domain Return value: { - "url": "https://news.ycombinator.com/", - "title": "Hacker News" + \"url\": \"https://example.com/\", + \"title\": \"Example Domain\" }", "type": "text", }, @@ -550,19 +550,19 @@ describe('MCP Server Tests', () => { // We use a loop to check if it's still connected because reload might cause temporary disconnect/reconnect events // that Playwright handles natively if the session ID stays valid. await connectedPage?.reload() - await connectedPage?.waitForLoadState('networkidle') + await connectedPage?.waitForLoadState('domcontentloaded') expect(await connectedPage?.title()).toBe('Example Domain') // Verify execution after reload expect(await connectedPage?.evaluate(() => 2 + 2)).toBe(4) // 5. Navigate to new URL - const newUrl = 'https://news.ycombinator.com/' + const newUrl = 'https://example.org/' await connectedPage?.goto(newUrl) - await connectedPage?.waitForLoadState('networkidle') + await connectedPage?.waitForLoadState('domcontentloaded') expect(connectedPage?.url()).toBe(newUrl) - expect(await connectedPage?.title()).toContain('Hacker News') + expect(await connectedPage?.title()).toContain('Example Domain') // Verify execution after navigation expect(await connectedPage?.evaluate(() => 3 + 3)).toBe(6) @@ -667,7 +667,7 @@ describe('MCP Server Tests', () => { await page.bringToFront() // Wait for load - await page.waitForLoadState('networkidle') + await page.waitForLoadState('domcontentloaded') // 2. Enable extension for this page await serviceWorker.evaluate(async () => { @@ -697,7 +697,7 @@ describe('MCP Server Tests', () => { const page = pages[0] await page.goto('https://example.com/disconnect-test') - await page.waitForLoadState('networkidle') + await page.waitForLoadState('domcontentloaded') await page.bringToFront() // Enable extension on this page @@ -1877,7 +1877,14 @@ describe('CDP Session Tests', () => { const serviceWorker = await getExtensionServiceWorker(browserContext) const page = await browserContext.newPage() - await page.goto('https://news.ycombinator.com/') + await page.setContent(` + + + + +

Script Test

+ + `) await page.bringToFront() await serviceWorker.evaluate(async () => { @@ -1886,7 +1893,14 @@ describe('CDP Session Tests', () => { await new Promise(r => setTimeout(r, 200)) const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) - const cdpPage = browser.contexts()[0].pages().find(p => p.url().includes('news.ycombinator.com')) + let cdpPage + for (const p of browser.contexts()[0].pages()) { + const html = await p.content() + if (html.includes('Script Test')) { + cdpPage = p + break + } + } expect(cdpPage).toBeDefined() const wsUrl = getCdpUrl({ port: TEST_PORT }) @@ -1895,8 +1909,6 @@ describe('CDP Session Tests', () => { await dbg.enable() - await cdpPage!.reload({ waitUntil: 'networkidle' }) - for (let i = 0; i < 20; i++) { if (dbg.listScripts().length > 0) break await new Promise(r => setTimeout(r, 100)) @@ -1907,8 +1919,8 @@ describe('CDP Session Tests', () => { expect(scripts[0]).toHaveProperty('scriptId') expect(scripts[0]).toHaveProperty('url') - const hnScripts = dbg.listScripts({ search: 'hn' }) - expect(hnScripts.length).toBeGreaterThan(0) + const dataScripts = dbg.listScripts({ search: 'data:' }) + expect(dataScripts.length).toBeGreaterThan(0) cdpSession.close() await browser.close() @@ -2123,8 +2135,8 @@ describe('CDP Session Tests', () => { const initialPageTarget = initialTargets.targetInfos.find(t => t.type === 'page' && t.url.includes('example.com')) expect(initialPageTarget?.url).toBe('https://example.com/') - await cdpPage!.goto('https://news.ycombinator.com/', { waitUntil: 'networkidle' }) - await new Promise(r => setTimeout(r, 500)) + await cdpPage!.goto('https://example.org/', { waitUntil: 'domcontentloaded' }) + await new Promise(r => setTimeout(r, 300)) const afterNavTargets = await cdpSession.send('Target.getTargets') const allPageTargets = afterNavTargets.targetInfos.filter(t => t.type === 'page') @@ -2135,8 +2147,8 @@ describe('CDP Session Tests', () => { const exampleComTargets = allPageTargets.filter(t => t.url.includes('example.com')) expect(exampleComTargets).toHaveLength(0) - const hnTargets = allPageTargets.filter(t => t.url.includes('news.ycombinator.com')) - expect(hnTargets).toHaveLength(1) + const exampleOrgTargets = allPageTargets.filter(t => t.url.includes('example.org')) + expect(exampleOrgTargets).toHaveLength(1) cdpSession.close() await browser.close() @@ -2155,7 +2167,7 @@ describe('CDP Session Tests', () => { }) const page2 = await browserContext.newPage() - await page2.goto('https://news.ycombinator.com/') + await page2.goto('https://example.org/') await page2.bringToFront() await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() @@ -2188,7 +2200,7 @@ describe('CDP Session Tests', () => { }, { "type": "page", - "url": "https://news.ycombinator.com/", + "url": "https://example.org/", }, ] `) @@ -2212,11 +2224,11 @@ describe('CDP Session Tests', () => { }) await new Promise(r => setTimeout(r, 200)) - await page.goto('https://news.ycombinator.com/', { waitUntil: 'networkidle' }) + await page.goto('https://example.org/', { waitUntil: 'domcontentloaded' }) await new Promise(r => setTimeout(r, 200)) const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) - const cdpPage = browser.contexts()[0].pages().find(p => p.url().includes('news.ycombinator.com')) + const cdpPage = browser.contexts()[0].pages().find(p => p.url().includes('example.org')) expect(cdpPage).toBeDefined() const wsUrl = getCdpUrl({ port: TEST_PORT }) @@ -2226,7 +2238,7 @@ describe('CDP Session Tests', () => { expression: 'document.title', returnByValue: true, }) - expect(evalResult.result.value).toContain('Hacker News') + expect(evalResult.result.value).toContain('Example Domain') cdpSession.close() await browser.close() @@ -2260,8 +2272,8 @@ describe('CDP Session Tests', () => { }) expect(initialEvalResult.result.value).toBe('Example Domain') - const newUrl = 'https://news.ycombinator.com/' - await cdpPage!.goto(newUrl, { waitUntil: 'networkidle' }) + const newUrl = 'https://example.org/' + await cdpPage!.goto(newUrl, { waitUntil: 'domcontentloaded' }) expect(cdpPage!.url()).toBe(newUrl) @@ -2273,7 +2285,7 @@ describe('CDP Session Tests', () => { expression: 'document.title', returnByValue: true, }) - expect(afterNavEvalResult.result.value).toContain('Hacker News') + expect(afterNavEvalResult.result.value).toContain('Example Domain') const locationResult = await cdpSession.send('Runtime.evaluate', { expression: 'window.location.href',