testdriverai 7.5.25 → 7.5.26

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/CHANGELOG.md CHANGED
@@ -1,3 +1,32 @@
1
+ ## 7.5.26 (2026-03-11)
2
+
3
+ ## ✨ Features
4
+
5
+ - Add stable and canary deployment channels for better release management [API] (50347881)
6
+ - Add version API endpoint to provide deployment channel information [API] (50347881)
7
+ - Add new AI skill for waiting operations in test automation [SDK] (50347881)
8
+ - Add customer testimonials section to marketing site (50347881)
9
+ - Add contact and demo pages to marketing site (50347881)
10
+ - Add user limit checking for team invitations [API] (50347881)
11
+ - Improve test analytics dashboard with enhanced data visualization [Web] (50347881)
12
+ - Improve test case management interface with better filtering and search [Web] (50347881)
13
+ - Improve test run detail view with more comprehensive information [Web] (50347881)
14
+ - Add PostHog analytics integration for better user tracking (50347881)
15
+
16
+ ## 🐛 Bug Fixes
17
+
18
+ - Fix network logs screenshot filename in marketing assets (50347881)
19
+ - Improve invite validation flow for team management [API] (50347881)
20
+
21
+ ## 🔧 Maintenance
22
+
23
+ - Update pricing configuration with shared pricing data structure (50347881)
24
+ - Enhance release workflow to support dual-branch publishing (50347881)
25
+ - Update environment configuration for stable and canary deployments (50347881)
26
+ - Improve sandbox agent error handling and logging [Runner] (50347881)
27
+ - Update SDK examples with better configuration handling [SDK] (50347881)
28
+ - Enhance debugger interface with improved styling [SDK] (50347881)
29
+
1
30
  ## 7.5.25 (2026-03-09)
2
31
 
3
32
  ## 🐛 Bug Fixes
package/agent/index.js CHANGED
@@ -1918,12 +1918,12 @@ ${regression}
1918
1918
  const encodedData = Buffer.from(JSON.stringify(data)).toString("base64");
1919
1919
 
1920
1920
  // Build debugger URL — hosted on S3 (v7-vnc bucket)
1921
- const debuggerBase = process.env.TD_DEBUGGER_BASE_URL || "https://v7-vnc.s3.us-east-2.amazonaws.com";
1922
- const urlToOpen = `${debuggerBase}/index.html?data=${encodedData}`;
1921
+ const debuggerBase = process.env.TD_DEBUGGER_BASE_URL || "http://v7-vnc.s3.us-east-2.amazonaws.com";
1922
+ // URL-encode the base64 data to handle +, /, = characters safely
1923
+ const urlToOpen = `${debuggerBase}/index.html?data=${encodeURIComponent(encodedData)}`;
1923
1924
 
1924
1925
  // Check preview mode from CLI options (SDK passes it directly)
1925
1926
  const previewMode = (this.cliArgs.options && this.cliArgs.options.preview) || this.config.TD_PREVIEW || "browser";
1926
- console.log("[DEBUG renderSandbox] preview:", previewMode);
1927
1927
 
