Skip to main content
Glama

Playwright MCP Server

by BhanuTJ93
goNavigation.test.ts3.71 kB
import { GoBackTool, GoForwardTool } from '../../../tools/browser/navigation.js'; import { ToolContext } from '../../../tools/common/types.js'; import { Page, Browser } from 'playwright'; import { jest } from '@jest/globals'; // Mock page functions const mockGoBack = jest.fn().mockImplementation(() => Promise.resolve()); const mockGoForward = jest.fn().mockImplementation(() => Promise.resolve()); const mockIsClosed = jest.fn().mockReturnValue(false); // Mock the Page object with proper typing const mockPage = { goBack: mockGoBack, goForward: mockGoForward, isClosed: mockIsClosed } as unknown as Page; // Mock the browser const mockIsConnected = jest.fn().mockReturnValue(true); const mockBrowser = { isConnected: mockIsConnected } as unknown as Browser; // Mock the server const mockServer = { sendMessage: jest.fn() }; // Mock context const mockContext = { page: mockPage, browser: mockBrowser, server: mockServer } as ToolContext; describe('Browser Navigation History Tools', () => { let goBackTool: GoBackTool; let goForwardTool: GoForwardTool; beforeEach(() => { jest.clearAllMocks(); goBackTool = new GoBackTool(mockServer); goForwardTool = new GoForwardTool(mockServer); // Reset browser and page mocks mockIsConnected.mockReturnValue(true); mockIsClosed.mockReturnValue(false); }); describe('GoBackTool', () => { test('should navigate back in browser history', async () => { const args = {}; const result = await goBackTool.execute(args, mockContext); expect(mockGoBack).toHaveBeenCalled(); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('Navigated back'); }); test('should handle navigation back errors', async () => { const args = {}; // Mock a navigation error mockGoBack.mockImplementationOnce(() => Promise.reject(new Error('Navigation back failed'))); const result = await goBackTool.execute(args, mockContext); expect(mockGoBack).toHaveBeenCalled(); expect(result.isError).toBe(true); expect(result.content[0].text).toContain('Operation failed'); }); test('should handle missing page', async () => { const args = {}; const result = await goBackTool.execute(args, { server: mockServer } as ToolContext); expect(mockGoBack).not.toHaveBeenCalled(); expect(result.isError).toBe(true); expect(result.content[0].text).toContain('Browser page not initialized'); }); }); describe('GoForwardTool', () => { test('should navigate forward in browser history', async () => { const args = {}; const result = await goForwardTool.execute(args, mockContext); expect(mockGoForward).toHaveBeenCalled(); expect(result.isError).toBe(false); expect(result.content[0].text).toContain('Navigated forward'); }); test('should handle navigation forward errors', async () => { const args = {}; // Mock a navigation error mockGoForward.mockImplementationOnce(() => Promise.reject(new Error('Navigation forward failed'))); const result = await goForwardTool.execute(args, mockContext); expect(mockGoForward).toHaveBeenCalled(); expect(result.isError).toBe(true); expect(result.content[0].text).toContain('Operation failed'); }); test('should handle missing page', async () => { const args = {}; const result = await goForwardTool.execute(args, { server: mockServer } as ToolContext); expect(mockGoForward).not.toHaveBeenCalled(); expect(result.isError).toBe(true); expect(result.content[0].text).toContain('Browser page not initialized'); }); }); });

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/BhanuTJ93/MCP'

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