diff --git a/playwriter/src/mcp.test.ts b/playwriter/src/mcp.test.ts index 1f037e8..2a449a6 100644 --- a/playwriter/src/mcp.test.ts +++ b/playwriter/src/mcp.test.ts @@ -165,7 +165,7 @@ describe('MCP Server Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) const cdpPage = browser.contexts()[0].pages().find(p => { @@ -430,12 +430,12 @@ describe('MCP Server Tests', () => { directBrowser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) // Wait a bit for targets to populate - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) contexts = directBrowser.contexts() // pages() might need a moment if target attached event comes in if (contexts[0].pages().length === 0) { - await new Promise(r => setTimeout(r, 1000)) + await new Promise(r => setTimeout(r, 300)) } pages = contexts[0].pages() @@ -458,7 +458,7 @@ describe('MCP Server Tests', () => { // Connect once const directBrowser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) // Wait a bit for connection and initial target discovery - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) // 1. Create a new page const page = await browserContext.newPage() @@ -574,13 +574,13 @@ describe('MCP Server Tests', () => { it('should support multiple concurrent tabs', async () => { const browserContext = getBrowserContext() const serviceWorker = await getExtensionServiceWorker(browserContext) - await new Promise(resolve => setTimeout(resolve, 500)) + await new Promise(resolve => setTimeout(resolve, 200)) // Tab A const pageA = await browserContext.newPage() await pageA.goto('https://example.com/tab-a') await pageA.bringToFront() - await new Promise(resolve => setTimeout(resolve, 500)) + await new Promise(resolve => setTimeout(resolve, 200)) await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) @@ -589,7 +589,7 @@ describe('MCP Server Tests', () => { const pageB = await browserContext.newPage() await pageB.goto('https://example.com/tab-b') await pageB.bringToFront() - await new Promise(resolve => setTimeout(resolve, 500)) + await new Promise(resolve => setTimeout(resolve, 200)) await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) @@ -677,7 +677,7 @@ describe('MCP Server Tests', () => { // 3. Verify via CDP that the correct URL is shown const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) // Wait for sync - await new Promise(r => setTimeout(r, 1000)) + await new Promise(r => setTimeout(r, 300)) const cdpPage = browser.contexts()[0].pages().find(p => p.url() === targetUrl) @@ -708,7 +708,7 @@ describe('MCP Server Tests', () => { expect(initialEnable.isConnected).toBe(true) // Wait for extension to fully connect - await new Promise(resolve => setTimeout(resolve, 500)) + await new Promise(resolve => setTimeout(resolve, 200)) // Verify MCP can see the page const beforeDisconnect = await client.callTool({ @@ -735,7 +735,7 @@ describe('MCP Server Tests', () => { }) // Wait for disconnect to complete - await new Promise(resolve => setTimeout(resolve, 500)) + await new Promise(resolve => setTimeout(resolve, 200)) // 3. Verify MCP cannot see the page anymore const afterDisconnect = await client.callTool({ @@ -768,7 +768,7 @@ describe('MCP Server Tests', () => { // Wait for extension to fully reconnect and relay server to be ready console.log('Waiting for reconnection to stabilize...') - await new Promise(resolve => setTimeout(resolve, 1000)) + await new Promise(resolve => setTimeout(resolve, 300)) // 5. Reset the MCP client's playwright connection since it was closed by disconnectEverything console.log('Resetting MCP playwright connection...') @@ -1170,23 +1170,23 @@ describe('MCP Server Tests', () => { const serviceWorker = await getExtensionServiceWorker(browserContext) const page = await browserContext.newPage() - const targetUrl = 'https://x.com' - await page.goto(targetUrl, { waitUntil: 'domcontentloaded' }) + const targetUrl = 'https://example.com/sw-test' + await page.goto(targetUrl) await page.bringToFront() await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 2000)) + await new Promise(r => setTimeout(r, 200)) const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) const pages = browser.contexts()[0].pages() - const xPage = pages.find(p => p.url().includes('x.com')) + const testPage = pages.find(p => p.url().includes('sw-test')) - expect(xPage).toBeDefined() - expect(xPage?.url()).toContain('x.com') - expect(xPage?.url()).not.toContain('sw.js') + expect(testPage).toBeDefined() + expect(testPage?.url()).toContain('sw-test') + expect(testPage?.url()).not.toContain('sw.js') await browser.close() await page.close() @@ -1265,30 +1265,46 @@ describe('MCP Server Tests', () => { const serviceWorker = await getExtensionServiceWorker(browserContext) const page = await browserContext.newPage() - const targetUrl = 'https://www.youtube.com' - await page.goto(targetUrl, { waitUntil: 'domcontentloaded' }) + await page.setContent(` + + Iframe Test Page + +

Iframe Heavy Page

+ + + + + + `) await page.bringToFront() await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 3000)) + await new Promise(r => setTimeout(r, 200)) for (let i = 0; i < 3; i++) { const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) const pages = browser.contexts()[0].pages() - const ytPage = pages.find(p => p.url().includes('youtube.com')) + let iframePage + for (const p of pages) { + const html = await p.content() + if (html.includes('Iframe Heavy Page')) { + iframePage = p + break + } + } - expect(ytPage).toBeDefined() - expect(ytPage?.url()).toContain('youtube.com') + expect(iframePage).toBeDefined() + expect(iframePage?.url()).toContain('about:') await browser.close() - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 100)) } await page.close() - }, 60000) + }, 30000) it('should capture screenshot correctly', async () => { const browserContext = getBrowserContext() @@ -1302,7 +1318,7 @@ describe('MCP Server Tests', () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) const capturedCommands: CDPCommand[] = [] const commandHandler = ({ command }: { clientId: string; command: CDPCommand }) => { @@ -1431,7 +1447,7 @@ describe('MCP Server Tests', () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) const capturedCommands: CDPCommand[] = [] const commandHandler = ({ command }: { clientId: string; command: CDPCommand }) => { @@ -1546,7 +1562,7 @@ describe('MCP Server Tests', () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -1626,7 +1642,7 @@ describe('MCP Server Tests', () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -1651,20 +1667,20 @@ describe('MCP Server Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.disconnectEverything() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) const targetUrl = 'https://example.com/' const enableResult = await serviceWorker.evaluate(async (url) => { const tab = await chrome.tabs.create({ url, active: true }) - await new Promise(r => setTimeout(r, 1000)) + await new Promise(r => setTimeout(r, 300)) return await globalThis.toggleExtensionForActiveTab() }, targetUrl) console.log('Extension enabled:', enableResult) expect(enableResult.isConnected).toBe(true) - await new Promise(r => setTimeout(r, 1000)) + await new Promise(r => setTimeout(r, 300)) const { Stagehand } = await import('@browserbasehq/stagehand') @@ -1714,7 +1730,7 @@ describe('MCP Server Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) const result = await client.callTool({ name: 'execute', @@ -1772,7 +1788,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.disconnectEverything() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) }, 600000) afterAll(async () => { @@ -1796,7 +1812,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -1848,6 +1864,7 @@ describe('CDP Session Tests', () => { expect(evalResult.value).toBe('hello world') await dbg.resume() + await new Promise(r => setTimeout(r, 100)) expect(dbg.isPaused()).toBe(false) cdpSession.close() @@ -1866,7 +1883,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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')) @@ -1916,7 +1933,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) let cdpPage @@ -1965,7 +1982,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -2038,7 +2055,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -2093,7 +2110,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -2144,7 +2161,7 @@ describe('CDP Session Tests', () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -2193,10 +2210,10 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) await page.goto('https://news.ycombinator.com/', { waitUntil: 'networkidle' }) - await new Promise(r => setTimeout(r, 500)) + 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')) @@ -2228,7 +2245,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -2280,7 +2297,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -2356,7 +2373,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + await new Promise(r => setTimeout(r, 200)) const browser = await chromium.connectOverCDP(getCdpUrl({ port: TEST_PORT })) let cdpPage @@ -2420,7 +2437,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com')) @@ -2461,7 +2478,7 @@ describe('CDP Session Tests', () => { await serviceWorker.evaluate(async () => { await globalThis.toggleExtensionForActiveTab() }) - await new Promise(r => setTimeout(r, 500)) + 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('example.com'))