testdriverai 7.0.0 → 7.1.0
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/AGENTS.md +550 -0
- package/CODEOWNERS +0 -1
- package/README.md +126 -0
- package/agent/index.js +43 -18
- package/agent/lib/commands.js +794 -135
- package/agent/lib/redraw.js +124 -39
- package/agent/lib/sandbox.js +10 -1
- package/agent/lib/sdk.js +21 -0
- package/docs/MIGRATION.md +425 -0
- package/docs/PRESETS.md +210 -0
- package/docs/docs.json +91 -37
- package/docs/guide/best-practices-polling.mdx +154 -0
- package/docs/v7/api/dashcam.mdx +497 -0
- package/docs/v7/api/doubleClick.mdx +102 -0
- package/docs/v7/api/mouseDown.mdx +161 -0
- package/docs/v7/api/mouseUp.mdx +164 -0
- package/docs/v7/api/rightClick.mdx +123 -0
- package/docs/v7/getting-started/configuration.mdx +380 -0
- package/docs/v7/getting-started/quickstart.mdx +273 -140
- package/docs/v7/guides/best-practices.mdx +486 -0
- package/docs/v7/guides/caching-ai.mdx +215 -0
- package/docs/v7/guides/caching-selectors.mdx +292 -0
- package/docs/v7/guides/caching.mdx +366 -0
- package/docs/v7/guides/ci-cd/azure.mdx +587 -0
- package/docs/v7/guides/ci-cd/circleci.mdx +523 -0
- package/docs/v7/guides/ci-cd/github-actions.mdx +457 -0
- package/docs/v7/guides/ci-cd/gitlab.mdx +498 -0
- package/docs/v7/guides/ci-cd/jenkins.mdx +664 -0
- package/docs/v7/guides/ci-cd/travis.mdx +438 -0
- package/docs/v7/guides/debugging.mdx +349 -0
- package/docs/v7/guides/faq.mdx +393 -0
- package/docs/v7/guides/performance.mdx +517 -0
- package/docs/v7/guides/troubleshooting.mdx +526 -0
- package/docs/v7/guides/vitest-plugin.mdx +477 -0
- package/docs/v7/guides/vitest.mdx +535 -0
- package/docs/v7/platforms/linux.mdx +308 -0
- package/docs/v7/platforms/macos.mdx +433 -0
- package/docs/v7/platforms/windows.mdx +430 -0
- package/docs/v7/presets/chrome-extension.mdx +223 -0
- package/docs/v7/presets/chrome.mdx +287 -0
- package/docs/v7/presets/electron.mdx +435 -0
- package/docs/v7/presets/vscode.mdx +398 -0
- package/docs/v7/presets/webapp.mdx +396 -0
- package/docs/v7/progressive-apis/CORE.md +459 -0
- package/docs/v7/progressive-apis/HOOKS.md +360 -0
- package/docs/v7/progressive-apis/PROGRESSIVE_DISCLOSURE.md +230 -0
- package/docs/v7/progressive-apis/PROVISION.md +266 -0
- package/interfaces/vitest-plugin.mjs +186 -100
- package/package.json +12 -1
- package/sdk.d.ts +335 -42
- package/sdk.js +756 -95
- package/src/core/Dashcam.js +469 -0
- package/src/core/index.d.ts +150 -0
- package/src/core/index.js +12 -0
- package/src/presets/index.mjs +331 -0
- package/src/vitest/extended.mjs +108 -0
- package/src/vitest/hooks.d.ts +119 -0
- package/src/vitest/hooks.mjs +298 -0
- package/src/vitest/index.mjs +64 -0
- package/src/vitest/lifecycle.mjs +277 -0
- package/src/vitest/utils.mjs +150 -0
- package/test/dashcam.test.js +137 -0
- package/testdriver/acceptance-sdk/assert.test.mjs +13 -31
- package/testdriver/acceptance-sdk/auto-cache-key-demo.test.mjs +56 -0
- package/testdriver/acceptance-sdk/chrome-extension.test.mjs +89 -0
- package/testdriver/acceptance-sdk/drag-and-drop.test.mjs +7 -19
- package/testdriver/acceptance-sdk/element-not-found.test.mjs +6 -19
- package/testdriver/acceptance-sdk/exec-js.test.mjs +6 -18
- package/testdriver/acceptance-sdk/exec-output.test.mjs +8 -20
- package/testdriver/acceptance-sdk/exec-pwsh.test.mjs +13 -25
- package/testdriver/acceptance-sdk/focus-window.test.mjs +8 -20
- package/testdriver/acceptance-sdk/formatted-logging.test.mjs +5 -20
- package/testdriver/acceptance-sdk/hooks-example.test.mjs +38 -0
- package/testdriver/acceptance-sdk/hover-image.test.mjs +10 -19
- package/testdriver/acceptance-sdk/hover-text-with-description.test.mjs +7 -19
- package/testdriver/acceptance-sdk/hover-text.test.mjs +5 -19
- package/testdriver/acceptance-sdk/match-image.test.mjs +7 -19
- package/testdriver/acceptance-sdk/presets-example.test.mjs +87 -0
- package/testdriver/acceptance-sdk/press-keys.test.mjs +5 -19
- package/testdriver/acceptance-sdk/prompt.test.mjs +6 -18
- package/testdriver/acceptance-sdk/scroll-keyboard.test.mjs +6 -20
- package/testdriver/acceptance-sdk/scroll-until-image.test.mjs +6 -18
- package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +9 -23
- package/testdriver/acceptance-sdk/scroll.test.mjs +12 -21
- package/testdriver/acceptance-sdk/setup/testHelpers.mjs +124 -352
- package/testdriver/acceptance-sdk/sully-ai.test.mjs +234 -0
- package/testdriver/acceptance-sdk/test-console-logs.test.mjs +42 -0
- package/testdriver/acceptance-sdk/type.test.mjs +19 -58
- package/vitest.config.mjs +1 -0
- package/.vscode/mcp.json +0 -9
- package/MIGRATION.md +0 -389
- package/PLUGIN_MIGRATION.md +0 -222
- package/PROMPT_CACHE.md +0 -200
- package/SDK_LOGGING.md +0 -222
- package/SDK_MIGRATION.md +0 -474
- package/SDK_README.md +0 -1122
- package/debug-screenshot-1763401388589.png +0 -0
- package/examples/run-tests-with-recording.sh +0 -70
- package/examples/screenshot-example.js +0 -63
- package/examples/sdk-awesome-logs-demo.js +0 -177
- package/examples/sdk-cache-thresholds.js +0 -96
- package/examples/sdk-element-properties.js +0 -155
- package/examples/sdk-simple-example.js +0 -65
- package/examples/test-recording-example.test.js +0 -166
- package/mcp-server/AI_GUIDELINES.md +0 -57
- package/test-find-api.js +0 -73
- package/test-prompt-cache.js +0 -96
- package/test-sandbox-render.js +0 -28
- package/test-sdk-methods.js +0 -15
- package/test-sdk-refactor.js +0 -53
- package/test-stack-trace.mjs +0 -57
- package/testdriver/acceptance-sdk/setup/lifecycleHelpers.mjs +0 -239
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Options"
|
|
3
|
+
description: "Configure TestDriver SDK for your testing environment"
|
|
4
|
+
icon: "gear"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
TestDriver can be configured through constructor options, environment variables, and Vitest configuration.
|
|
10
|
+
|
|
11
|
+
## Environment Variables
|
|
12
|
+
|
|
13
|
+
Set these in your `.env` file:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Required
|
|
17
|
+
TD_API_KEY=your_api_key_here
|
|
18
|
+
|
|
19
|
+
# Optional
|
|
20
|
+
TD_API_ROOT=https://testdriver-api.onrender.com
|
|
21
|
+
TD_DEFAULT_OS=linux
|
|
22
|
+
TD_DEFAULT_RESOLUTION=1920x1080
|
|
23
|
+
TD_NO_PROMPT_CACHE=false
|
|
24
|
+
TD_NO_SELECTOR_CACHE=false
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Client Configuration
|
|
28
|
+
|
|
29
|
+
### Basic Options
|
|
30
|
+
|
|
31
|
+
```javascript
|
|
32
|
+
import TestDriver from 'testdriverai';
|
|
33
|
+
|
|
34
|
+
const client = await TestDriver.create({
|
|
35
|
+
apiKey: process.env.TD_API_KEY,
|
|
36
|
+
os: 'linux', // 'linux' | 'windows' | 'mac'
|
|
37
|
+
resolution: '1920x1080', // Any standard resolution
|
|
38
|
+
verbosity: 1, // 0 (silent) | 1 (normal) | 2 (debug)
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### All Options
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
const client = await TestDriver.create({
|
|
46
|
+
// Authentication
|
|
47
|
+
apiKey: process.env.TD_API_KEY,
|
|
48
|
+
|
|
49
|
+
// Sandbox Configuration
|
|
50
|
+
os: 'linux',
|
|
51
|
+
resolution: '1920x1080',
|
|
52
|
+
newSandbox: true,
|
|
53
|
+
sandboxId: null,
|
|
54
|
+
|
|
55
|
+
// API Configuration
|
|
56
|
+
apiRoot: 'https://testdriver-api.onrender.com',
|
|
57
|
+
|
|
58
|
+
// Logging
|
|
59
|
+
verbosity: 1,
|
|
60
|
+
logging: true,
|
|
61
|
+
|
|
62
|
+
// Analytics
|
|
63
|
+
analytics: true,
|
|
64
|
+
|
|
65
|
+
// Cache Configuration
|
|
66
|
+
cacheDefaults: {
|
|
67
|
+
threshold: 0.05, // 95% similarity
|
|
68
|
+
enabled: true
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Vitest Configuration
|
|
74
|
+
|
|
75
|
+
Create or update `vitest.config.mjs`:
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
import { defineConfig } from 'vitest/config';
|
|
79
|
+
import testDriverPlugin from 'testdriverai/interfaces/vitest-plugin.mjs';
|
|
80
|
+
import { config } from 'dotenv';
|
|
81
|
+
|
|
82
|
+
config(); // Load .env file
|
|
83
|
+
|
|
84
|
+
export default defineConfig({
|
|
85
|
+
plugins: [
|
|
86
|
+
testDriverPlugin({
|
|
87
|
+
apiKey: process.env.TD_API_KEY,
|
|
88
|
+
apiRoot: process.env.TD_API_ROOT,
|
|
89
|
+
}),
|
|
90
|
+
],
|
|
91
|
+
|
|
92
|
+
test: {
|
|
93
|
+
// Test file patterns
|
|
94
|
+
include: ['**/*.test.{js,mjs,ts}'],
|
|
95
|
+
|
|
96
|
+
// Timeout settings
|
|
97
|
+
testTimeout: 300000, // 5 minutes per test
|
|
98
|
+
hookTimeout: 300000, // 5 minutes for setup/teardown
|
|
99
|
+
teardownTimeout: 120000, // 2 minutes for teardown
|
|
100
|
+
|
|
101
|
+
// Parallel execution
|
|
102
|
+
pool: 'forks',
|
|
103
|
+
poolOptions: {
|
|
104
|
+
forks: {
|
|
105
|
+
singleFork: false,
|
|
106
|
+
maxForks: 5,
|
|
107
|
+
minForks: 1,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
// Enable parallel execution
|
|
112
|
+
sequence: {
|
|
113
|
+
concurrent: true,
|
|
114
|
+
shuffle: false,
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
fileParallelism: true,
|
|
118
|
+
maxConcurrency: 5,
|
|
119
|
+
|
|
120
|
+
// Reporters
|
|
121
|
+
reporters: ['verbose'],
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Preset Configuration
|
|
127
|
+
|
|
128
|
+
### Chrome Preset
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
import { chrome } from 'testdriverai/presets';
|
|
132
|
+
|
|
133
|
+
const { testdriver, dashcam } = await chrome(context, {
|
|
134
|
+
url: 'https://example.com',
|
|
135
|
+
dashcam: true,
|
|
136
|
+
os: 'linux',
|
|
137
|
+
resolution: '1920x1080',
|
|
138
|
+
|
|
139
|
+
// Chrome-specific options
|
|
140
|
+
headless: false,
|
|
141
|
+
incognito: false,
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### VS Code Preset
|
|
146
|
+
|
|
147
|
+
```javascript
|
|
148
|
+
import { vscode } from 'testdriverai/presets';
|
|
149
|
+
|
|
150
|
+
const { testdriver, dashcam } = await vscode(context, {
|
|
151
|
+
workspace: '/path/to/workspace',
|
|
152
|
+
extensions: ['ms-python.python'],
|
|
153
|
+
settings: {
|
|
154
|
+
'editor.fontSize': 14
|
|
155
|
+
},
|
|
156
|
+
dashcam: true,
|
|
157
|
+
});
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Electron Preset
|
|
161
|
+
|
|
162
|
+
```javascript
|
|
163
|
+
import { electron } from 'testdriverai/presets';
|
|
164
|
+
|
|
165
|
+
const { testdriver, dashcam } = await electron(context, {
|
|
166
|
+
appPath: './dist/my-app',
|
|
167
|
+
args: ['--enable-logging'],
|
|
168
|
+
dashcam: true,
|
|
169
|
+
});
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Operating System Settings
|
|
173
|
+
|
|
174
|
+
### Linux
|
|
175
|
+
|
|
176
|
+
```javascript
|
|
177
|
+
{
|
|
178
|
+
os: 'linux',
|
|
179
|
+
resolution: '1920x1080',
|
|
180
|
+
// Linux-specific environment
|
|
181
|
+
environment: {
|
|
182
|
+
DISPLAY: ':0',
|
|
183
|
+
HOME: '/home/user'
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Windows
|
|
189
|
+
|
|
190
|
+
```javascript
|
|
191
|
+
{
|
|
192
|
+
os: 'windows',
|
|
193
|
+
resolution: '1366x768',
|
|
194
|
+
// Windows-specific paths use backslashes
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### macOS
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
{
|
|
202
|
+
os: 'mac',
|
|
203
|
+
resolution: '1920x1080',
|
|
204
|
+
// macOS-specific settings
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Cache Configuration
|
|
209
|
+
|
|
210
|
+
### Prompt Cache
|
|
211
|
+
|
|
212
|
+
Configure AI prompt caching:
|
|
213
|
+
|
|
214
|
+
```javascript
|
|
215
|
+
// Disable prompt cache globally
|
|
216
|
+
process.env.TD_NO_PROMPT_CACHE = 'true';
|
|
217
|
+
|
|
218
|
+
// Per call
|
|
219
|
+
await testdriver.ai('click button', false); // bypass cache
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Selector Cache
|
|
223
|
+
|
|
224
|
+
Configure element location caching:
|
|
225
|
+
|
|
226
|
+
```javascript
|
|
227
|
+
// Disable selector cache globally
|
|
228
|
+
process.env.TD_NO_SELECTOR_CACHE = 'true';
|
|
229
|
+
|
|
230
|
+
// Per call with custom threshold
|
|
231
|
+
await testdriver.find('button', { threshold: 0.01 }); // 99% similarity
|
|
232
|
+
await testdriver.find('button', { threshold: 0.10 }); // 90% similarity
|
|
233
|
+
await testdriver.find('button', { threshold: -1 }); // disable cache
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Dashcam Configuration
|
|
237
|
+
|
|
238
|
+
```javascript
|
|
239
|
+
import Dashcam from 'testdriverai/src/core/Dashcam.js';
|
|
240
|
+
|
|
241
|
+
const dashcam = new Dashcam(client, {
|
|
242
|
+
apiKey: process.env.TD_API_KEY,
|
|
243
|
+
autoStart: false,
|
|
244
|
+
logs: [
|
|
245
|
+
{
|
|
246
|
+
name: 'Application Log',
|
|
247
|
+
type: 'file',
|
|
248
|
+
path: '/tmp/app.log'
|
|
249
|
+
}
|
|
250
|
+
]
|
|
251
|
+
});
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Timeout Configuration
|
|
255
|
+
|
|
256
|
+
### Test Timeouts
|
|
257
|
+
|
|
258
|
+
```javascript
|
|
259
|
+
// In vitest.config.mjs
|
|
260
|
+
export default defineConfig({
|
|
261
|
+
test: {
|
|
262
|
+
testTimeout: 600000, // 10 minutes
|
|
263
|
+
hookTimeout: 600000, // 10 minutes
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Command Timeouts
|
|
269
|
+
|
|
270
|
+
```javascript
|
|
271
|
+
// exec() timeout
|
|
272
|
+
await client.exec('sh', 'long-running-command', 120000); // 2 minutes
|
|
273
|
+
|
|
274
|
+
// Find timeout (polling)
|
|
275
|
+
for (let i = 0; i < 60; i++) {
|
|
276
|
+
const element = await client.find('button');
|
|
277
|
+
if (element.found()) break;
|
|
278
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Best Practices
|
|
283
|
+
|
|
284
|
+
<AccordionGroup>
|
|
285
|
+
<Accordion title="Use environment variables for secrets">
|
|
286
|
+
```javascript
|
|
287
|
+
// ✅ Good
|
|
288
|
+
apiKey: process.env.TD_API_KEY
|
|
289
|
+
|
|
290
|
+
// ❌ Bad
|
|
291
|
+
apiKey: 'td_1234567890abcdef'
|
|
292
|
+
```
|
|
293
|
+
</Accordion>
|
|
294
|
+
|
|
295
|
+
<Accordion title="Set appropriate timeouts">
|
|
296
|
+
```javascript
|
|
297
|
+
// For slow operations
|
|
298
|
+
testTimeout: 600000, // 10 minutes
|
|
299
|
+
|
|
300
|
+
// For fast operations
|
|
301
|
+
testTimeout: 60000, // 1 minute
|
|
302
|
+
```
|
|
303
|
+
</Accordion>
|
|
304
|
+
|
|
305
|
+
<Accordion title="Configure caching for your needs">
|
|
306
|
+
```javascript
|
|
307
|
+
// Strict caching for stable UIs
|
|
308
|
+
threshold: 0.01 // 99% similarity
|
|
309
|
+
|
|
310
|
+
// Lenient caching for dynamic UIs
|
|
311
|
+
threshold: 0.10 // 90% similarity
|
|
312
|
+
```
|
|
313
|
+
</Accordion>
|
|
314
|
+
|
|
315
|
+
<Accordion title="Use appropriate concurrency">
|
|
316
|
+
```javascript
|
|
317
|
+
// High-end machine
|
|
318
|
+
maxConcurrency: 10
|
|
319
|
+
|
|
320
|
+
// Low-end machine or resource-intensive tests
|
|
321
|
+
maxConcurrency: 2
|
|
322
|
+
```
|
|
323
|
+
</Accordion>
|
|
324
|
+
</AccordionGroup>
|
|
325
|
+
|
|
326
|
+
## Example Configurations
|
|
327
|
+
|
|
328
|
+
### CI/CD Configuration
|
|
329
|
+
|
|
330
|
+
```javascript
|
|
331
|
+
export default defineConfig({
|
|
332
|
+
test: {
|
|
333
|
+
testTimeout: 300000,
|
|
334
|
+
maxConcurrency: 3, // Lower for CI
|
|
335
|
+
reporters: ['junit', 'json'],
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Local Development
|
|
341
|
+
|
|
342
|
+
```javascript
|
|
343
|
+
export default defineConfig({
|
|
344
|
+
test: {
|
|
345
|
+
testTimeout: 600000,
|
|
346
|
+
maxConcurrency: 5,
|
|
347
|
+
reporters: ['verbose'],
|
|
348
|
+
},
|
|
349
|
+
});
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Debug Mode
|
|
353
|
+
|
|
354
|
+
```javascript
|
|
355
|
+
const client = await TestDriver.create({
|
|
356
|
+
apiKey: process.env.TD_API_KEY,
|
|
357
|
+
verbosity: 2, // Debug logging
|
|
358
|
+
logging: true,
|
|
359
|
+
});
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## See Also
|
|
363
|
+
|
|
364
|
+
<CardGroup cols={2}>
|
|
365
|
+
<Card title="Installation" icon="download" href="/v7/getting-started/installation">
|
|
366
|
+
Install TestDriver SDK
|
|
367
|
+
</Card>
|
|
368
|
+
|
|
369
|
+
<Card title="Quick Start" icon="rocket" href="/v7/getting-started/quickstart">
|
|
370
|
+
Build your first test
|
|
371
|
+
</Card>
|
|
372
|
+
|
|
373
|
+
<Card title="Caching" icon="bolt" href="/v7/guides/caching-ai">
|
|
374
|
+
Configure caching
|
|
375
|
+
</Card>
|
|
376
|
+
|
|
377
|
+
<Card title="Client API" icon="plug" href="/v7/api/client">
|
|
378
|
+
Full client reference
|
|
379
|
+
</Card>
|
|
380
|
+
</CardGroup>
|