Skip to content
Testing
Skill

/testdriver-client

Create the TestDriver client, authenticate, and connect to a sandbox

From plugin
testdriverai
35665 skills1 agent

Claude Code

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

SKILL.md

testdriver-client.SKILL.md
name: testdriver:client
description: Create the TestDriver client, authenticate, and connect to a sandbox

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

Overview

The `TestDriver` client is the main entry point for the SDK. It does the authentication and the sandbox connection. It gives access to all test methods.

Constructor

const testdriver = new TestDriver(apiKey, options)

Parameters

<ParamField path="apiKey" type="string" required> Your TestDriver API key from the [dashboard](https://console.testdriver.ai/settings) </ParamField>

<ParamField path="options" type="object"> The configuration options for the client. See [SDK Options](/options) for the full list, with defaults and examples for each option. </ParamField>

Example

import TestDriver from 'testdriverai';

// API key is automatically loaded from TD_API_KEY in .env
const testdriver = new TestDriver({
  os: 'windows',
  resolution: '1920x1080',
  logging: true,
  analytics: true
});

// With AI config for stricter verification
const testdriver = new TestDriver({
  ai: { temperature: 0, top: { p: 0.9, k: 40 } }
});

// Or pass API key explicitly
const testdriver = new TestDriver('your-api-key', {
  os: 'windows'
});

Authentication

auth()

Authenticate with the TestDriver API.

await testdriver.auth()

**Returns:** `Promise<string>` - Authentication token

**Example:**

await testdriver.auth();

<Note> You must call `auth()` before `connect()`. Most examples call both sequentially. </Note>

Connection Management

connect()

Connect to a sandbox environment. This creates or reconnects to a virtual machine where your tests will run.

await testdriver.connect(options)

Parameters

<ParamField path="options" type="object"> Connection options

<Expandable title="properties"> <ParamField path="newSandbox" type="boolean" default="false"> Force creation of a new sandbox instead of reusing an existing one </ParamField>

<ParamField path="sandboxId" type="string"> Existing sandbox ID to reconnect to </ParamField>

<ParamField path="ip" type="string"> Direct IP address to connect to (for self-hosted sandboxes) </ParamField>

<ParamField path="sandboxAmi" type="string"> AMI to use for the sandbox (AWS deployments) </ParamField>

<ParamField path="sandboxInstance" type="string"> Instance type for the sandbox (AWS deployments) </ParamField>

<ParamField path="preview" type="string" default="browser"> Preview mode for live test visualization:

  • `"browser"` - Opens debugger in default browser (default)
  • `"ide"` - Opens preview in IDE panel (VSCode, Cursor - requires TestDriver extension)
  • `"none"` - Headless mode, no visual preview

</ParamField>

<ParamField path="headless" type="boolean" default="false"> **Deprecated**: Use `preview: "none"` instead. Run in headless mode without opening the debugger. </ParamField>

<ParamField path="keepAlive" type="number" default="60000"> Keep sandbox alive for the specified number of milliseconds after disconnect. Set to `0` to terminate immediately on disconnect. Useful for debugging or reconnecting to the same sandbox. </ParamField> </Expandable> </ParamField>

**Returns:** `Promise&lt;Object&gt;` - Sandbox instance details including `instanceId`, `ip`, `vncPort`, etc.

Examples

**Basic connection:**

await testdriver.connect();

**Reconnect to existing sandbox:**

const instance = await testdriver.connect({ 
  sandboxId: 'existing-sandbox-id-123' 
});

**Self-hosted sandbox:**

await testdriver.connect({ 
  ip: '192.168.1.100'
});

disconnect()

Disconnect from the sandbox and clean up resources.

await testdriver.disconnect()

**Returns:** `Promise<void>`

**Example:**

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

Instance Information

getInstance()

Get the current sandbox instance details.

const instance = testdriver.getInstance()

**Returns:** `Object | null` - Sandbox instance information

**Example:**

const instance = testdriver.getInstance();
console.log('Instance ID:', instance.instanceId);
console.log('IP Address:', instance.ip);

getSessionId()

Get the current session ID for tracking and debugging.

const sessionId = testdriver.getSessionId()

**Returns:** `string | null` - Session ID

**Example:**

const sessionId = testdriver.getSessionId();
console.log('Session:', sessionId);

Logging & Events

setLogging()

Enable or disable console logging at runtime.

testdriver.setLogging(enabled)

**Parameters:**

  • `enabled` (boolean) - Whether to enable logging

**Example:**

// Disable logging for cleanup operations
testdriver.setLogging(false);
await testdriver.disconnect();
testdriver.setLogging(true);

getEmitter()

Get the event emitter for custom event handling.

const emitter = testdriver.getEmitter()

**Returns:** `EventEmitter2` - Event emitter instance

**Example:**

const emitter = testdriver.getEmitter();

emitter.on('command:start', (data) => {
  console.log('Command started:', data);
});

emitter.on('command:success', (data) => {
  console.log('Command succeeded:', data);
});

emitter.on('command:error', (error) => {
  console.error('Command failed:', error);
});

Complete Example

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

describe('My Test Suite', () => {
  let testdriver;

  beforeAll(async () => {
    // Initialize client - API key loaded automatically from .env
    testdriver = new TestDriver({
      os: 'windows',
      resolution:
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…

grafana5d78k
@grafana@grafanaInstall Skill
promptfoo-evals

promptfoo-evals

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

promptfoo13d27k
@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-client.

Which coding agents can use testdriver-client?
testdriver-client 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.