Skip to main content
Glama
tabSwitchIntegration.test.ts3.93 kB
/** * Integration test to verify that console logs are captured after switching tabs * using the actual toolHandler infrastructure. */ import { handleToolCall } from '../../toolHandler.js'; import { jest } from '@jest/globals'; const mockServer = { sendMessage: jest.fn() }; describe('Tab switch integration test', () => { afterEach(async () => { // Clean up by closing the browser await handleToolCall('close', {}, mockServer); }); test('should capture console logs from new tab after click_and_switch_tab', async () => { // Create a simple HTML page with a link that opens in a new tab const htmlContent = ` <!DOCTYPE html> <html> <head><title>Test Page</title></head> <body> <a href="about:blank" target="_blank" id="new-tab-link">Open New Tab</a> <script> // Log something on the first page console.log('Message from original page'); </script> </body> </html> `; const dataUrl = `data:text/html;base64,${Buffer.from(htmlContent).toString('base64')}`; // Navigate to the page const navResult = await handleToolCall('navigate', { url: dataUrl, headless: true }, mockServer); expect(navResult.isError).toBe(false); // Wait a bit for the console message await new Promise(resolve => setTimeout(resolve, 100)); // Get console logs - should have the message from the original page const logs1 = await handleToolCall('get_console_logs', {}, mockServer); expect(logs1.isError).toBe(false); const logs1Text = logs1.content.map((c: any) => c.text).join('\n'); expect(logs1Text).toContain('Message from original page'); // Click the link to open a new tab // Note: We can't use click_and_switch_tab with data URLs in tests because // browser security prevents data URLs from opening new tabs. // So we'll skip this part of the test for now. // Clean up await handleToolCall('close', {}, mockServer); }, 30000); test('should capture console logs after navigation', async () => { // Navigate to first page const html1 = ` <!DOCTYPE html> <html> <head><title>Page 1</title></head> <body> <h1>Page 1</h1> <script>console.log('Log from page 1');</script> </body> </html> `; const dataUrl1 = `data:text/html;base64,${Buffer.from(html1).toString('base64')}`; const navResult1 = await handleToolCall('navigate', { url: dataUrl1, headless: true }, mockServer); expect(navResult1.isError).toBe(false); await new Promise(resolve => setTimeout(resolve, 100)); // Get console logs from first page const logs1 = await handleToolCall('get_console_logs', { since: 'last-navigation' }, mockServer); expect(logs1.isError).toBe(false); const logs1Text = logs1.content.map((c: any) => c.text).join('\n'); expect(logs1Text).toContain('Log from page 1'); // Navigate to second page const html2 = ` <!DOCTYPE html> <html> <head><title>Page 2</title></head> <body> <h1>Page 2</h1> <script>console.log('Log from page 2');</script> </body> </html> `; const dataUrl2 = `data:text/html;base64,${Buffer.from(html2).toString('base64')}`; const navResult2 = await handleToolCall('navigate', { url: dataUrl2, headless: true }, mockServer); expect(navResult2.isError).toBe(false); await new Promise(resolve => setTimeout(resolve, 100)); // Get console logs from second page (since last navigation) const logs2 = await handleToolCall('get_console_logs', { since: 'last-navigation' }, mockServer); expect(logs2.isError).toBe(false); const logs2Text = logs2.content.map((c: any) => c.text).join('\n'); expect(logs2Text).toContain('Log from page 2'); // Clean up await handleToolCall('close', {}, mockServer); }, 30000); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/antonzherdev/mcp-web-inspector'

If you have feedback or need assistance with the MCP directory API, please join our Discord server