hover
Simulate mouse hover interactions on web elements to trigger dynamic content like dropdown menus, tooltips, or hover effects for automated browser testing and interaction.
Instructions
Hover over an element on the page
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector for the element | |
| timeout | No | Timeout in milliseconds | |
| tabId | No | Tab ID to operate on (uses active tab if not specified) |
Implementation Reference
- src/schemas.ts:75-79 (schema)Zod schema for hover tool input: requires CSS selector, optional timeout (ms), optional tabId.export const hoverSchema = z.object({ selector: selectorSchema, timeout: timeoutSchema, tabId: tabIdSchema, });
- src/tools/interaction.ts:128-161 (registration)Registers the 'hover' MCP tool with server.tool(): description, input schema, and inline handler that waits for element by selector and calls element.hover() using Playwright.// Hover over element server.tool( 'hover', 'Hover over an element on the page', hoverSchema.shape, async ({ selector, timeout, tabId }) => { const pageResult = await getPageForOperation(tabId); if (!pageResult.success) { return handleResult(pageResult); } const page = pageResult.data; const timeoutMs = timeout ?? getDefaultTimeout(); try { const element = await page.waitForSelector(selector, { timeout: timeoutMs, }); if (!element) { return handleResult(err(selectorNotFound(selector))); } await element.hover(); return handleResult(ok({ hovered: true, selector })); } catch (error) { if (error instanceof Error && error.message.includes('waiting for selector')) { return handleResult(err(selectorNotFound(selector))); } return handleResult(err(normalizeError(error))); } } );
- src/server.ts:24-24 (registration)Invokes registerInteractionTools(server) within createServer() to register all interaction tools, including 'hover'.registerInteractionTools(server);
- src/tools/interaction.ts:133-160 (handler)Inline handler function for hover tool: gets page, waits for selector, hovers element, handles errors appropriately.async ({ selector, timeout, tabId }) => { const pageResult = await getPageForOperation(tabId); if (!pageResult.success) { return handleResult(pageResult); } const page = pageResult.data; const timeoutMs = timeout ?? getDefaultTimeout(); try { const element = await page.waitForSelector(selector, { timeout: timeoutMs, }); if (!element) { return handleResult(err(selectorNotFound(selector))); } await element.hover(); return handleResult(ok({ hovered: true, selector })); } catch (error) { if (error instanceof Error && error.message.includes('waiting for selector')) { return handleResult(err(selectorNotFound(selector))); } return handleResult(err(normalizeError(error))); } }