ui.press_key
Press special keys like return, backspace, or delete during iOS Simulator UI automation for React Native/Expo development testing.
Instructions
Press a special key (return, backspace, delete)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key to press. |
Implementation Reference
- src/mcp/server.ts:598-622 (registration)Registers the ui.press_key MCP tool, providing description, input schema, and the handler function that generates a Detox snippet and executes it via runDetoxAction.server.tool( "ui.press_key", "Press a special key (return, backspace, delete)", UiPressKeyInputSchema.shape, async (args) => { try { const snippet = generatePressKeySnippet(args.key); const result = await runDetoxAction({ actionName: `pressKey:${args.key}`, actionSnippet: snippet, }); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], isError: !result.success, }; } catch (error) { return handleToolError(error); } } );
- src/mcp/server.ts:602-621 (handler)The core handler function for ui.press_key: generates Detox code snippet using the provided key and runs it, returning the result or error.async (args) => { try { const snippet = generatePressKeySnippet(args.key); const result = await runDetoxAction({ actionName: `pressKey:${args.key}`, actionSnippet: snippet, }); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], isError: !result.success, }; } catch (error) { return handleToolError(error); } }
- src/mcp/schemas.ts:82-84 (schema)Zod schema defining the input for ui.press_key: requires a 'key' enum of supported special keys.export const UiPressKeyInputSchema = z.object({ key: z.enum(["return", "backspace", "delete"]).describe("Key to press."), });
- src/detox/actions.ts:92-104 (helper)Helper function that generates the specific Detox test code snippet for pressing the given key (targets first UITextField).export function generatePressKeySnippet(key: KeyType): string { switch (key) { case "return": return `await element(by.type('UITextField')).atIndex(0).tapReturnKey();`; case "backspace": return `await element(by.type('UITextField')).atIndex(0).tapBackspaceKey();`; case "delete": // Delete key is same as backspace on iOS return `await element(by.type('UITextField')).atIndex(0).tapBackspaceKey();`; default: throw new Error(`Unsupported key: ${key}`); } }