Skip to main content
TestDriver scales effortlessly from your first test to enterprise suites with thousands of tests running in parallel across multiple platforms.

Works with Vitest

Full integration with Vitest’s powerful features:
vitest.config.mjs
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    testTimeout: 120000,
    hookTimeout: 120000,
    maxConcurrency: 10,      // Run 10 tests in parallel
    minThreads: 2,
    maxThreads: 10,
  },
});

Parallel Execution

Run multiple tests simultaneously for maximum throughput:
# Run all tests in parallel
npx vitest run

# Control concurrency
npx vitest run --max-concurrency=5

Watch Mode

Instant feedback during development:
# Run in watch mode
npx vitest

# Only run changed tests
npx vitest --changed
See complete Vitest integration guide

CI/CD Compatible

TestDriver integrates seamlessly with all major CI/CD platforms:
  • GitHub Actions
  • GitLab CI
  • CircleCI
  • Jenkins
.github/workflows/test.yml
name: E2E Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
      - run: npm install
      - run: npx vitest run
        env:
          TD_API_KEY: ${{ secrets.TD_API_KEY }}
GitHub Actions guide

JUnit Reports

Generate JUnit XML reports for test result aggregation:
# Generate JUnit report
npx vitest run --reporter=junit --outputFile=test-results.xml
test-results.xml
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="vitest tests" tests="12" failures="0" errors="0" time="125.3">
  <testsuite name="login.test.js" tests="3" failures="0" time="31.2">
    <testcase name="user can login" time="12.4" />
    <testcase name="invalid credentials show error" time="9.8" />
    <testcase name="password reset works" time="9.0" />
  </testsuite>
  <!-- More test suites -->
</testsuites>
JUnit reports integrate with Jenkins, Azure DevOps, TeamCity, and other CI platforms for test result visualization.

Familiar Test Syntax

TestDriver works with the test frameworks you already know:
  • Vitest
  • Jest
  • Mocha
import { test, describe, beforeAll, afterAll } from 'vitest';
import { chrome } from 'testdriverai/presets';

describe('My Feature', () => {
  test('should work', async (context) => {
    const { testdriver } = await chrome(context, { url });
    await testdriver.find('button').click();
  });
});

Existing Systems Integration

Drop TestDriver into your current workflow without disruption:
import { test, expect } from 'vitest';
import { chrome } from 'testdriverai/presets';

test('integrates with existing assertions', async (context) => {
  const { testdriver } = await chrome(context, { url });

  // Use TestDriver's AI assertions
  await testdriver.assert('welcome message is visible');

  // Or use traditional assertions
  const button = await testdriver.find('submit button');
  expect(button.coordinates).toBeDefined();
  expect(button.text).toContain('Submit');

  // Mix and match as needed
  const element = await testdriver.exec('js', 'document.title');
  expect(element).toBe('My App');
});

Scale to Thousands of Tests

TestDriver handles large test suites efficiently:

Enterprise Test Suite Example

Project: E-commerce Platform
Total tests: 3,847
Test files: 412
Parallel runners: 20
Total duration: 18 minutes

Breakdown:
- Unit tests: 2,134 (3 min)
- Integration: 891 (7 min)
- E2E (TestDriver): 822 (18 min)

Cost per run: $4.32
Runs per day: 50
Monthly cost: $6,480
With caching enabled:
E2E duration: 8 minutes (2.25x faster)
Cost per run: $1.89 (56% reduction)
Monthly cost: $2,835 (saves $3,645/month)

Test Sharding

Distribute tests across multiple machines:
  • GitHub Actions Matrix
  • GitLab CI Parallel
  • Manual Sharding
.github/workflows/test.yml
strategy:
  matrix:
    shard: [1, 2, 3, 4, 5]
steps:
  - run: npx vitest run --shard=${{ matrix.shard }}/5
Runs 5 parallel jobs, each handling 1/5 of tests.

Team Collaboration

Built for teams with multiple developers:
Tests automatically benefit from each other’s cache entries:
// Developer A runs test
await testdriver.find('submit button').click();
// Creates cache entry

// Developer B runs test later
await testdriver.find('submit button').click();
// Uses Developer A's cache ⚡
Per-team cache sharing accelerates everyone’s tests.
Share test replays with your team:
test('shareable replay', async (context) => {
  const { testdriver, dashcam } = await chrome(context, { url });

  await testdriver.find('button').click();

  // Share replay URL with team
  console.log('Replay:', dashcam.url);
  // https://console.testdriver.ai/dashcam/abc123
});
View replays at app.testdriver.ai
Long-running sandboxes for team debugging:
# Spawn a sandbox for the team
testdriver sandbox spawn --timeout 7200000

# Team members can connect
export TESTDRIVER_SANDBOX_ID=i-0abc123def
npx vitest run
Learn about sandbox management

Cost Optimization

TestDriver scales cost-effectively:

Pricing Model

  • API calls: Pay per AI vision analysis
  • Sandbox time: Pay per minute of VM usage
  • Caching: Reduces both costs dramatically
  • Shared cache: Team benefits from collective cache
Example costs:
  • Single test run: 0.040.04 - 0.12
  • 100-test suite: 44 - 12 (first run)
  • Cached suite: 0.500.50 - 2 (90%+ savings)

Enterprise Scale

TestDriver supports the largest testing operations:
  • Unlimited tests in enterprise plans
  • Unlimited sandbox hours for large suites
  • Unlimited team members for collaboration
  • Priority infrastructure for faster execution
  • Dedicated support for optimization help
  • Custom SLA for guaranteed uptime
Contact sales for enterprise pricing.

Learn More