testdriverai 7.3.13 → 7.3.15

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,11 @@
1
+ ## [7.3.15](https://github.com/testdriverai/testdriverai/compare/v7.3.14...v7.3.15) (2026-02-18)
2
+
3
+
4
+
5
+ ## [7.3.14](https://github.com/testdriverai/testdriverai/compare/v7.3.13...v7.3.14) (2026-02-17)
6
+
7
+
8
+
1
9
  ## [7.3.13](https://github.com/testdriverai/testdriverai/compare/v7.3.12...v7.3.13) (2026-02-17)
2
10
 
3
11
 
@@ -936,6 +936,11 @@ const createCommands = (
936
936
  const { delay = 250, secret = false, redraw: redrawOpts, ...elementData } = options;
937
937
  const redrawOptions = extractRedrawOptions({ redraw: redrawOpts, ...options });
938
938
 
939
+ // Validate that text parameter is provided
940
+ if (text === undefined || text === null) {
941
+ throw new CommandError("type() requires a text parameter. Received: " + text);
942
+ }
943
+
939
944
  // Log parent action with text
940
945
  if (secret) {
941
946
  emitter.emit(events.log.narration, formatter.getPrefix("type") + " " + theme.yellow.bold("Type") + " " + theme.dim(`secret "****"`));
@@ -11,7 +11,7 @@ const path = require("path");
11
11
  */
12
12
 
13
13
  const DOCS_DIR = path.join(__dirname, "../v7");
14
- const OUTPUT_DIR = path.join(__dirname, "../../skills");
14
+ const OUTPUT_DIR = path.join(__dirname, "../../ai/skills");
15
15
 
16
16
  // Parse YAML frontmatter from mdx content
17
17
  function parseFrontmatter(content) {
@@ -27,6 +27,15 @@ Scale your test suite with reusable code snippets to reduce duplication and main
27
27
  }
28
28
  ```
29
29
 
30
+ <Warning>
31
+ **Avoid hardcoding dynamic values in element descriptions.** Element selectors should describe the *type* of element, not specific content that might change.
32
+
33
+ **❌ Bad:** `await testdriver.find('profile name TestDriver in the top right')`
34
+ **✅ Good:** `await testdriver.find('user profile name in the top right')`
35
+
36
+ Hardcoded values like usernames, product names, or prices will cause tests to fail when the data changes. Use generic descriptions that work regardless of the specific content displayed.
37
+ </Warning>
38
+
30
39
  ```javascript test/checkout.test.js
31
40
  import { login } from './helpers/auth.js';
32
41
 
@@ -36,6 +36,15 @@ export async function logout(testdriver) {
36
36
  }
37
37
  ```
38
38
 
39
+ <Warning>
40
+ **Avoid hardcoding dynamic values in element descriptions.** Element selectors should describe the *type* of element, not specific content that might change.
41
+
42
+ **❌ Bad:** `await testdriver.find('profile name TestDriver in the top right')`
43
+ **✅ Good:** `await testdriver.find('user profile name in the top right')`
44
+
45
+ Hardcoded values like usernames, product names, or prices will cause tests to fail when the data changes. Use generic descriptions that work regardless of the specific content displayed.
46
+ </Warning>
47
+
39
48
  Now import and use these helpers in any test:
40
49
 
41
50
  ```javascript test/checkout.test.mjs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testdriverai",
3
- "version": "7.3.13",
3
+ "version": "7.3.15",
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",