testdriverai 4.0.71 → 4.0.73
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/README.md +6 -2
- package/index.js +3 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
<a href="https://testdriver.ai"><img src="https://github.com/dashcamio/testdriver/assets/318295/2a0ad981-8504-46f0-ad97-60cb6c26f1e7"/></a>
|
|
2
2
|
|
|
3
3
|
# TestDriver.ai
|
|
4
4
|
|
|
@@ -8,6 +8,10 @@ Next generation autonomous AI agent for end-to-end testing of web & desktop
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
```sh
|
|
12
|
+
npm install testdriverai -g
|
|
13
|
+
```
|
|
14
|
+
|
|
11
15
|
TestDriver isn't like any test framework you've used before. TestDriver is an OS Agent for QA. TestDriver uses AI vision along with mouse and keyboard emulation to control the entire desktop. It's more like a QA employee than a test framework. This kind of black-box testing has some major advantages:
|
|
12
16
|
|
|
13
17
|
- **Easier set up:** No need to add test IDs or craft complex selectors
|
|
@@ -77,7 +81,7 @@ If you have multiple monitors, make sure you do this on your primary display.
|
|
|
77
81
|
|
|
78
82
|
Now, just tell TestDriver what you want it to do. For now, stick with single commands like "click sign up" and "scroll down."
|
|
79
83
|
|
|
80
|
-
Later, try
|
|
84
|
+
Later, try to perform higher level objectives like "complete the onboarding."
|
|
81
85
|
|
|
82
86
|
```yaml
|
|
83
87
|
> Click on sign up
|
package/index.js
CHANGED
|
@@ -163,7 +163,7 @@ function fileCompleter(line) {
|
|
|
163
163
|
|
|
164
164
|
function completer(line) {
|
|
165
165
|
let completions =
|
|
166
|
-
"/summarize /save /run /quit /
|
|
166
|
+
"/summarize /save /run /quit /assert /undo /manual".split(" ");
|
|
167
167
|
if (line.startsWith("/run ")) {
|
|
168
168
|
return fileCompleter(line);
|
|
169
169
|
} else {
|
|
@@ -524,7 +524,7 @@ const generate = async (type, count) => {
|
|
|
524
524
|
let list = testPrompt.listsOrdered[0];
|
|
525
525
|
|
|
526
526
|
let contents = list
|
|
527
|
-
.map((item, index) => `${index + 1}.
|
|
527
|
+
.map((item, index) => `${index + 1}. ${item}`)
|
|
528
528
|
.join("\n");
|
|
529
529
|
fs.writeFileSync(path1, contents);
|
|
530
530
|
}
|
|
@@ -635,8 +635,6 @@ const firstPrompt = async () => {
|
|
|
635
635
|
await exit();
|
|
636
636
|
} else if (input.indexOf("/save") == 0) {
|
|
637
637
|
await save({ filepath: commands[1] });
|
|
638
|
-
} else if (input.indexOf("/explore") == 0) {
|
|
639
|
-
await humanInput(commands.slice(1).join(" "), true);
|
|
640
638
|
} else if (input.indexOf("/undo") == 0) {
|
|
641
639
|
await undo();
|
|
642
640
|
} else if (input.indexOf("/assert") == 0) {
|
|
@@ -648,7 +646,7 @@ const firstPrompt = async () => {
|
|
|
648
646
|
} else if (input.indexOf("/generate") == 0) {
|
|
649
647
|
await generate(commands[1], commands[2]);
|
|
650
648
|
} else {
|
|
651
|
-
await humanInput(input,
|
|
649
|
+
await humanInput(input, true);
|
|
652
650
|
}
|
|
653
651
|
|
|
654
652
|
setTerminalWindowTransparency(false);
|