Start with an exploration of your app. Tests begin here: you describe a flow in plain English. Then the TestDriver vision agent clicks, types, and reads the screen to understand it. Then it writes the test for you. There are no selectors, no DOM, and no weak locators. Only describe what you want to test. Let the agent find the other parts.
There are two methods for an exploration. You can chat with your AI assistant through the TestDriver MCP server. Or you can give a coding agent our instructions file and tell it to generate a test.
Instructions for Coding Agents
Start with our quickstart. Then give your coding agent our agent instructions file.
Then, you can prompt your coding agent to generate tests. Here is an example prompt:
mdMake me a TestDriver test that does the following steps: Navigate to practicetestautomation.com Type username student into Username field Type password Password123 into Password field Push Submit button Verify new page contains expected text 'logged in'
Use explicit commands for production tests. They are at a lower cost, faster, and more reliable.
Start a Conversation
Use the TestDriver MCP server and your AI assistant (GitHub Copilot, Cursor, or Claude Desktop) to make tests. You chat with an AI agent. The agent starts a virtual machine, does actions, and writes the test code for you.
Open the chat of your AI assistant. If your project has no other agents, TestDriver uses the TestDriver agent by default. If not, select testdriver from the agent dropdown in the chat panel.
Describe what you want to test:
Create a test that logs into my app at https://myapp.com
The agent will:
- Start a new session and spawn a Linux virtual machine
- Launch Chrome and navigate to your URL
- Execute actions based on your instructions
- Write the test code to a
.test.mjsfile
Live Preview Panel
When the agent starts a session, a live preview panel opens in your editor. This lets you:
- Watch tests execute in real-time
- Interact with the VM — click, type, and navigate manually
- Debug issues — see exactly what the AI sees
Interactive Workflow
The recommended workflow for exploring and creating tests:
``` Test the checkout flow on https://shop.example.com ```
``` The login modal appeared. Use test@example.com and password123 ```
``` Assert that the order confirmation page is shown with the order number ```
Example Conversation
Here's a complete example of exploring and creating a login test:
You: Create a test for the login flow at https://console.testdriver.ai Agent: I'll create a test for the login flow. Starting a session... [Screenshot: Login page loaded] I can see the login page. Let me find the email input. [Screenshot: Email input highlighted] Now I'll type the email and find the password field... You: Use test@example.com for the email Agent: Got it. Typing test@example.com... [Screenshot: Email entered] Now entering the password and clicking Sign In... [Screenshot: Dashboard loaded] ✅ Login successful! I've written the test to tests/login.test.mjs
Generated Test Code
The agent generates standard Vitest test files:
javascriptimport { describe, expect, it } from "vitest"; import { TestDriver } from "testdriverai/vitest/hooks"; describe("Login Flow", () => { it("should log in successfully", async (context) => { const testdriver = TestDriver(context); await testdriver.provision.chrome({ url: "https://console.testdriver.ai" }); const emailInput = await testdriver.find("email input field"); await emailInput.click(); await testdriver.type("test@example.com"); const passwordInput = await testdriver.find("password input field"); await passwordInput.click(); await testdriver.type("password123"); const signInButton = await testdriver.find("Sign In button"); await signInButton.click(); const result = await testdriver.assert("dashboard is visible"); expect(result).toBeTruthy(); }); });


