testdriver-agent
How the TestDriver agent behaves on GitHub issues, pull requests, and @mentions
Press keyboard keys and shortcuts
Claude Code
$ npx -y skills add testdriverai/testdriverai --skill testdriver-press-keys --agent claude-code
Codex
$ npx skills add testdriverai/testdriverai --skill testdriver-press-keys -a codex -y
Cursor
$ npx skills add testdriverai/testdriverai --skill testdriver-press-keys -a cursor -y
Gemini CLI
$ npx skills add testdriverai/testdriverai --skill testdriver-press-keys -a gemini-cli -y
GitHub Copilot
$ npx skills add testdriverai/testdriverai --skill testdriver-press-keys -a github-copilot -y
OpenCode
$ npx skills add testdriverai/testdriverai --skill testdriver-press-keys -a opencode -y
Windsurf
$ npx skills add testdriverai/testdriverai --skill testdriver-press-keys -a windsurf -y
name: testdriver:press-keys description: Press keyboard keys and shortcuts
<!-- Generated from press-keys.mdx. DO NOT EDIT. -->
Push one or more keyboard keys at the same time. Use this for keyboard shortcuts, navigation, and special keys.
await testdriver.pressKeys(keys)
<ParamField path="keys" type="Array<string>" required> An array of the keys to push at the same time </ParamField>
`Promise<void>`
// Tab to next field await testdriver.pressKeys(['tab']); // Shift+Tab to previous field await testdriver.pressKeys(['shift', 'tab']); // Arrow keys await testdriver.pressKeys(['down']); await testdriver.pressKeys(['up']); await testdriver.pressKeys(['left']); await testdriver.pressKeys(['right']); // Home/End await testdriver.pressKeys(['home']); // Start of line await testdriver.pressKeys(['end']); // End of line // Page navigation await testdriver.pressKeys(['pagedown']); await testdriver.pressKeys(['pageup']);
// Copy (Ctrl+C / Cmd+C) await testdriver.pressKeys(['ctrl', 'c']); // Paste (Ctrl+V / Cmd+V) await testdriver.pressKeys(['ctrl', 'v']); // Save (Ctrl+S) await testdriver.pressKeys(['ctrl', 's']); // Select All (Ctrl+A) await testdriver.pressKeys(['ctrl', 'a']); // Undo (Ctrl+Z) await testdriver.pressKeys(['ctrl', 'z']); // Redo (Ctrl+Y) await testdriver.pressKeys(['ctrl', 'y']); // Find (Ctrl+F) await testdriver.pressKeys(['ctrl', 'f']); // New tab (Ctrl+T) await testdriver.pressKeys(['ctrl', 't']); // Close tab (Ctrl+W) await testdriver.pressKeys(['ctrl', 'w']); // Refresh (F5 or Ctrl+R) await testdriver.pressKeys(['f5']); await testdriver.pressKeys(['ctrl', 'r']);
// Alt+Tab (Windows - switch apps) await testdriver.pressKeys(['alt', 'tab']); // Alt+F4 (Windows - close window) await testdriver.pressKeys(['alt', 'f4']); // Win+D (Windows - show desktop) await testdriver.pressKeys(['winleft', 'd']); // Win+L (Windows - lock screen) await testdriver.pressKeys(['winleft', 'l']); // Cmd+Tab (macOS - switch apps) await testdriver.pressKeys(['command', 'tab']); // Cmd+Q (macOS - quit app) await testdriver.pressKeys(['command', 'q']);
// Submit form await testdriver.pressKeys(['enter']); // Cancel/Close await testdriver.pressKeys(['escape']); // Check checkbox await testdriver.pressKeys(['space']);
// Delete selected text await testdriver.pressKeys(['delete']); // Backspace await testdriver.pressKeys(['backspace']); // Select all and delete await testdriver.pressKeys(['ctrl', 'a']); await testdriver.pressKeys(['delete']); // Cut text await testdriver.pressKeys(['ctrl', 'x']);
<Check> **Wait after shortcuts**
Some keyboard shortcuts trigger animations or navigation:
await testdriver.pressKeys(['ctrl', 't']); // New tab await new Promise(r => setTimeout(r, 500)); // Wait for tab await testdriver.pressKeys(['ctrl', 'l']); // Focus URL bar
</Check>
<Check> **Use Tab for form navigation**
Tab is more reliable than clicking multiple fields:
const firstField = await testdriver.find('email input');
await firstField.click();
await testdriver.type('user@example.com');
await testdriver.pressKeys(['tab']);
await testdriver.type('password123');
await testdriver.pressKeys(['tab']);
await testdriver.pressKeys(['enter']); // Submit</Check>
<Warning> **Platform-specific keys**
Use the appropriate modifier key for the platform:
// For cross-platform, you might need to detect OS const modKey = process.platform === 'darwin' ? 'command' : 'ctrl'; await testdriver.pressKeys([modKey, 'c']); // Copy
</Warning>
<AccordionGroup> <Accordion title="Form Navigation">
// Fill form using Tab
const firstField = await testdriver.find('name field');
await firstField.click();
await testdriver.type('John Doe');
await testdriver.pressKeys(['tab']);
await testdriver.type('john@example.com');
await testdriver.pressKeys(['tab']);
await testdriver.type('555-0123');
await testdriver.pressKeys(['tab']);
await testdriver.pressKeys(['enter']); // Submit</Accordion>
<Accordion title="Text Manipulation">
const textArea = await testdriver.find('comment textarea');
await textArea.click();
// Select all existing text
await testdriver.pressKeys(['ctrl', 'a']);
// Copy it
await testdriver.pressKeys(['ctrl', 'c']);
// Type new text
await testdriver.type('New comment');
// Undo if needed
await testdriver.pressKeys(['ctrl', 'z']);</Accordion>
<Accordion title="Browser Navigation">
// Open new tab
await testdriver.pressKeys(['ctrl', 't']);
await new Promise(r => setTimeout(r, 500));
// Focus address bar
await testdriver.pressKeys(['ctrl', 'l']);
await testdriver.type('https://example.com');
await testdriver.pressKeys(['enter']);
// Refresh page
await testdriver.pressKeys(['f5']);
// Close tab
await testdriver.pressKeys(['ctrl', 'w']);</Accordion>
<Accordion title="Application Shortcuts">
// Save document
await testdriver.pressKeys(['cHow the TestDriver agent behaves on GitHub issues, pull requests, and @mentions
Deploy TestDriver on your AWS infrastructure using CloudFormation
How TestDriver learns your app and caches what it discovers for instant, deterministic replays
Produce the "Playwright 1.xx API Review" artifact for a range of commits - the public API additions and the breaking or behavior…
Write, refine, run, and QA promptfoo evaluation suites: promptfooconfig.yaml, prompts, providers, vars, tests, assertions,…
DeepEval evaluation workflow for AI agents and LLM applications. TRIGGER when the user wants to evaluate or improve an AI agent,…