Skip to content
Testing
Skill

/testdriver-type

Type text into focused input fields

From plugin
testdriverai
35665 skills1 agent

Claude Code

$ npx -y skills add testdriverai/testdriverai --skill testdriver-type --agent claude-code

SKILL.md

testdriver-type.SKILL.md
name: testdriver:type
description: Type text into focused input fields

<!-- Generated from type.mdx. DO NOT EDIT. -->

Overview

Type text or numbers into the input field that has focus. You can set an optional delay between the keystrokes.

Syntax

await testdriver.type(text, options)

Parameters

<ParamField path="text" type="string | number" required> Text to type (can be a string or number) </ParamField>

<ParamField path="options" type="object | number"> Typing options (or legacy delay number)

<Expandable title="properties"> <ParamField path="delay" type="number" default={250}> Delay between keystrokes in milliseconds </ParamField>

<ParamField path="secret" type="boolean" default={false}> If `true`, TestDriver makes the text sensitive data. It does not log or store it in the debug info or in dashcam. </ParamField> </Expandable> </ParamField>

Returns

`Promise<void>`

Examples

Basic Typing

// Type text
await testdriver.type('hello@example.com');

// Type numbers
await testdriver.type(12345);

// Type with custom delay (legacy syntax)
await testdriver.type('slow typing', 500); // 500ms between each character

// Type with options object
await testdriver.type('text', { delay: 500 });

Password/Secret Handling

// ✅ SECURE - Mark as secret to prevent logging
const passwordField = await testdriver.find('password input');
await passwordField.click();
await testdriver.type('MySecureP@ssw0rd', { secret: true });
// Password NOT logged in dashcam or debug output

// ❌ INSECURE - Password will be logged
await testdriver.type('MySecureP@ssw0rd');
// Password appears in logs, dashcam replay, and debug info

// Use secret for any sensitive data
await testdriver.find('api key input').click();
await testdriver.type('sk-1234567890abcdef', { secret: true });

await testdriver.find('credit card input').click();
await testdriver.type('4111111111111111', { secret: true });

<Warning> **Always use `secret: true` for passwords and sensitive data.**

If you do not use this option, the typed text shows in these:

  • Dashcam video replays
  • TestDriver logs
  • Debug screenshots
  • Error messages

</Warning>

Form Filling

// Focus field and type
const emailField = await testdriver.find('email input');
await emailField.click();
await testdriver.type('user@example.com');

// Tab to next field and type
await testdriver.pressKeys(['tab']);
await testdriver.type('John Doe');

// Type password securely
await testdriver.pressKeys(['tab']);
await testdriver.type('MySecureP@ssw0rd', { secret: true });

Clearing and Replacing Text

const searchBox = await testdriver.find('search input');
await searchBox.click();

// Clear existing text
await testdriver.pressKeys(['ctrl', 'a']); // Select all
await testdriver.type('new search query');

Best Practices

<Check> **Focus the field first**

Always click the input field or navigate to it before typing:

  const input = await testdriver.find('username input');
  await input.click();
  await testdriver.type('testuser');

</Check>

<Check> **Use Tab for navigation**

Navigate between fields using Tab instead of clicking each one:

  const firstField = await testdriver.find('first name');
  await firstField.click();
  await testdriver.type('John');
  
  await testdriver.pressKeys(['tab']);
  await testdriver.type('Doe');
  
  await testdriver.pressKeys(['tab']);
  await testdriver.type('john@example.com');

</Check>

<Check> **Clear fields before typing**

Clear existing content to avoid appending:

  const input = await testdriver.find('search field');
  await input.click();
  await testdriver.pressKeys(['ctrl', 'a']); // Select all
  await testdriver.type('new search');

</Check>

<Warning> **Field must be focused**

Typing will only work if an input field is currently focused. If no field is focused, the text may be lost or trigger unexpected keyboard shortcuts. </Warning>

Use Cases

<AccordionGroup> <Accordion title="Login Forms">

    await testdriver.focusApplication('Google Chrome');
    
    const usernameField = await testdriver.find('username input');
    await usernameField.click();
    await testdriver.type('testuser@example.com');
    
    await testdriver.pressKeys(['tab']);
    await testdriver.type('MyP@ssword123', { secret: true });
    
    await testdriver.pressKeys(['enter']);

</Accordion>

<Accordion title="Search Fields">

    const searchBox = await testdriver.find('search input');
    await searchBox.click();
    await testdriver.type('laptop computers');
    await testdriver.pressKeys(['enter']);
    
    // Wait for results
    await new Promise(r => setTimeout(r, 2000));

</Accordion>

<Accordion title="Multi-Field Forms">

    // First field
    const nameField = await testdriver.find('full name input');
    await nameField.click();
    await testdriver.type('Jane Smith');
    
    // Navigate with Tab
    await testdriver.pressKeys(['tab']);
    await testdriver.type('jane.smith@example.com');
    
    await testdriver.pressKeys(['tab']);
    await testdriver.type('+1-555-0123');
    
    await testdriver.pressKeys(['tab']);
    await testdriver.type('123 Main Street');

</Accordion>

<Accordion title="Text Editors">

    const editor = await testdriver.find('text editor area');
    await editor.click();
    
    await testdriver.type('# My Document', 100);
    await testdriver.pressKeys(['enter', 'enter']);
    await testdriver.type('This is the first paragraph.', 50);

</Accordion>

<Accordion title="Numeric Input">

    const quantityField = await testdriver.find('quantity input');
    await quantityField.click();
    
    // Clea
Read more
@testdriverai
Ships withtestdriverai

Computer-Use SDK for E2E QA Testing

35665 skills1 agent
Get the whole plugin

Stars on GitHub

Momentum

stars in total
356
Star history of testdriverai/testdriverai on GitHub, a chart by star-history.com

Other skills on testdriverai.

More skills from other plugins.

api-review

api-review

Produce the "Playwright 1.xx API Review" artifact for a range of commits - the public API additions and the breaking or behavior…

@microsoft@microsoftInstall Skill
add-e2e-selectors

add-e2e-selectors

Add reliable @grafana/e2e-selectors to interactive elements and key containers in the Grafana frontend. Use when adding e2e…

grafana1d78k
@grafana@grafanaInstall Skill
promptfoo-evals

promptfoo-evals

Write, refine, run, and QA promptfoo evaluation suites: promptfooconfig.yaml, prompts, providers, vars, tests, assertions,…

@promptfoo@promptfooInstall Skill
deepeval

deepeval

DeepEval evaluation workflow for AI agents and LLM applications. TRIGGER when the user wants to evaluate or improve an AI agent,…

@confident-ai@confident-aiInstall Skill

Questions about testdriver-type.

Which coding agents can use testdriver-type?
testdriver-type installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.