跳到正文
cccskills
免费在 GitHub 公开

testdriver:press-keys

Press keyboard keys and shortcuts

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(1)

  • SKILL.md8.0 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

<!-- Generated from press-keys.mdx. DO NOT EDIT. -->

Overview

Push one or more keyboard keys at the same time. Use this for keyboard shortcuts, navigation, and special keys.

Syntax

await testdriver.pressKeys(keys)

Parameters

<ParamField path="keys" type="Array&lt;string&gt;" required> An array of the keys to push at the same time </ParamField>

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

Navigation

// 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

<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:

  • 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
</Warning>

Use Cases

<AccordionGroup> <Accordion title="Form Navigation"> ```javascript // 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"> ```javascript 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"> ```javascript // 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"> ```javascript // 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
```
</Accordion> </AccordionGroup>

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();
  });

  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('user@example.com');
    
    // 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']);
  });
});

Related Methods

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

How the TestDriver agent behaves on GitHub issues, pull requests, and @mentions

中文简介正在准备中。当前显示原文说明。

testdriverai/testdriverai4772026年9月21日 更新

Execute natural language tasks using AI

中文简介正在准备中。当前显示原文说明。

testdriverai/testdriverai4772026年9月21日 更新

Make AI-powered assertions about screen state

中文简介正在准备中。当前显示原文说明。

testdriverai/testdriverai4772026年9月21日 更新

Deploy TestDriver on your AWS infrastructure using CloudFormation

中文简介正在准备中。当前显示原文说明。

testdriverai/testdriverai4772026年9月21日 更新

Speed up tests with screenshot-based caching

中文简介正在准备中。当前显示原文说明。

testdriverai/testdriverai4772026年9月21日 更新

How TestDriver learns your app and caches what it discovers for instant, deterministic replays

中文简介正在准备中。当前显示原文说明。

testdriverai/testdriverai4772026年9月21日 更新

查看 testdriverai 的全部技能

报告此技能的问题