1928
1928
  if (previewMode === "ide") {
1929
1929
  // Send session to VS Code extension via HTTP
@@ -369,7 +369,7 @@ You can customize the AMI to include additional software or configurations:
369
369
  <Step title="Connect via RDP">
370
370
  Use the default credentials:
371
371
  - **Username**: `testdriver`
372
- - **Password**: `changemeABC123`
372
+ - **Password**: `wwv9uJ0sqlulbN3`
373
373
  </Step>
374
374
 
375
375
  <Step title="Change the Password">
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: testdriver:wait
3
+ description: Pause the execution of the script for a specified duration.
4
+ ---
5
+ <!-- Generated from wait.mdx. DO NOT EDIT. -->
6
+
7
+ ## Description
8
+
9
+ The `wait` method pauses test execution for a specified number of milliseconds before continuing. This is useful for adding delays between actions, waiting for animations to complete, or pausing for state changes to settle.
10
+
11
+ ## Syntax
12
+
13
+ ```javascript
14
+ await testdriver.wait(timeout);
15
+ ```
16
+
17
+ ## Arguments
18
+
19
+ | Argument | Type | Default | Description |
20
+ | --------- | -------- | ------- | ------------------------------------- |
21
+ | `timeout` | `number` | `3000` | The duration in milliseconds to wait. |
22
+
23
+ ## Examples
24
+
25
+ ```javascript
26
+ // Wait 2 seconds for an animation to complete
27
+ await testdriver.find('submit button').click();
28
+ await testdriver.wait(2000);
29
+
30
+ // Wait 5 seconds
31
+ await testdriver.wait(5000);
32
+
33
+ // Wait with default timeout (3 seconds)
34
+ await testdriver.wait();
35
+ ```
36
+
37
+ ## Best Practices
38
+
39
+ - **Use for simple delays** — waiting for animations, transitions, or state changes after an action.
40
+ - **Avoid for element waiting** — if you're waiting for a specific element to appear, use `find()` with a `timeout` option instead:
41
+ ```javascript
42
+ // ✅ Better for waiting for elements
43
+ const element = await testdriver.find('success message', { timeout: 30000 });
44
+
45
+ // ❌ Don't do this for element waiting
46
+ await testdriver.wait(5000);
47
+ const element = await testdriver.find('success message');
48
+ ```
49
+ - Avoid excessively long timeouts to keep tests efficient.
50
+ - Use sparingly — TestDriver's [redraw detection](/v7/waiting-for-elements) automatically waits for screen and network stability after each action.
@@ -85,4 +85,6 @@ await testdriver.find('next page button').click();
85
85
  await testdriver.wait(1000);
86
86
  ```
87
87
 
88
- For waiting for specific **elements** to appear, prefer `find()` with a `timeout` option. Use `wait()` only for simple time-based pauses.
88
+ <Note>
89
+ For waiting for specific **elements** to appear, prefer `find()` with a `timeout` option. Use `wait()` only for simple time-based pauses.
90
+ </Note>
@@ -354,8 +354,21 @@
354
354
  console.error("Error parsing data:", e);
355
355
  }
356
356
  }
357
+ // Demo mode: use mock data if no data param provided (for local dev)
357
358
  if (!parsedData || !parsedData.url) {
358
- alert("Missing or invalid data parameter.");
359
+ const isLocalDev = window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1";
360
+ if (isLocalDev) {
361
+ console.log("[Debugger] No data param — using demo mode");
362
+ parsedData = {
363
+ url: "about:blank",
364
+ resolution: [1366, 768],
365
+ testFile: "demo-test.mjs",
366
+ os: "linux",
367
+ token: null,
368
+ };
369
+ } else {
370
+ alert("Missing or invalid data parameter.");
371
+ }
359
372
  }
360
373
 
361
374
  // Elements
@@ -402,9 +415,13 @@
402
415
  : "TestDriver";
403
416
  document.title = `${testFileName} - Debugger`;
404
417
 
405
- // Embed the VNC URL in the iframe
418
+ // Embed the VNC URL in the iframe with token
406
419
  iframe.style.display = "block";
407
- iframe.src = parsedData.url;
420
+ const vncUrl = new URL(parsedData.url);
421
+ if (parsedData.token) {
422
+ vncUrl.searchParams.set("token", parsedData.token);
423
+ }
424
+ iframe.src = vncUrl.toString();
408
425
 
409
426
  // Hide loading screen once iframe loads
410
427
  iframe.addEventListener("load", () => {
package/docs/docs.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://mintlify.com/docs.json",
3
- "theme": "aspen",
3
+ "theme": "willow",
4
4
  "name": "TestDriver",
5
5
  "colors": {
6
6
  "primary": "#b3d334",
@@ -370,7 +370,7 @@ You can customize the AMI to include additional software or configurations:
370
370
  <Step title="Connect via RDP">
371
371
  Use the default credentials:
372
372
  - **Username**: `testdriver`
373
- - **Password**: `changemeABC123`
373
+ - **Password**: `wwv9uJ0sqlulbN3`
374
374
  </Step>
375
375
 
376
376
  <Step title="Change the Password">
@@ -1,5 +1,5 @@
1
1
  export const getDefaults = (context) => ({
2
2
  ip: context.ip || process.env.TD_IP,
3
3
  redraw: { enabled: false },
4
- preview: 'ide',
4
+ preview: 'web',
5
5
  });
@@ -1,24 +1,31 @@
1
1
  /**
2
- * TestDriver SDK - Assert Test (Vitest)
3
- * Converted from: testdriver/acceptance/assert.yaml
2
+ * TestDriver SDK - No-Provision Test with Dashcam (Vitest)
3
+ *
4
+ * Demonstrates manual dashcam control without using provision methods.
5
+ * When not using provision.chrome(), provision.vscode(), etc., you need
6
+ * to manually start and stop dashcam recording.
4
7
  */
5
8
 
6
- import { describe, expect, it } from "vitest";
9
+ import { describe, it } from "vitest";
7
10
  import { TestDriver } from "../lib/vitest/hooks.mjs";
8
11
  import { getDefaults } from "./config.mjs";
9
12
 
10
- describe("Assert Test", () => {
11
- it("should assert the testdriver login page shows", async (context) => {
13
+ describe("No-Provision with Dashcam", () => {
14
+ it("should record dashcam while asserting desktop is visible", async (context) => {
12
15
  const testdriver = TestDriver(context, { ...getDefaults(context) });
13
16
 
14
- await testdriver.wait(10000)
17
+ // Start dashcam recording manually (provision methods do this automatically)
18
+ await testdriver.dashcam.start();
15
19
 
16
- // Assert the TestDriver.ai Sandbox login page is displayed
17
- const result = await testdriver.assert(
18
- "A desktop is visible",
19
- );
20
+ await testdriver.exec('sh', 'gedit >/dev/null 2>&1 &'); // Example command to keep the test running for a bit
20
21
 
21
- expect(result).toBeTruthy();
22
+ await testdriver.assert('untitled document is visible');
23
+
24
+ // Stop dashcam and get the recording URL
25
+ const dashcamUrl = await testdriver.dashcam.stop();
26
+ if (dashcamUrl) {
27
+ console.log(`🎥 Dashcam recording: ${dashcamUrl}`);
28
+ }
22
29
  });
23
30
  });
24
31
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testdriverai",
3
- "version": "7.5.25",
3
+ "version": "7.5.26",
4
4
  "description": "Next generation autonomous AI agent for end-to-end testing of web & desktop",
5
5
  "main": "sdk.js",
6
6
  "types": "sdk.d.ts",
package/sdk.js CHANGED
@@ -1871,6 +1871,8 @@ class TestDriverSDK {
1871
1871
  "--no-first-run",
1872
1872
  "--no-experiments",
1873
1873
  "--disable-infobars",
1874
+ "--disable-features=StartupBrowserCreator",
1875
+ "--disable-features=ChromeWhatsNewUI",
1874
1876
  `--user-data-dir=${userDataDir}`,
1875
1877
  );
1876
1878