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.
Files changed (112) hide show
  1. package/AGENTS.md +550 -0
  2. package/CODEOWNERS +0 -1
  3. package/README.md +126 -0
  4. package/agent/index.js +43 -18
  5. package/agent/lib/commands.js +794 -135
  6. package/agent/lib/redraw.js +124 -39
  7. package/agent/lib/sandbox.js +10 -1
  8. package/agent/lib/sdk.js +21 -0
  9. package/docs/MIGRATION.md +425 -0
  10. package/docs/PRESETS.md +210 -0
  11. package/docs/docs.json +91 -37
  12. package/docs/guide/best-practices-polling.mdx +154 -0
  13. package/docs/v7/api/dashcam.mdx +497 -0
  14. package/docs/v7/api/doubleClick.mdx +102 -0
  15. package/docs/v7/api/mouseDown.mdx +161 -0
  16. package/docs/v7/api/mouseUp.mdx +164 -0
  17. package/docs/v7/api/rightClick.mdx +123 -0
  18. package/docs/v7/getting-started/configuration.mdx +380 -0
  19. package/docs/v7/getting-started/quickstart.mdx +273 -140
  20. package/docs/v7/guides/best-practices.mdx +486 -0
  21. package/docs/v7/guides/caching-ai.mdx +215 -0
  22. package/docs/v7/guides/caching-selectors.mdx +292 -0
  23. package/docs/v7/guides/caching.mdx +366 -0
  24. package/docs/v7/guides/ci-cd/azure.mdx +587 -0
  25. package/docs/v7/guides/ci-cd/circleci.mdx +523 -0
  26. package/docs/v7/guides/ci-cd/github-actions.mdx +457 -0
  27. package/docs/v7/guides/ci-cd/gitlab.mdx +498 -0
  28. package/docs/v7/guides/ci-cd/jenkins.mdx +664 -0
  29. package/docs/v7/guides/ci-cd/travis.mdx +438 -0
  30. package/docs/v7/guides/debugging.mdx +349 -0
  31. package/docs/v7/guides/faq.mdx +393 -0
  32. package/docs/v7/guides/performance.mdx +517 -0
  33. package/docs/v7/guides/troubleshooting.mdx +526 -0
  34. package/docs/v7/guides/vitest-plugin.mdx +477 -0
  35. package/docs/v7/guides/vitest.mdx +535 -0
  36. package/docs/v7/platforms/linux.mdx +308 -0
  37. package/docs/v7/platforms/macos.mdx +433 -0
  38. package/docs/v7/platforms/windows.mdx +430 -0
  39. package/docs/v7/presets/chrome-extension.mdx +223 -0
  40. package/docs/v7/presets/chrome.mdx +287 -0
  41. package/docs/v7/presets/electron.mdx +435 -0
  42. package/docs/v7/presets/vscode.mdx +398 -0
  43. package/docs/v7/presets/webapp.mdx +396 -0
  44. package/docs/v7/progressive-apis/CORE.md +459 -0
  45. package/docs/v7/progressive-apis/HOOKS.md +360 -0
  46. package/docs/v7/progressive-apis/PROGRESSIVE_DISCLOSURE.md +230 -0
  47. package/docs/v7/progressive-apis/PROVISION.md +266 -0
  48. package/interfaces/vitest-plugin.mjs +186 -100
  49. package/package.json +12 -1
  50. package/sdk.d.ts +335 -42
  51. package/sdk.js +756 -95
  52. package/src/core/Dashcam.js +469 -0
  53. package/src/core/index.d.ts +150 -0
  54. package/src/core/index.js +12 -0
  55. package/src/presets/index.mjs +331 -0
  56. package/src/vitest/extended.mjs +108 -0
  57. package/src/vitest/hooks.d.ts +119 -0
  58. package/src/vitest/hooks.mjs +298 -0
  59. package/src/vitest/index.mjs +64 -0
  60. package/src/vitest/lifecycle.mjs +277 -0
  61. package/src/vitest/utils.mjs +150 -0
  62. package/test/dashcam.test.js +137 -0
  63. package/testdriver/acceptance-sdk/assert.test.mjs +13 -31
  64. package/testdriver/acceptance-sdk/auto-cache-key-demo.test.mjs +56 -0
  65. package/testdriver/acceptance-sdk/chrome-extension.test.mjs +89 -0
  66. package/testdriver/acceptance-sdk/drag-and-drop.test.mjs +7 -19
  67. package/testdriver/acceptance-sdk/element-not-found.test.mjs +6 -19
  68. package/testdriver/acceptance-sdk/exec-js.test.mjs +6 -18
  69. package/testdriver/acceptance-sdk/exec-output.test.mjs +8 -20
  70. package/testdriver/acceptance-sdk/exec-pwsh.test.mjs +13 -25
  71. package/testdriver/acceptance-sdk/focus-window.test.mjs +8 -20
  72. package/testdriver/acceptance-sdk/formatted-logging.test.mjs +5 -20
  73. package/testdriver/acceptance-sdk/hooks-example.test.mjs +38 -0
  74. package/testdriver/acceptance-sdk/hover-image.test.mjs +10 -19
  75. package/testdriver/acceptance-sdk/hover-text-with-description.test.mjs +7 -19
  76. package/testdriver/acceptance-sdk/hover-text.test.mjs +5 -19
  77. package/testdriver/acceptance-sdk/match-image.test.mjs +7 -19
  78. package/testdriver/acceptance-sdk/presets-example.test.mjs +87 -0
  79. package/testdriver/acceptance-sdk/press-keys.test.mjs +5 -19
  80. package/testdriver/acceptance-sdk/prompt.test.mjs +6 -18
  81. package/testdriver/acceptance-sdk/scroll-keyboard.test.mjs +6 -20
  82. package/testdriver/acceptance-sdk/scroll-until-image.test.mjs +6 -18
  83. package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +9 -23
  84. package/testdriver/acceptance-sdk/scroll.test.mjs +12 -21
  85. package/testdriver/acceptance-sdk/setup/testHelpers.mjs +124 -352
  86. package/testdriver/acceptance-sdk/sully-ai.test.mjs +234 -0
  87. package/testdriver/acceptance-sdk/test-console-logs.test.mjs +42 -0
  88. package/testdriver/acceptance-sdk/type.test.mjs +19 -58
  89. package/vitest.config.mjs +1 -0
  90. package/.vscode/mcp.json +0 -9
  91. package/MIGRATION.md +0 -389
  92. package/PLUGIN_MIGRATION.md +0 -222
  93. package/PROMPT_CACHE.md +0 -200
  94. package/SDK_LOGGING.md +0 -222
  95. package/SDK_MIGRATION.md +0 -474
  96. package/SDK_README.md +0 -1122
  97. package/debug-screenshot-1763401388589.png +0 -0
  98. package/examples/run-tests-with-recording.sh +0 -70
  99. package/examples/screenshot-example.js +0 -63
  100. package/examples/sdk-awesome-logs-demo.js +0 -177
  101. package/examples/sdk-cache-thresholds.js +0 -96
  102. package/examples/sdk-element-properties.js +0 -155
  103. package/examples/sdk-simple-example.js +0 -65
  104. package/examples/test-recording-example.test.js +0 -166
  105. package/mcp-server/AI_GUIDELINES.md +0 -57
  106. package/test-find-api.js +0 -73
  107. package/test-prompt-cache.js +0 -96
  108. package/test-sandbox-render.js +0 -28
  109. package/test-sdk-methods.js +0 -15
  110. package/test-sdk-refactor.js +0 -53
  111. package/test-stack-trace.mjs +0 -57
  112. 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>