testdriverai 7.9.0-test.4 → 7.9.0-test.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent/lib/sandbox.js +36 -5
- package/agent/lib/sdk.js +4 -4
- package/ai/skills/testdriver-enterprise/SKILL.md +2 -109
- package/ai/skills/testdriver-hosted/SKILL.md +156 -0
- package/ai/skills/testdriver-mcp/SKILL.md +2 -2
- package/ai/skills/testdriver-quickstart/SKILL.md +30 -2
- package/ai/skills/testdriver-self-hosted/SKILL.md +125 -43
- package/ai/skills/testdriver-test-results-json/SKILL.md +257 -0
- package/docs/_scripts/generate-examples.js +127 -60
- package/docs/docs.json +27 -28
- package/docs/v7/examples/ai.mdx +4 -3
- package/docs/v7/examples/assert.mdx +19 -4
- package/docs/v7/examples/chrome-extension.mdx +36 -29
- package/docs/v7/examples/element-not-found.mdx +2 -1
- package/docs/v7/examples/exec-output.mdx +3 -4
- package/docs/v7/examples/exec-pwsh.mdx +3 -4
- package/docs/v7/examples/findall-coffee-icons.mdx +88 -0
- package/docs/v7/examples/focus-window.mdx +3 -4
- package/docs/v7/examples/hover-image.mdx +4 -3
- package/docs/v7/examples/hover-text-with-description.mdx +104 -0
- package/docs/v7/examples/hover-text.mdx +4 -3
- package/docs/v7/examples/installer.mdx +5 -4
- package/docs/v7/examples/launch-vscode-linux.mdx +3 -7
- package/docs/v7/examples/match-image.mdx +3 -2
- package/docs/v7/examples/parse.mdx +66 -0
- package/docs/v7/examples/press-keys.mdx +8 -14
- package/docs/v7/examples/scroll-keyboard.mdx +4 -3
- package/docs/v7/examples/scroll-until-image.mdx +3 -2
- package/docs/v7/examples/scroll.mdx +6 -14
- package/docs/v7/examples/type.mdx +1 -5
- package/docs/v7/examples/windows-installer.mdx +10 -4
- package/interfaces/vitest-plugin.mjs +2 -2
- package/package.json +1 -1
- package/setup/aws/install-dev-runner.sh +7 -2
- package/setup/aws/spawn-runner.sh +12 -0
package/agent/lib/sandbox.js
CHANGED
|
@@ -12,6 +12,7 @@ const createSandbox = function (emitter, analytics, sessionInstance) {
|
|
|
12
12
|
this._ably = null;
|
|
13
13
|
this._sessionChannel = null;
|
|
14
14
|
this._channelName = null;
|
|
15
|
+
this._membersChannelName = null;
|
|
15
16
|
this.ps = {};
|
|
16
17
|
this._execBuffers = {}; // accumulate streamed exec.output chunks per requestId
|
|
17
18
|
this.heartbeat = null;
|
|
@@ -53,7 +54,7 @@ const createSandbox = function (emitter, analytics, sessionInstance) {
|
|
|
53
54
|
return this._publishCount;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
async _initAbly(ablyToken, channelName) {
|
|
57
|
+
async _initAbly(ablyToken, channelName, membersChannelName) {
|
|
57
58
|
if (this._ably) {
|
|
58
59
|
try {
|
|
59
60
|
this._ably.close();
|
|
@@ -62,6 +63,19 @@ const createSandbox = function (emitter, analytics, sessionInstance) {
|
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
this._channelName = channelName;
|
|
66
|
+
|
|
67
|
+
// Derive the members channel from the session channel if not supplied.
|
|
68
|
+
// Format: testdriver:{env}:{teamId}:{sandboxId} → testdriver:{env}:{teamId}:members
|
|
69
|
+
if (!membersChannelName) {
|
|
70
|
+
const parts = channelName.split(":");
|
|
71
|
+
if (parts.length >= 3) {
|
|
72
|
+
membersChannelName = parts.slice(0, 3).join(":") + ":members";
|
|
73
|
+
} else {
|
|
74
|
+
logger.warn("[ably] Channel name format unexpected (" + channelName + "), cannot derive members channel");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
this._membersChannelName = membersChannelName;
|
|
78
|
+
|
|
65
79
|
var self = this;
|
|
66
80
|
|
|
67
81
|
this._ably = new Ably.Realtime({
|
|
@@ -105,7 +119,24 @@ const createSandbox = function (emitter, analytics, sessionInstance) {
|
|
|
105
119
|
|
|
106
120
|
logger.debug(`[realtime] Channel initialized: ${channelName}`);
|
|
107
121
|
|
|
108
|
-
// Enter presence on the
|
|
122
|
+
// Enter presence on the team members channel so the API can count
|
|
123
|
+
// connected SDK clients with a single direct lookup per team.
|
|
124
|
+
if (membersChannelName) {
|
|
125
|
+
try {
|
|
126
|
+
var membersChannel = this._ably.channels.get(membersChannelName);
|
|
127
|
+
await membersChannel.presence.enter({
|
|
128
|
+
sandboxId: this._sandboxId,
|
|
129
|
+
connectedAt: Date.now(),
|
|
130
|
+
});
|
|
131
|
+
logger.debug(`[realtime] Entered presence on members channel (sandbox=${this._sandboxId})`);
|
|
132
|
+
} catch (e) {
|
|
133
|
+
// Non-fatal — presence is used for concurrency counting, not critical path
|
|
134
|
+
logger.warn("Failed to enter presence on members channel: " + (e.message || e));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Enter presence on the session channel so the API's session monitor can
|
|
139
|
+
// detect SDK connect/disconnect events for this sandbox.
|
|
109
140
|
try {
|
|
110
141
|
await this._sessionChannel.presence.enter({
|
|
111
142
|
sandboxId: this._sandboxId,
|
|
@@ -113,7 +144,7 @@ const createSandbox = function (emitter, analytics, sessionInstance) {
|
|
|
113
144
|
});
|
|
114
145
|
logger.debug(`[realtime] Entered presence on session channel (sandbox=${this._sandboxId})`);
|
|
115
146
|
} catch (e) {
|
|
116
|
-
// Non-fatal — presence is used for
|
|
147
|
+
// Non-fatal — presence is used for disconnect detection, not critical path
|
|
117
148
|
logger.warn("Failed to enter presence on session channel: " + (e.message || e));
|
|
118
149
|
}
|
|
119
150
|
|
|
@@ -522,7 +553,7 @@ const createSandbox = function (emitter, analytics, sessionInstance) {
|
|
|
522
553
|
this._teamId = reply.teamId;
|
|
523
554
|
|
|
524
555
|
if (reply.ably && reply.ably.token) {
|
|
525
|
-
await this._initAbly(reply.ably.token, reply.ably.channel);
|
|
556
|
+
await this._initAbly(reply.ably.token, reply.ably.channel, reply.ably.membersChannel);
|
|
526
557
|
this.instanceSocketConnected = true;
|
|
527
558
|
|
|
528
559
|
// Tell the runner to enable debug log forwarding if debug mode is on
|
|
@@ -648,7 +679,7 @@ const createSandbox = function (emitter, analytics, sessionInstance) {
|
|
|
648
679
|
if (reply.status === 'pending' && reply.ably && reply.ably.token) {
|
|
649
680
|
this._sandboxId = reply.sandboxId;
|
|
650
681
|
this._teamId = reply.teamId;
|
|
651
|
-
await this._initAbly(reply.ably.token, reply.ably.channel);
|
|
682
|
+
await this._initAbly(reply.ably.token, reply.ably.channel, reply.ably.membersChannel);
|
|
652
683
|
this.instanceSocketConnected = true;
|
|
653
684
|
}
|
|
654
685
|
|
package/agent/lib/sdk.js
CHANGED
|
@@ -273,9 +273,9 @@ const createSDK = (emitter, config, sessionInstance) => {
|
|
|
273
273
|
if (status >= 500) {
|
|
274
274
|
const serverError = new Error(
|
|
275
275
|
data?.message ||
|
|
276
|
-
`
|
|
276
|
+
`An error occurred on the TestDriver server (HTTP ${status}). Please try again later.`
|
|
277
277
|
);
|
|
278
|
-
serverError.code = data?.error || "
|
|
278
|
+
serverError.code = data?.error || "SERVER_ERROR";
|
|
279
279
|
serverError.isServerError = true;
|
|
280
280
|
serverError.originalError = error;
|
|
281
281
|
return serverError;
|
|
@@ -567,9 +567,9 @@ const createSDK = (emitter, config, sessionInstance) => {
|
|
|
567
567
|
if (status >= 500) {
|
|
568
568
|
const serverError = new Error(
|
|
569
569
|
error.response?.data?.message ||
|
|
570
|
-
`
|
|
570
|
+
`An error occurred on the TestDriver server (HTTP ${status}). Please try again later.`
|
|
571
571
|
);
|
|
572
|
-
serverError.code = error.response?.data?.error || "
|
|
572
|
+
serverError.code = error.response?.data?.error || "SERVER_ERROR";
|
|
573
573
|
serverError.isServerError = true;
|
|
574
574
|
serverError.originalError = error;
|
|
575
575
|
serverError.path = path;
|
|
@@ -1,114 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: testdriver:enterprise
|
|
3
|
-
description:
|
|
3
|
+
description: Self-hosted enterprise deployments with assisted setup and dedicated support
|
|
4
4
|
---
|
|
5
5
|
<!-- Generated from enterprise.mdx. DO NOT EDIT. -->
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
<CardGroup cols={2}>
|
|
10
|
-
<Card title="Air-Gapped Security" icon="shield-check">
|
|
11
|
-
Deploy everything in your environment. No data leaves your network. Complete isolation from external services.
|
|
12
|
-
</Card>
|
|
13
|
-
<Card title="Full Customization" icon="gear">
|
|
14
|
-
Custom integrations, dedicated infrastructure, and tailored solutions for your unique requirements.
|
|
15
|
-
</Card>
|
|
16
|
-
<Card title="Self-Hosted Dashboard & API" icon="server">
|
|
17
|
-
Run the entire TestDriver stack — dashboard, API, and test infrastructure — within your own environment.
|
|
18
|
-
</Card>
|
|
19
|
-
<Card title="Dedicated Support" icon="headset">
|
|
20
|
-
Direct access to our engineering team for implementation, customization, and ongoing support.
|
|
21
|
-
</Card>
|
|
22
|
-
</CardGroup>
|
|
23
|
-
|
|
24
|
-
## Who Needs Enterprise?
|
|
25
|
-
|
|
26
|
-
Enterprise is designed for organizations that:
|
|
27
|
-
|
|
28
|
-
- **Require air-gapped deployments** — Regulated industries, government, defense, or strict compliance requirements
|
|
29
|
-
- **Cannot use external APIs** — Data must never leave your network perimeter
|
|
30
|
-
- **Need custom integrations** — Unique CI/CD systems, internal tools, or specialized workflows
|
|
31
|
-
- **Want dedicated support** — Direct engineering support for complex implementations
|
|
32
|
-
|
|
33
|
-
## What's Included
|
|
34
|
-
|
|
35
|
-
### Fully Self-Hosted Stack
|
|
36
|
-
|
|
37
|
-
Unlike [Self-Hosted](/v7/self-hosted) (which uses TestDriver's hosted dashboard and API), Enterprise deploys everything in your environment:
|
|
38
|
-
|
|
39
|
-
| Component | Self-Hosted | Enterprise |
|
|
40
|
-
|-----------|-------------|------------|
|
|
41
|
-
| Test Sandboxes | Your infrastructure | Your infrastructure |
|
|
42
|
-
| Dashboard | TestDriver hosted | Your infrastructure |
|
|
43
|
-
| API | TestDriver hosted | Your infrastructure |
|
|
44
|
-
| AI Processing | Your API keys | Your infrastructure |
|
|
45
|
-
| Data Storage | Your AWS account | Your infrastructure |
|
|
46
|
-
|
|
47
|
-
### Custom Contract Terms
|
|
48
|
-
|
|
49
|
-
- Volume-based pricing
|
|
50
|
-
- Custom SLAs
|
|
51
|
-
- Dedicated support channels
|
|
52
|
-
- Professional services for implementation
|
|
53
|
-
- Training for your team
|
|
54
|
-
|
|
55
|
-
## Implementation Process
|
|
56
|
-
|
|
57
|
-
<Steps>
|
|
58
|
-
<Step title="Discovery Call">
|
|
59
|
-
Discuss your requirements, security constraints, and integration needs with our team.
|
|
60
|
-
</Step>
|
|
61
|
-
|
|
62
|
-
<Step title="Architecture Review">
|
|
63
|
-
Our engineers design a deployment architecture that meets your security and compliance requirements.
|
|
64
|
-
</Step>
|
|
65
|
-
|
|
66
|
-
<Step title="Deployment">
|
|
67
|
-
We work with your team to deploy TestDriver within your environment, including dashboard, API, and test infrastructure.
|
|
68
|
-
</Step>
|
|
69
|
-
|
|
70
|
-
<Step title="Integration">
|
|
71
|
-
Connect TestDriver to your CI/CD pipelines, internal tools, and workflows.
|
|
72
|
-
</Step>
|
|
73
|
-
|
|
74
|
-
<Step title="Training & Handoff">
|
|
75
|
-
Comprehensive training for your team on operating and maintaining the deployment.
|
|
76
|
-
</Step>
|
|
77
|
-
</Steps>
|
|
78
|
-
|
|
79
|
-
## Security & Compliance
|
|
80
|
-
|
|
81
|
-
Enterprise deployments support:
|
|
82
|
-
|
|
83
|
-
- **SOC 2** compliance requirements
|
|
84
|
-
- **HIPAA** for healthcare applications
|
|
85
|
-
- **FedRAMP** for government deployments
|
|
86
|
-
- **PCI DSS** for payment processing
|
|
87
|
-
- **Custom compliance frameworks** as needed
|
|
88
|
-
|
|
89
|
-
<Note>
|
|
90
|
-
All data remains within your network perimeter. TestDriver has no access to your test results, application data, or infrastructure.
|
|
91
|
-
</Note>
|
|
92
|
-
|
|
93
|
-
## Comparison: Self-Hosted vs Enterprise
|
|
94
|
-
|
|
95
|
-
| Feature | Self-Hosted | Enterprise |
|
|
96
|
-
|---------|-------------|------------|
|
|
97
|
-
| **Test Infrastructure** | Your AWS | Your infrastructure (any) |
|
|
98
|
-
| **Dashboard** | TestDriver cloud | Your infrastructure |
|
|
99
|
-
| **API** | TestDriver cloud | Your infrastructure |
|
|
100
|
-
| **Data Location** | Your AWS + TestDriver | 100% your infrastructure |
|
|
101
|
-
| **Network Requirements** | Internet access | Can be fully air-gapped |
|
|
102
|
-
| **Cloud Providers** | AWS only | Any (AWS, Azure, GCP, on-prem) |
|
|
103
|
-
| **Support** | Standard | Dedicated engineering |
|
|
104
|
-
| **Contract** | Standard licensing | Custom terms |
|
|
105
|
-
|
|
106
|
-
## Get Started
|
|
107
|
-
|
|
108
|
-
<Card
|
|
109
|
-
title="Schedule a Consultation"
|
|
110
|
-
icon="calendar"
|
|
111
|
-
href="https://calendly.com/d/cq23-qyn-3v6/testdriver-ai-demo"
|
|
112
|
-
>
|
|
113
|
-
Discuss your requirements with our team and get a custom proposal for your Enterprise deployment.
|
|
114
|
-
</Card>
|
|
7
|
+
This page has moved to [Self-Hosted](/v7/self-hosted).
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testdriver:hosted
|
|
3
|
+
description: The fastest way to get started with TestDriver. Just set your API key and start testing.
|
|
4
|
+
---
|
|
5
|
+
<!-- Generated from hosted.mdx. DO NOT EDIT. -->
|
|
6
|
+
|
|
7
|
+
Hosted pricing is based on **device-seconds**: the amount of time your tests run on **our infrastructure**.
|
|
8
|
+
|
|
9
|
+
- **Zero Setup** — Start testing immediately. No DevOps required.
|
|
10
|
+
- **Free Tier** — Get started with a limited preview at no cost.
|
|
11
|
+
- **Pay As You Go** — Only pay for the device-seconds you use.
|
|
12
|
+
|
|
13
|
+
## Hosted Plans
|
|
14
|
+
|
|
15
|
+
<CardGroup cols={3}>
|
|
16
|
+
<Card title="Free Trial" icon="gift" href="https://docs.testdriver.ai">
|
|
17
|
+
**$0/month**
|
|
18
|
+
|
|
19
|
+
- 1 Concurrent Sandbox
|
|
20
|
+
- 60 Minutes Included
|
|
21
|
+
- 1 Team User
|
|
22
|
+
- Community Support
|
|
23
|
+
</Card>
|
|
24
|
+
|
|
25
|
+
<Card title="Pro" icon="rocket" href="https://console.testdriver.ai/checkout/pro">
|
|
26
|
+
**$20/month**
|
|
27
|
+
|
|
28
|
+
- 2 Concurrent Sandboxes
|
|
29
|
+
- 600 Minutes Included
|
|
30
|
+
- Overage: $0.002/second
|
|
31
|
+
- 1 Team User
|
|
32
|
+
- Test Recordings
|
|
33
|
+
- Community Support
|
|
34
|
+
</Card>
|
|
35
|
+
|
|
36
|
+
<Card title="Team" icon="users" href="https://console.testdriver.ai/checkout/team">
|
|
37
|
+
**$600/month**
|
|
38
|
+
|
|
39
|
+
- 8 Concurrent Sandboxes
|
|
40
|
+
- 10,000 Minutes Included
|
|
41
|
+
- Overage: $0.001/second
|
|
42
|
+
- 5 Team Users
|
|
43
|
+
- Test Recordings
|
|
44
|
+
- Private Support
|
|
45
|
+
- Test Analytics
|
|
46
|
+
- CPU, RAM, & Network Profiles
|
|
47
|
+
</Card>
|
|
48
|
+
</CardGroup>
|
|
49
|
+
|
|
50
|
+
## Get Started
|
|
51
|
+
Hosted is the default when you follow the Quickstart guide.
|
|
52
|
+
<Card
|
|
53
|
+
title="Try the Quickstart"
|
|
54
|
+
icon="play"
|
|
55
|
+
href="/v7/quickstart"
|
|
56
|
+
>
|
|
57
|
+
Set your API key and start testing in minutes.
|
|
58
|
+
</Card>
|
|
59
|
+
|
|
60
|
+
## Parallel Testing Limits
|
|
61
|
+
|
|
62
|
+
Your account has a set number of **license slots** that determine how many devices can run simultaneously. You can view your available slots in the [TestDriver Dashboard](https://console.testdriver.ai).
|
|
63
|
+
|
|
64
|
+
<Info>
|
|
65
|
+
**When is a slot in use?** A license slot is occupied when a test client is connected. As soon as your device is destroyed the slot becomes available immediately.
|
|
66
|
+
</Info>
|
|
67
|
+
|
|
68
|
+
## Avoiding Slot Conflicts
|
|
69
|
+
|
|
70
|
+
To prevent tests from failing due to exceeding your license slot limit, we recommend two key configurations:
|
|
71
|
+
|
|
72
|
+
<AccordionGroup>
|
|
73
|
+
<Accordion title="Set Maximum Concurrency in Vitest">
|
|
74
|
+
Limit concurrent tests to match your available license slots:
|
|
75
|
+
|
|
76
|
+
```javascript vitest.config.mjs
|
|
77
|
+
import { defineConfig } from 'vitest/config';
|
|
78
|
+
import { TestDriver } from 'testdriverai/vitest';
|
|
79
|
+
|
|
80
|
+
export default defineConfig({
|
|
81
|
+
test: {
|
|
82
|
+
testTimeout: 900000,
|
|
83
|
+
hookTimeout: 900000,
|
|
84
|
+
maxConcurrency: 5, // Set to your license slot limit
|
|
85
|
+
reporters: ['default', TestDriver()],
|
|
86
|
+
setupFiles: ['testdriverai/vitest/setup'],
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
<Tip>
|
|
92
|
+
Check your slot count at [console.testdriver.ai](https://console.testdriver.ai) and set `maxConcurrency` to that number or lower.
|
|
93
|
+
</Tip>
|
|
94
|
+
</Accordion>
|
|
95
|
+
|
|
96
|
+
<Accordion title="Use GitHub Concurrency Keys">
|
|
97
|
+
Prevent multiple workflow runs from competing for the same slots by using [GitHub's concurrency controls](https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/control-the-concurrency-of-workflows-and-jobs):
|
|
98
|
+
|
|
99
|
+
```yaml .github/workflows/test.yml
|
|
100
|
+
name: Tests
|
|
101
|
+
|
|
102
|
+
on:
|
|
103
|
+
push:
|
|
104
|
+
branches: [main]
|
|
105
|
+
pull_request:
|
|
106
|
+
|
|
107
|
+
# Prevent concurrent runs from competing for license slots
|
|
108
|
+
concurrency:
|
|
109
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
110
|
+
cancel-in-progress: true
|
|
111
|
+
|
|
112
|
+
jobs:
|
|
113
|
+
test:
|
|
114
|
+
runs-on: ubuntu-latest
|
|
115
|
+
steps:
|
|
116
|
+
- uses: actions/checkout@v4
|
|
117
|
+
|
|
118
|
+
- name: Setup Node.js
|
|
119
|
+
uses: actions/setup-node@v4
|
|
120
|
+
with:
|
|
121
|
+
node-version: '20'
|
|
122
|
+
|
|
123
|
+
- name: Install dependencies
|
|
124
|
+
run: npm install
|
|
125
|
+
|
|
126
|
+
- name: Run tests
|
|
127
|
+
run: vitest run
|
|
128
|
+
env:
|
|
129
|
+
TD_API_KEY: ${{ secrets.TD_API_KEY }}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The `concurrency` block ensures:
|
|
133
|
+
- Only one workflow run per branch runs at a time
|
|
134
|
+
- New pushes cancel in-progress runs on the same branch
|
|
135
|
+
- Different branches/PRs can run in parallel (up to your slot limit)
|
|
136
|
+
</Accordion>
|
|
137
|
+
</AccordionGroup>
|
|
138
|
+
|
|
139
|
+
## When to Consider Self-Hosted
|
|
140
|
+
|
|
141
|
+
Hosted is perfect for getting started and for teams that want zero infrastructure management. However, you might consider [Self-Hosted](/v7/self-hosted) if you:
|
|
142
|
+
|
|
143
|
+
- Want to escape per-second billing with a flat license fee
|
|
144
|
+
- Require greater concurrency than offered in Cloud plans
|
|
145
|
+
- Need full control over your infrastructure and privacy
|
|
146
|
+
- Want to use your own AI API keys
|
|
147
|
+
- Require custom hardware configurations
|
|
148
|
+
- Have high test volumes that make self-hosting more economical
|
|
149
|
+
|
|
150
|
+
<Card
|
|
151
|
+
title="Explore Self-Hosted"
|
|
152
|
+
icon="server"
|
|
153
|
+
href="/v7/self-hosted"
|
|
154
|
+
>
|
|
155
|
+
Learn about self-hosting for unlimited test execution at a flat rate.
|
|
156
|
+
</Card>
|
|
@@ -9,7 +9,7 @@ TestDriver makes it easy to write automated computer-use tests for web browsers,
|
|
|
9
9
|
<Tip><a href="https://discord.com/invite/cWDFW8DzPm" target="_blank" rel="noreferrer">Join our Discord</a> if you have any questions or need help getting started!</Tip>
|
|
10
10
|
|
|
11
11
|
<Tabs>
|
|
12
|
-
<Tab title="
|
|
12
|
+
<Tab title="CLI" icon="terminal">
|
|
13
13
|
|
|
14
14
|
Get started quickly with the TestDriver CLI.
|
|
15
15
|
|
|
@@ -39,7 +39,35 @@ TestDriver makes it easy to write automated computer-use tests for web browsers,
|
|
|
39
39
|
</Step>
|
|
40
40
|
</Steps>
|
|
41
41
|
</Tab>
|
|
42
|
-
<Tab title="
|
|
42
|
+
<Tab title="GitHub Copilot" icon="github">
|
|
43
|
+
|
|
44
|
+
Use the TestDriver VS Code extension with GitHub Copilot for an AI-powered testing workflow.
|
|
45
|
+
|
|
46
|
+
<Card
|
|
47
|
+
title="Install TestDriver for VS Code"
|
|
48
|
+
icon="/images/content/extension/vscode.svg"
|
|
49
|
+
href="vscode:extension/testdriver.testdriver"
|
|
50
|
+
arrow
|
|
51
|
+
horizontal
|
|
52
|
+
>
|
|
53
|
+
</Card>
|
|
54
|
+
|
|
55
|
+
The extension provides one-click sign-in, project initialization, a live preview panel for watching tests execute, and MCP server configuration for GitHub Copilot.
|
|
56
|
+
|
|
57
|
+
Once installed, follow the full setup guide to configure MCP and start building tests with AI assistance:
|
|
58
|
+
|
|
59
|
+
<Card
|
|
60
|
+
title="VS Code + Copilot Setup Guide"
|
|
61
|
+
icon="arrow-right"
|
|
62
|
+
href="/v7/copilot/setup"
|
|
63
|
+
arrow
|
|
64
|
+
horizontal
|
|
65
|
+
>
|
|
66
|
+
Sign in, initialize your project, and configure MCP for GitHub Copilot.
|
|
67
|
+
</Card>
|
|
68
|
+
|
|
69
|
+
</Tab>
|
|
70
|
+
<Tab title="Manual" icon="wrench">
|
|
43
71
|
|
|
44
72
|
Install TestDriver and manually create the files yourself.
|
|
45
73
|
|
|
@@ -1,23 +1,48 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: testdriver:self-hosted
|
|
3
|
-
description:
|
|
3
|
+
description: Our enterprise solution with unlimited test execution, assisted setup, and dedicated support.
|
|
4
4
|
---
|
|
5
5
|
<!-- Generated from self-hosted.mdx. DO NOT EDIT. -->
|
|
6
6
|
|
|
7
|
-
Self-hosted
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
Self-hosted is our enterprise solution for teams that need unlimited test execution, infrastructure control, and dedicated support. Pricing is based on **parallel test capacity** with a flat license fee — no per-second billing.
|
|
8
|
+
|
|
9
|
+
<CardGroup cols={2}>
|
|
10
|
+
<Card title="Unlimited Execution" icon="infinity">
|
|
11
|
+
Run as many tests as you want with no device-second metering. Predictable monthly costs.
|
|
12
|
+
</Card>
|
|
13
|
+
<Card title="Assisted Setup & Support" icon="headset">
|
|
14
|
+
Our team helps you deploy, configure, and optimize your infrastructure. Dedicated engineering support included.
|
|
15
|
+
</Card>
|
|
16
|
+
<Card title="Full Control" icon="gear">
|
|
17
|
+
Use your own AI keys, custom hardware, specific software, and network configurations. RDP into test machines for debugging.
|
|
18
|
+
</Card>
|
|
19
|
+
<Card title="Security & Compliance" icon="shield-check">
|
|
20
|
+
Keep data in your environment. Air-gapped deployment available for regulated industries.
|
|
21
|
+
</Card>
|
|
22
|
+
</CardGroup>
|
|
23
|
+
|
|
24
|
+
## Deployment Options
|
|
25
|
+
|
|
26
|
+
Choose the level of control you need:
|
|
27
|
+
|
|
28
|
+
| Component | Standard | Air-Gapped |
|
|
29
|
+
|-----------|----------|------------|
|
|
30
|
+
| **Test Sandboxes** | Your AWS | Your infrastructure (any cloud or on-prem) |
|
|
31
|
+
| **Dashboard** | TestDriver hosted | Your infrastructure |
|
|
32
|
+
| **API** | TestDriver hosted | Your infrastructure |
|
|
33
|
+
| **AI Processing** | Your API keys | Your infrastructure |
|
|
34
|
+
| **Data Storage** | Your AWS account | 100% your infrastructure |
|
|
35
|
+
| **Network** | Internet access required | Fully air-gapped |
|
|
36
|
+
| **Cloud Providers** | AWS | AWS, Azure, GCP, on-prem |
|
|
37
|
+
|
|
38
|
+
### Standard Deployment
|
|
39
|
+
|
|
40
|
+
Run test sandboxes on your AWS infrastructure while using TestDriver's hosted dashboard and API:
|
|
41
|
+
|
|
42
|
+
- **Quick setup** via CloudFormation — deploy in hours
|
|
43
|
+
- **Dashboard access** at [console.testdriver.ai](https://console.testdriver.ai)
|
|
44
|
+
- **Your AI keys** — control costs with your own OpenAI, Anthropic, or other provider
|
|
45
|
+
- **Custom AMIs** — install specific software, configure networking
|
|
21
46
|
|
|
22
47
|
<Card
|
|
23
48
|
title="AWS Setup Guide"
|
|
@@ -27,39 +52,96 @@ Ready to self-host? Follow our comprehensive AWS setup guide:
|
|
|
27
52
|
Step-by-step instructions for deploying TestDriver on your AWS infrastructure using CloudFormation.
|
|
28
53
|
</Card>
|
|
29
54
|
|
|
55
|
+
### Air-Gapped Deployment
|
|
56
|
+
|
|
57
|
+
Deploy the entire TestDriver stack in your environment for complete isolation:
|
|
58
|
+
|
|
59
|
+
- **Full stack** — dashboard, API, and test infrastructure all in your environment
|
|
60
|
+
- **No external dependencies** — data never leaves your network perimeter
|
|
61
|
+
- **Any infrastructure** — AWS, Azure, GCP, or on-premises
|
|
62
|
+
- **Regulated industries** — government, defense, healthcare, finance
|
|
63
|
+
|
|
64
|
+
## Custom VM Images
|
|
65
|
+
|
|
66
|
+
Build test environments with your applications, dependencies, and user data pre-installed. You get full access to:
|
|
67
|
+
|
|
68
|
+
- **Golden VM** — our pre-configured base image with TestDriver agent, drivers, and optimizations
|
|
69
|
+
- **Packer scripts** — build custom AMIs with your applications, user data, and configurations
|
|
70
|
+
- **Faster test startup** — skip installation steps by baking dependencies into your image
|
|
71
|
+
- **Consistent environments** — every test runs on an identical, reproducible machine
|
|
72
|
+
|
|
73
|
+
<AccordionGroup>
|
|
74
|
+
<Accordion title="What can you customize?">
|
|
75
|
+
- Install applications (browsers, desktop apps, dev tools)
|
|
76
|
+
- Configure user accounts and credentials
|
|
77
|
+
- Set up network proxies and certificates
|
|
78
|
+
- Install fonts, language packs, and locales
|
|
79
|
+
- Pre-seed databases or test fixtures
|
|
80
|
+
- Configure Windows/Linux settings
|
|
81
|
+
</Accordion>
|
|
82
|
+
|
|
83
|
+
<Accordion title="How it works">
|
|
84
|
+
1. We provide our golden VM base image and Packer scripts
|
|
85
|
+
2. You customize the scripts to install your software and configuration
|
|
86
|
+
3. Run Packer to build your custom AMI
|
|
87
|
+
4. Configure TestDriver to use your custom AMI for test sandboxes
|
|
88
|
+
5. Tests spin up with everything pre-installed — no setup time wasted
|
|
89
|
+
</Accordion>
|
|
90
|
+
</AccordionGroup>
|
|
91
|
+
|
|
92
|
+
## Implementation Process
|
|
93
|
+
|
|
94
|
+
<Steps>
|
|
95
|
+
<Step title="Discovery Call">
|
|
96
|
+
Discuss your requirements, security constraints, and integration needs with our team.
|
|
97
|
+
</Step>
|
|
98
|
+
|
|
99
|
+
<Step title="Architecture Review">
|
|
100
|
+
Our engineers design a deployment architecture that meets your security and compliance requirements.
|
|
101
|
+
</Step>
|
|
102
|
+
|
|
103
|
+
<Step title="Deployment">
|
|
104
|
+
We work with your team to deploy TestDriver, including assisted setup and configuration.
|
|
105
|
+
</Step>
|
|
106
|
+
|
|
107
|
+
<Step title="Integration">
|
|
108
|
+
Connect TestDriver to your CI/CD pipelines, internal tools, and workflows.
|
|
109
|
+
</Step>
|
|
110
|
+
|
|
111
|
+
<Step title="Training & Handoff">
|
|
112
|
+
Comprehensive training for your team on operating and maintaining the deployment.
|
|
113
|
+
</Step>
|
|
114
|
+
</Steps>
|
|
115
|
+
|
|
116
|
+
## What's Included
|
|
30
117
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- **
|
|
36
|
-
- **
|
|
37
|
-
- **Prefer predictable costs** — Budget with confidence using flat monthly fees
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## How It Works
|
|
41
|
-
|
|
42
|
-
With self-hosting, you run test sandboxes on your own AWS infrastructure. TestDriver still provides:
|
|
43
|
-
|
|
44
|
-
- **Dashboard** — View test results, analytics, and reports at [console.testdriver.ai](https://console.testdriver.ai)
|
|
45
|
-
- **API** — Orchestration and AI-powered test execution
|
|
46
|
-
- **License Management** — Your parallel test capacity
|
|
47
|
-
|
|
48
|
-
You provide:
|
|
49
|
-
|
|
50
|
-
- **AWS Infrastructure** — EC2 instances running in your account
|
|
51
|
-
- **AI API Keys** — Use your own OpenAI, Anthropic, or other AI provider keys
|
|
52
|
-
- **Custom Configuration** — Hardware specs, networking, installed software
|
|
118
|
+
- **Flat license fee** per parallel test slot
|
|
119
|
+
- **Unlimited test execution** — no device-second charges
|
|
120
|
+
- **Assisted setup** — our team helps you deploy and configure
|
|
121
|
+
- **Dedicated support** — direct access to our engineering team
|
|
122
|
+
- **Custom contract terms** — volume-based pricing, custom SLAs
|
|
123
|
+
- **Professional services** — implementation assistance and training
|
|
53
124
|
|
|
54
|
-
## Comparison vs
|
|
125
|
+
## Comparison: Hosted vs Self-Hosted
|
|
55
126
|
|
|
56
|
-
| Feature |
|
|
57
|
-
|
|
58
|
-
| **Setup Time** | Minutes | Hours |
|
|
127
|
+
| Feature | Hosted | Self-Hosted |
|
|
128
|
+
|---------|--------|-------------|
|
|
129
|
+
| **Setup Time** | Minutes | Hours (assisted) |
|
|
59
130
|
| **Pricing Model** | Device-seconds | Flat license fee |
|
|
60
|
-
| **Infrastructure
|
|
61
|
-
| **Device Location** | TestDriver cloud | Your AWS account |
|
|
131
|
+
| **Infrastructure** | TestDriver | Your AWS or any cloud |
|
|
62
132
|
| **AI API Keys** | TestDriver's | Your own |
|
|
63
133
|
| **Custom Software** | Limited | Full control |
|
|
64
134
|
| **Hardware Selection** | Standard | Your choice |
|
|
65
135
|
| **Debugging Access** | Replays only | Full RDP access |
|
|
136
|
+
| **Support** | Community/Standard | Dedicated engineering |
|
|
137
|
+
| **Air-Gapped Option** | No | Yes |
|
|
138
|
+
|
|
139
|
+
## Get Started
|
|
140
|
+
|
|
141
|
+
<Card
|
|
142
|
+
title="Schedule a Consultation"
|
|
143
|
+
icon="calendar"
|
|
144
|
+
href="https://testdriver.ai/demo"
|
|
145
|
+
>
|
|
146
|
+
Discuss your requirements with our team and get a custom proposal for your self-hosted deployment.
|
|
147
|
+
</Card>
|