Skip to main content

Overview

Press one or more keyboard keys simultaneously, useful for keyboard shortcuts, navigation, and special keys.

Syntax

await testdriver.pressKeys(keys)

Parameters

keys
Array<string>
required
Array of keys to press simultaneously

Returns

Promise<void>

Common Keys

Special Keys

  • 'enter', 'tab', 'escape', 'backspace', 'delete'
  • 'space', 'up', 'down', 'left', 'right'
  • 'home', 'end', 'pageup', 'pagedown'

Modifier Keys

  • 'ctrl', 'alt', 'shift'
  • 'command' (macOS), 'win' (Windows)
  • 'ctrlleft', 'ctrlright', 'shiftleft', 'shiftright'

Function Keys

  • 'f1' through 'f24'

Examples

// 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']);

Keyboard Shortcuts

// 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']);

System Shortcuts

// 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']);

Form Submission

// Submit form
await testdriver.pressKeys(['enter']);

// Cancel/Close
await testdriver.pressKeys(['escape']);

// Check checkbox
await testdriver.pressKeys(['space']);

Text Editing

// 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']);

Best Practices

Wait after shortcutsSome 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
Use Tab for form navigationTab is more reliable than clicking multiple fields:
const firstField = await testdriver.find('email input');
await firstField.click();
await testdriver.type('[email protected]');

await testdriver.pressKeys(['tab']);
await testdriver.type('password123');

await testdriver.pressKeys(['tab']);
await testdriver.pressKeys(['enter']); // Submit
Platform-specific keysUse the appropriate modifier key for the platform:
  • Windows/Linux: 'ctrl'
  • macOS: 'command'
// For cross-platform, you might need to detect OS
const modKey = process.platform === 'darwin' ? 'command' : 'ctrl';
await testdriver.pressKeys([modKey, 'c']); // Copy

Use Cases

// 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('[email protected]');

await testdriver.pressKeys(['tab']);
await testdriver.type('555-0123');

await testdriver.pressKeys(['tab']);
await testdriver.pressKeys(['enter']); // Submit
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']);
// 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']);
// Save document
await testdriver.pressKeys(['ctrl', 's']);

// Print
await testdriver.pressKeys(['ctrl', 'p']);

// Find in page
await testdriver.pressKeys(['ctrl', 'f']);
await testdriver.type('search term');
await testdriver.pressKeys(['escape']); // Close find

Complete Example

import { beforeAll, afterAll, describe, it } from 'vitest';
import TestDriver from 'testdriverai';

describe('Keyboard Navigation', () => {
  let testdriver;

  beforeAll(async () => {
    client = new TestDriver(process.env.TD_API_KEY);
    await testdriver.auth();
    await testdriver.connect({ newSandbox: true });
  });

  afterAll(async () => {
    await testdriver.disconnect();
  });

  it('should navigate form with keyboard', async () => {
    await testdriver.focusApplication('Google Chrome');
    
    // Find first field
    const emailField = await testdriver.find('email input');
    await emailField.click();
    await testdriver.type('[email protected]');
    
    // Tab through fields
    await testdriver.pressKeys(['tab']);
    await testdriver.type('John');
    
    await testdriver.pressKeys(['tab']);
    await testdriver.type('Doe');
    
    await testdriver.pressKeys(['tab']);
    await testdriver.type('password123');
    
    // Submit with Enter
    await testdriver.pressKeys(['tab']);
    await testdriver.pressKeys(['enter']);
    
    await testdriver.assert('form submitted successfully');
  });

  it('should use keyboard shortcuts', async () => {
    // Open new browser 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']);
    
    await new Promise(r => setTimeout(r, 2000));
    
    // Select all page content
    await testdriver.pressKeys(['ctrl', 'a']);
    
    // Copy
    await testdriver.pressKeys(['ctrl', 'c']);
    
    // Refresh page
    await testdriver.pressKeys(['f5']);
  });
});