@desplega.ai/qa-use 2.6.1 → 2.7.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/dist/lib/api/browser-types.d.ts +34 -2
- package/dist/lib/api/browser-types.d.ts.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/cli/commands/browser/back.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/back.js +11 -3
- package/dist/src/cli/commands/browser/back.js.map +1 -1
- package/dist/src/cli/commands/browser/check.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/check.js +9 -0
- package/dist/src/cli/commands/browser/check.js.map +1 -1
- package/dist/src/cli/commands/browser/click.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/click.js +11 -0
- package/dist/src/cli/commands/browser/click.js.map +1 -1
- package/dist/src/cli/commands/browser/drag.d.ts +1 -1
- package/dist/src/cli/commands/browser/drag.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/drag.js +94 -30
- package/dist/src/cli/commands/browser/drag.js.map +1 -1
- package/dist/src/cli/commands/browser/evaluate.d.ts +6 -0
- package/dist/src/cli/commands/browser/evaluate.d.ts.map +1 -0
- package/dist/src/cli/commands/browser/evaluate.js +72 -0
- package/dist/src/cli/commands/browser/evaluate.js.map +1 -0
- package/dist/src/cli/commands/browser/fill.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/fill.js +9 -0
- package/dist/src/cli/commands/browser/fill.js.map +1 -1
- package/dist/src/cli/commands/browser/forward.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/forward.js +11 -3
- package/dist/src/cli/commands/browser/forward.js.map +1 -1
- package/dist/src/cli/commands/browser/goto.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/goto.js +12 -2
- package/dist/src/cli/commands/browser/goto.js.map +1 -1
- package/dist/src/cli/commands/browser/hover.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/hover.js +9 -0
- package/dist/src/cli/commands/browser/hover.js.map +1 -1
- package/dist/src/cli/commands/browser/index.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/index.js +2 -0
- package/dist/src/cli/commands/browser/index.js.map +1 -1
- package/dist/src/cli/commands/browser/mfa-totp.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/mfa-totp.js +9 -0
- package/dist/src/cli/commands/browser/mfa-totp.js.map +1 -1
- package/dist/src/cli/commands/browser/press.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/press.js +12 -2
- package/dist/src/cli/commands/browser/press.js.map +1 -1
- package/dist/src/cli/commands/browser/reload.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/reload.js +11 -3
- package/dist/src/cli/commands/browser/reload.js.map +1 -1
- package/dist/src/cli/commands/browser/run.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/run.js +147 -23
- package/dist/src/cli/commands/browser/run.js.map +1 -1
- package/dist/src/cli/commands/browser/scroll-into-view.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/scroll-into-view.js +9 -0
- package/dist/src/cli/commands/browser/scroll-into-view.js.map +1 -1
- package/dist/src/cli/commands/browser/scroll.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/scroll.js +12 -2
- package/dist/src/cli/commands/browser/scroll.js.map +1 -1
- package/dist/src/cli/commands/browser/select.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/select.js +9 -0
- package/dist/src/cli/commands/browser/select.js.map +1 -1
- package/dist/src/cli/commands/browser/type.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/type.js +12 -2
- package/dist/src/cli/commands/browser/type.js.map +1 -1
- package/dist/src/cli/commands/browser/uncheck.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/uncheck.js +9 -0
- package/dist/src/cli/commands/browser/uncheck.js.map +1 -1
- package/dist/src/cli/commands/browser/upload.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/upload.js +9 -0
- package/dist/src/cli/commands/browser/upload.js.map +1 -1
- package/dist/src/cli/commands/browser/wait-for-load.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/wait-for-load.js +12 -2
- package/dist/src/cli/commands/browser/wait-for-load.js.map +1 -1
- package/dist/src/cli/commands/browser/wait-for-selector.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/wait-for-selector.js +12 -2
- package/dist/src/cli/commands/browser/wait-for-selector.js.map +1 -1
- package/dist/src/cli/commands/browser/wait.d.ts.map +1 -1
- package/dist/src/cli/commands/browser/wait.js +12 -2
- package/dist/src/cli/commands/browser/wait.js.map +1 -1
- package/dist/src/cli/lib/snapshot-diff.d.ts +6 -0
- package/dist/src/cli/lib/snapshot-diff.d.ts.map +1 -0
- package/dist/src/cli/lib/snapshot-diff.js +58 -0
- package/dist/src/cli/lib/snapshot-diff.js.map +1 -0
- package/lib/api/browser-types.ts +43 -2
- package/package.json +1 -1
|
@@ -6,9 +6,11 @@ import { BrowserApiClient } from '../../../../lib/api/browser.js';
|
|
|
6
6
|
import { resolveSessionId, touchSession } from '../../lib/browser-sessions.js';
|
|
7
7
|
import { loadConfig } from '../../lib/config.js';
|
|
8
8
|
import { error, success } from '../../lib/output.js';
|
|
9
|
+
import { formatSnapshotDiff } from '../../lib/snapshot-diff.js';
|
|
9
10
|
export const forwardCommand = new Command('forward')
|
|
10
11
|
.description('Navigate forward in browser history')
|
|
11
12
|
.option('-s, --session-id <id>', 'Session ID (auto-resolved if only one session)')
|
|
13
|
+
.option('--no-diff', 'Disable snapshot diff output')
|
|
12
14
|
.action(async (options) => {
|
|
13
15
|
try {
|
|
14
16
|
const config = await loadConfig();
|
|
@@ -22,11 +24,17 @@ export const forwardCommand = new Command('forward')
|
|
|
22
24
|
explicitId: options.sessionId,
|
|
23
25
|
client,
|
|
24
26
|
});
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
const action = { type: 'forward' };
|
|
28
|
+
if (options.diff !== false) {
|
|
29
|
+
action.include_snapshot_diff = true;
|
|
30
|
+
}
|
|
31
|
+
const result = await client.executeAction(resolved.id, action);
|
|
28
32
|
if (result.success) {
|
|
29
33
|
console.log(success('Navigated forward'));
|
|
34
|
+
if (result.snapshot_diff) {
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
37
|
+
}
|
|
30
38
|
await touchSession(resolved.id);
|
|
31
39
|
}
|
|
32
40
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forward.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/forward.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"forward.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/forward.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAOhE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,uBAAuB,EAAE,gDAAgD,CAAC;KACjF,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC;YACtC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,MAAM,GAGR,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACtC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE/D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAE1C,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goto.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/goto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"goto.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/goto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,WAAW,SA+DpB,CAAC"}
|
|
@@ -6,10 +6,12 @@ import { BrowserApiClient } from '../../../../lib/api/browser.js';
|
|
|
6
6
|
import { resolveSessionId, touchSession } from '../../lib/browser-sessions.js';
|
|
7
7
|
import { loadConfig } from '../../lib/config.js';
|
|
8
8
|
import { error, success } from '../../lib/output.js';
|
|
9
|
+
import { formatSnapshotDiff } from '../../lib/snapshot-diff.js';
|
|
9
10
|
export const gotoCommand = new Command('goto')
|
|
10
11
|
.description('Navigate to a URL')
|
|
11
12
|
.argument('<url>', 'URL to navigate to')
|
|
12
13
|
.option('-s, --session-id <id>', 'Session ID (auto-resolved if only one session)')
|
|
14
|
+
.option('--no-diff', 'Disable snapshot diff output')
|
|
13
15
|
.action(async (url, options) => {
|
|
14
16
|
try {
|
|
15
17
|
// Load configuration
|
|
@@ -32,12 +34,20 @@ export const gotoCommand = new Command('goto')
|
|
|
32
34
|
client,
|
|
33
35
|
});
|
|
34
36
|
// Execute goto action
|
|
35
|
-
const
|
|
37
|
+
const action = {
|
|
36
38
|
type: 'goto',
|
|
37
39
|
url,
|
|
38
|
-
}
|
|
40
|
+
};
|
|
41
|
+
if (options.diff !== false) {
|
|
42
|
+
action.include_snapshot_diff = true;
|
|
43
|
+
}
|
|
44
|
+
const result = await client.executeAction(resolved.id, action);
|
|
39
45
|
if (result.success) {
|
|
40
46
|
console.log(success(`Navigated to ${url}`));
|
|
47
|
+
if (result.snapshot_diff) {
|
|
48
|
+
console.log('');
|
|
49
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
50
|
+
}
|
|
41
51
|
// Update session timestamp
|
|
42
52
|
await touchSession(resolved.id);
|
|
43
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goto.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/goto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"goto.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/goto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/hover.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/hover.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,YAAY,SAiErB,CAAC"}
|
|
@@ -7,11 +7,13 @@ import { resolveSessionId, touchSession } from '../../lib/browser-sessions.js';
|
|
|
7
7
|
import { normalizeRef } from '../../lib/browser-utils.js';
|
|
8
8
|
import { loadConfig } from '../../lib/config.js';
|
|
9
9
|
import { error, success } from '../../lib/output.js';
|
|
10
|
+
import { formatSnapshotDiff } from '../../lib/snapshot-diff.js';
|
|
10
11
|
export const hoverCommand = new Command('hover')
|
|
11
12
|
.description('Hover over an element by ref or semantic description')
|
|
12
13
|
.argument('[ref]', 'Element ref from snapshot (e.g., "e3" or "@e3")')
|
|
13
14
|
.option('-s, --session-id <id>', 'Session ID (auto-resolved if only one session)')
|
|
14
15
|
.option('-t, --text <description>', 'Semantic element description (AI-based, slower)')
|
|
16
|
+
.option('--no-diff', 'Disable snapshot diff output')
|
|
15
17
|
.action(async (ref, options) => {
|
|
16
18
|
try {
|
|
17
19
|
// Validate that either ref or --text is provided
|
|
@@ -38,10 +40,17 @@ export const hoverCommand = new Command('hover')
|
|
|
38
40
|
else if (options.text) {
|
|
39
41
|
action.text = options.text;
|
|
40
42
|
}
|
|
43
|
+
if (options.diff !== false) {
|
|
44
|
+
action.include_snapshot_diff = true;
|
|
45
|
+
}
|
|
41
46
|
const result = await client.executeAction(resolved.id, action);
|
|
42
47
|
if (result.success) {
|
|
43
48
|
const target = ref ? `element ${normalizeRef(ref)}` : `"${options.text}"`;
|
|
44
49
|
console.log(success(`Hovering over ${target}`));
|
|
50
|
+
if (result.snapshot_diff) {
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
53
|
+
}
|
|
45
54
|
await touchSession(resolved.id);
|
|
46
55
|
}
|
|
47
56
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/hover.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/hover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuCpC,eAAO,MAAM,cAAc,SAAgE,CAAC"}
|
|
@@ -12,6 +12,7 @@ import { closeCommand } from './close.js';
|
|
|
12
12
|
// Session management commands
|
|
13
13
|
import { createCommand } from './create.js';
|
|
14
14
|
import { dragCommand } from './drag.js';
|
|
15
|
+
import { evaluateCommand } from './evaluate.js';
|
|
15
16
|
import { fillCommand } from './fill.js';
|
|
16
17
|
import { forwardCommand } from './forward.js';
|
|
17
18
|
import { generateTestCommand } from './generate-test.js';
|
|
@@ -75,6 +76,7 @@ browserCommand.addCommand(urlCommand);
|
|
|
75
76
|
browserCommand.addCommand(getBlocksCommand);
|
|
76
77
|
browserCommand.addCommand(logsCommand);
|
|
77
78
|
browserCommand.addCommand(generateTestCommand);
|
|
79
|
+
browserCommand.addCommand(evaluateCommand);
|
|
78
80
|
// Register advanced commands
|
|
79
81
|
browserCommand.addCommand(streamCommand);
|
|
80
82
|
browserCommand.addCommand(runCommand);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mfa-totp.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/mfa-totp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mfa-totp.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/mfa-totp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,eAAO,MAAM,cAAc,SAqHvB,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { resolveSessionId, touchSession } from '../../lib/browser-sessions.js';
|
|
|
7
7
|
import { normalizeRef } from '../../lib/browser-utils.js';
|
|
8
8
|
import { loadConfig } from '../../lib/config.js';
|
|
9
9
|
import { error, info, success } from '../../lib/output.js';
|
|
10
|
+
import { formatSnapshotDiff } from '../../lib/snapshot-diff.js';
|
|
10
11
|
/**
|
|
11
12
|
* Check if a string looks like a valid TOTP secret (base32 encoded)
|
|
12
13
|
*/
|
|
@@ -22,6 +23,7 @@ export const mfaTotpCommand = new Command('mfa-totp')
|
|
|
22
23
|
.argument('[secret]', 'TOTP secret (if ref is provided)')
|
|
23
24
|
.option('-s, --session-id <id>', 'Session ID (auto-resolved if only one session)')
|
|
24
25
|
.option('-t, --text <description>', 'Semantic element description (AI-based)')
|
|
26
|
+
.option('--no-diff', 'Disable snapshot diff output')
|
|
25
27
|
.action(async (refOrSecret, secret, options) => {
|
|
26
28
|
try {
|
|
27
29
|
const config = await loadConfig();
|
|
@@ -76,6 +78,9 @@ export const mfaTotpCommand = new Command('mfa-totp')
|
|
|
76
78
|
if (text) {
|
|
77
79
|
action.text = text;
|
|
78
80
|
}
|
|
81
|
+
if (options.diff !== false) {
|
|
82
|
+
action.include_snapshot_diff = true;
|
|
83
|
+
}
|
|
79
84
|
const result = await client.executeAction(resolved.id, action);
|
|
80
85
|
if (result.success) {
|
|
81
86
|
// The API may return the generated code in the result data
|
|
@@ -99,6 +104,10 @@ export const mfaTotpCommand = new Command('mfa-totp')
|
|
|
99
104
|
console.log(success('Generated TOTP code'));
|
|
100
105
|
}
|
|
101
106
|
}
|
|
107
|
+
if (result.snapshot_diff) {
|
|
108
|
+
console.log('');
|
|
109
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
110
|
+
}
|
|
102
111
|
await touchSession(resolved.id);
|
|
103
112
|
}
|
|
104
113
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mfa-totp.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/mfa-totp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"mfa-totp.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/mfa-totp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"press.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/press.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"press.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/press.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,eAAO,MAAM,YAAY,SA0DrB,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { BrowserApiClient } from '../../../../lib/api/browser.js';
|
|
|
6
6
|
import { resolveSessionId, touchSession } from '../../lib/browser-sessions.js';
|
|
7
7
|
import { loadConfig } from '../../lib/config.js';
|
|
8
8
|
import { error, success } from '../../lib/output.js';
|
|
9
|
+
import { formatSnapshotDiff } from '../../lib/snapshot-diff.js';
|
|
9
10
|
// Common key names for reference
|
|
10
11
|
const COMMON_KEYS = [
|
|
11
12
|
'Enter',
|
|
@@ -27,6 +28,7 @@ export const pressCommand = new Command('press')
|
|
|
27
28
|
.description('Press a keyboard key')
|
|
28
29
|
.argument('<key>', `Key to press (e.g., "Enter", "Tab", "Escape")`)
|
|
29
30
|
.option('-s, --session-id <id>', 'Session ID (auto-resolved if only one session)')
|
|
31
|
+
.option('--no-diff', 'Disable snapshot diff output')
|
|
30
32
|
.action(async (key, options) => {
|
|
31
33
|
try {
|
|
32
34
|
// Load configuration
|
|
@@ -44,12 +46,20 @@ export const pressCommand = new Command('press')
|
|
|
44
46
|
client,
|
|
45
47
|
});
|
|
46
48
|
// Execute press action
|
|
47
|
-
const
|
|
49
|
+
const action = {
|
|
48
50
|
type: 'press',
|
|
49
51
|
key,
|
|
50
|
-
}
|
|
52
|
+
};
|
|
53
|
+
if (options.diff !== false) {
|
|
54
|
+
action.include_snapshot_diff = true;
|
|
55
|
+
}
|
|
56
|
+
const result = await client.executeAction(resolved.id, action);
|
|
51
57
|
if (result.success) {
|
|
52
58
|
console.log(success(`Pressed key: ${key}`));
|
|
59
|
+
if (result.snapshot_diff) {
|
|
60
|
+
console.log('');
|
|
61
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
62
|
+
}
|
|
53
63
|
await touchSession(resolved.id);
|
|
54
64
|
}
|
|
55
65
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"press.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/press.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"press.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/press.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reload.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/reload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"reload.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/reload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,aAAa,SA+CtB,CAAC"}
|
|
@@ -6,9 +6,11 @@ import { BrowserApiClient } from '../../../../lib/api/browser.js';
|
|
|
6
6
|
import { resolveSessionId, touchSession } from '../../lib/browser-sessions.js';
|
|
7
7
|
import { loadConfig } from '../../lib/config.js';
|
|
8
8
|
import { error, success } from '../../lib/output.js';
|
|
9
|
+
import { formatSnapshotDiff } from '../../lib/snapshot-diff.js';
|
|
9
10
|
export const reloadCommand = new Command('reload')
|
|
10
11
|
.description('Reload current page')
|
|
11
12
|
.option('-s, --session-id <id>', 'Session ID (auto-resolved if only one session)')
|
|
13
|
+
.option('--no-diff', 'Disable snapshot diff output')
|
|
12
14
|
.action(async (options) => {
|
|
13
15
|
try {
|
|
14
16
|
const config = await loadConfig();
|
|
@@ -22,11 +24,17 @@ export const reloadCommand = new Command('reload')
|
|
|
22
24
|
explicitId: options.sessionId,
|
|
23
25
|
client,
|
|
24
26
|
});
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
const action = { type: 'reload' };
|
|
28
|
+
if (options.diff !== false) {
|
|
29
|
+
action.include_snapshot_diff = true;
|
|
30
|
+
}
|
|
31
|
+
const result = await client.executeAction(resolved.id, action);
|
|
28
32
|
if (result.success) {
|
|
29
33
|
console.log(success('Page reloaded'));
|
|
34
|
+
if (result.snapshot_diff) {
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
37
|
+
}
|
|
30
38
|
await touchSession(resolved.id);
|
|
31
39
|
}
|
|
32
40
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reload.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/reload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"reload.js","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/reload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAOhE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,uBAAuB,EAAE,gDAAgD,CAAC;KACjF,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC;YACtC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,MAAM,GAGR,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACtC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE/D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YAEtC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/browser/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,eAAO,MAAM,UAAU,SA45BnB,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { createStoredSession, removeStoredSession, resolveSessionId, storeSessio
|
|
|
8
8
|
import { normalizeRef } from '../../lib/browser-utils.js';
|
|
9
9
|
import { loadConfig } from '../../lib/config.js';
|
|
10
10
|
import { error, info, success } from '../../lib/output.js';
|
|
11
|
+
import { formatSnapshotDiff } from '../../lib/snapshot-diff.js';
|
|
11
12
|
function collectVars(value, previous) {
|
|
12
13
|
const [key, val] = value.split('=');
|
|
13
14
|
return { ...previous, [key]: val };
|
|
@@ -187,15 +188,22 @@ export const runCommand = new Command('run')
|
|
|
187
188
|
}
|
|
188
189
|
},
|
|
189
190
|
click: async (args, client, sessionId) => {
|
|
190
|
-
// Check for --force/-f flag
|
|
191
|
+
// Check for --force/-f flag and --no-diff flag
|
|
191
192
|
const forceIdx = args.findIndex((a) => a === '-f' || a === '--force');
|
|
193
|
+
const noDiffIdx = args.indexOf('--no-diff');
|
|
192
194
|
const force = forceIdx !== -1;
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
195
|
+
const disableDiff = noDiffIdx !== -1;
|
|
196
|
+
// Filter out flags
|
|
197
|
+
let filteredArgs = [...args];
|
|
198
|
+
if (forceIdx !== -1) {
|
|
199
|
+
filteredArgs = filteredArgs.filter((_, i) => i !== forceIdx);
|
|
200
|
+
}
|
|
201
|
+
if (noDiffIdx !== -1) {
|
|
202
|
+
filteredArgs = filteredArgs.filter((a) => a !== '--no-diff');
|
|
203
|
+
}
|
|
196
204
|
const parsed = parseTextOption(filteredArgs);
|
|
197
205
|
if (!parsed.ref && !parsed.text) {
|
|
198
|
-
console.log(error('Usage: click <ref> or click -t "description" [--force]'));
|
|
206
|
+
console.log(error('Usage: click <ref> or click -t "description" [--force] [--no-diff]'));
|
|
199
207
|
return;
|
|
200
208
|
}
|
|
201
209
|
const action = {
|
|
@@ -207,10 +215,16 @@ export const runCommand = new Command('run')
|
|
|
207
215
|
action.text = parsed.text;
|
|
208
216
|
if (force)
|
|
209
217
|
action.force = true;
|
|
218
|
+
if (!disableDiff)
|
|
219
|
+
action.include_snapshot_diff = true;
|
|
210
220
|
const result = await client.executeAction(sessionId, action);
|
|
211
221
|
if (result.success) {
|
|
212
222
|
const target = parsed.ref ? normalizeRef(parsed.ref) : `"${parsed.text}"`;
|
|
213
223
|
console.log(success(`Clicked ${target}`));
|
|
224
|
+
if (result.snapshot_diff) {
|
|
225
|
+
console.log('');
|
|
226
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
227
|
+
}
|
|
214
228
|
}
|
|
215
229
|
else {
|
|
216
230
|
console.log(error(result.error || 'Click failed'));
|
|
@@ -491,6 +505,59 @@ export const runCommand = new Command('run')
|
|
|
491
505
|
const url = await client.getUrl(sessionId);
|
|
492
506
|
console.log(url);
|
|
493
507
|
},
|
|
508
|
+
evaluate: async (args, client, sessionId) => {
|
|
509
|
+
if (args.length === 0) {
|
|
510
|
+
console.log(error('Usage: evaluate <expression> [-r <ref>] [-t "description"]'));
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
513
|
+
// Parse options
|
|
514
|
+
const refIdx = args.findIndex((a) => a === '-r' || a === '--ref');
|
|
515
|
+
const textIdx = args.findIndex((a) => a === '-t' || a === '--text');
|
|
516
|
+
let ref;
|
|
517
|
+
let text;
|
|
518
|
+
let expressionParts = [...args];
|
|
519
|
+
if (refIdx !== -1 && args[refIdx + 1]) {
|
|
520
|
+
ref = normalizeRef(args[refIdx + 1]);
|
|
521
|
+
expressionParts = [...args.slice(0, refIdx), ...args.slice(refIdx + 2)];
|
|
522
|
+
}
|
|
523
|
+
if (textIdx !== -1 && args[textIdx + 1]) {
|
|
524
|
+
text = args[textIdx + 1];
|
|
525
|
+
const adjustedTextIdx = expressionParts.findIndex((a) => a === '-t' || a === '--text');
|
|
526
|
+
if (adjustedTextIdx !== -1) {
|
|
527
|
+
expressionParts = [
|
|
528
|
+
...expressionParts.slice(0, adjustedTextIdx),
|
|
529
|
+
...expressionParts.slice(adjustedTextIdx + 2),
|
|
530
|
+
];
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
const expression = expressionParts.join(' ');
|
|
534
|
+
if (!expression) {
|
|
535
|
+
console.log(error('Expression is required'));
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
const action = { type: 'evaluate', expression };
|
|
539
|
+
if (ref)
|
|
540
|
+
action.ref = ref;
|
|
541
|
+
if (text)
|
|
542
|
+
action.text = text;
|
|
543
|
+
const result = await client.executeAction(sessionId, action);
|
|
544
|
+
if (result.success) {
|
|
545
|
+
const data = result.data;
|
|
546
|
+
const value = data.result;
|
|
547
|
+
if (typeof value === 'string') {
|
|
548
|
+
console.log(value);
|
|
549
|
+
}
|
|
550
|
+
else if (value === null || value === undefined) {
|
|
551
|
+
console.log(String(value));
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
console.log(JSON.stringify(value, null, 2));
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
console.log(error(result.error || 'Evaluation failed'));
|
|
559
|
+
}
|
|
560
|
+
},
|
|
494
561
|
'get-blocks': async (_args, client, sessionId) => {
|
|
495
562
|
const blocks = await client.getBlocks(sessionId);
|
|
496
563
|
console.log(JSON.stringify(blocks, null, 2));
|
|
@@ -564,17 +631,55 @@ export const runCommand = new Command('run')
|
|
|
564
631
|
},
|
|
565
632
|
drag: async (args, client, sessionId) => {
|
|
566
633
|
// Parse: drag <ref> --target <target-ref> or --target-selector <sel>
|
|
634
|
+
// Also support: drag <ref> --delta-x <px> --delta-y <px>
|
|
567
635
|
// Also support: drag -t "text" --target <ref>
|
|
568
|
-
const
|
|
636
|
+
const noDiffIdx = args.indexOf('--no-diff');
|
|
637
|
+
const disableDiff = noDiffIdx !== -1;
|
|
638
|
+
const filteredArgs = disableDiff ? args.filter((a) => a !== '--no-diff') : args;
|
|
639
|
+
const parsed = parseTextOption(filteredArgs);
|
|
569
640
|
if (!parsed.ref && !parsed.text) {
|
|
570
|
-
console.log(error('Usage: drag <ref> --target <ref>
|
|
641
|
+
console.log(error('Usage: drag <ref> --target <ref> OR drag <ref> --delta-x <px> --delta-y <px> [--no-diff]'));
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
// Check for relative drag options
|
|
645
|
+
const deltaXIdx = parsed.remaining.indexOf('--delta-x');
|
|
646
|
+
const deltaYIdx = parsed.remaining.indexOf('--delta-y');
|
|
647
|
+
const isRelativeDrag = deltaXIdx !== -1 || deltaYIdx !== -1;
|
|
648
|
+
if (isRelativeDrag) {
|
|
649
|
+
const deltaX = deltaXIdx !== -1 ? parseInt(parsed.remaining[deltaXIdx + 1], 10) : 0;
|
|
650
|
+
const deltaY = deltaYIdx !== -1 ? parseInt(parsed.remaining[deltaYIdx + 1], 10) : 0;
|
|
651
|
+
const action = {
|
|
652
|
+
type: 'relative_drag_and_drop',
|
|
653
|
+
delta_x: deltaX,
|
|
654
|
+
delta_y: deltaY,
|
|
655
|
+
};
|
|
656
|
+
if (parsed.ref)
|
|
657
|
+
action.ref = normalizeRef(parsed.ref);
|
|
658
|
+
if (parsed.text)
|
|
659
|
+
action.text = parsed.text;
|
|
660
|
+
if (!disableDiff)
|
|
661
|
+
action.include_snapshot_diff = true;
|
|
662
|
+
const result = await client.executeAction(sessionId, action);
|
|
663
|
+
if (result.success) {
|
|
664
|
+
const source = parsed.ref
|
|
665
|
+
? `element ${normalizeRef(parsed.ref)}`
|
|
666
|
+
: `"${parsed.text}"`;
|
|
667
|
+
console.log(success(`Dragged ${source} by (${deltaX}, ${deltaY}) pixels`));
|
|
668
|
+
if (result.snapshot_diff) {
|
|
669
|
+
console.log('');
|
|
670
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
else {
|
|
674
|
+
console.log(error(result.error || 'Relative drag failed'));
|
|
675
|
+
}
|
|
571
676
|
return;
|
|
572
677
|
}
|
|
573
|
-
//
|
|
678
|
+
// Standard drag (existing code)
|
|
574
679
|
const targetIdx = parsed.remaining.indexOf('--target');
|
|
575
680
|
const targetSelectorIdx = parsed.remaining.indexOf('--target-selector');
|
|
576
681
|
if (targetIdx === -1 && targetSelectorIdx === -1) {
|
|
577
|
-
console.log(error('Either --target <ref
|
|
682
|
+
console.log(error('Either --target <ref>, --target-selector <selector>, or --delta-x/--delta-y is required'));
|
|
578
683
|
return;
|
|
579
684
|
}
|
|
580
685
|
const targetRef = targetIdx !== -1 && parsed.remaining[targetIdx + 1]
|
|
@@ -592,11 +697,17 @@ export const runCommand = new Command('run')
|
|
|
592
697
|
action.target_ref = targetRef;
|
|
593
698
|
if (targetSelector)
|
|
594
699
|
action.target_selector = targetSelector;
|
|
700
|
+
if (!disableDiff)
|
|
701
|
+
action.include_snapshot_diff = true;
|
|
595
702
|
const result = await client.executeAction(sessionId, action);
|
|
596
703
|
if (result.success) {
|
|
597
704
|
const source = parsed.ref ? normalizeRef(parsed.ref) : `"${parsed.text}"`;
|
|
598
705
|
const target = targetRef ? targetRef : `selector "${targetSelector}"`;
|
|
599
706
|
console.log(success(`Dragged ${source} to ${target}`));
|
|
707
|
+
if (result.snapshot_diff) {
|
|
708
|
+
console.log('');
|
|
709
|
+
console.log(formatSnapshotDiff(result.snapshot_diff));
|
|
710
|
+
}
|
|
600
711
|
}
|
|
601
712
|
else {
|
|
602
713
|
console.log(error(result.error || 'Drag failed'));
|
|
@@ -832,20 +943,31 @@ Available commands:
|
|
|
832
943
|
reload Reload current page
|
|
833
944
|
|
|
834
945
|
${colors.cyan}Actions:${colors.reset}
|
|
835
|
-
click <ref> [--force]
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
946
|
+
click <ref> [--force] [--no-diff]
|
|
947
|
+
Click element (--force bypasses actionability checks)
|
|
948
|
+
fill <ref> <value> [--no-diff]
|
|
949
|
+
Fill input field
|
|
950
|
+
type <ref> <text> [--no-diff]
|
|
951
|
+
Type text with delays
|
|
952
|
+
press <key> [--no-diff] Press keyboard key
|
|
953
|
+
hover <ref> [--no-diff] Hover over element
|
|
954
|
+
scroll <dir> [amount] [--no-diff]
|
|
955
|
+
Scroll page (up/down/left/right)
|
|
956
|
+
scroll-into-view <ref> [--no-diff]
|
|
957
|
+
Scroll element into view
|
|
958
|
+
select <ref> <value> [--no-diff]
|
|
959
|
+
Select dropdown option
|
|
960
|
+
check <ref> [--no-diff] Check checkbox
|
|
961
|
+
uncheck <ref> [--no-diff]
|
|
962
|
+
Uncheck checkbox
|
|
963
|
+
drag <ref> --target <ref> [--no-diff]
|
|
846
964
|
Drag element to target (--target-selector for CSS)
|
|
847
|
-
|
|
848
|
-
|
|
965
|
+
drag <ref> --delta-x <px> --delta-y <px> [--no-diff]
|
|
966
|
+
Drag element by pixel offset
|
|
967
|
+
mfa-totp [ref] <secret> [--no-diff]
|
|
968
|
+
Generate TOTP code (optionally fill into ref)
|
|
969
|
+
upload <ref> <file>... [--no-diff]
|
|
970
|
+
Upload file(s) to input
|
|
849
971
|
|
|
850
972
|
${colors.cyan}Wait Commands:${colors.reset}
|
|
851
973
|
wait <ms> Wait for duration
|
|
@@ -858,6 +980,7 @@ Available commands:
|
|
|
858
980
|
screenshot [file] [--url]
|
|
859
981
|
Save screenshot or return pre-signed URL
|
|
860
982
|
url Get current URL
|
|
983
|
+
evaluate <expr> Execute JavaScript (use -r <ref> for element scope)
|
|
861
984
|
get-blocks Get recorded test steps (JSON)
|
|
862
985
|
status Get session status (includes app_url)
|
|
863
986
|
|
|
@@ -878,7 +1001,8 @@ Available commands:
|
|
|
878
1001
|
fill -t "email input" user@example.com
|
|
879
1002
|
check -t "Accept terms checkbox"
|
|
880
1003
|
|
|
881
|
-
${colors.gray}Refs like "e3" or "@e3" identify elements in the snapshot
|
|
1004
|
+
${colors.gray}Refs like "e3" or "@e3" identify elements in the snapshot.
|
|
1005
|
+
Actions show snapshot diff by default. Use --no-diff for faster execution.${colors.reset}
|
|
882
1006
|
`);
|
|
883
1007
|
return Promise.resolve();
|
|
884
1008
|
}
|