appium-mcp 1.75.5 → 1.76.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/CHANGELOG.md +18 -0
- package/dist/persistence.d.ts +60 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +115 -0
- package/dist/persistence.js.map +1 -0
- package/dist/session-store.d.ts +2 -1
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js +31 -1
- package/dist/session-store.js.map +1 -1
- package/dist/tests/tools/gestures/ai-element.test.js +22 -1
- package/dist/tests/tools/gestures/ai-element.test.js.map +1 -1
- package/dist/tests/tools/gestures/swipe-scroll.test.js +8 -0
- package/dist/tests/tools/gestures/swipe-scroll.test.js.map +1 -1
- package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.d.ts +2 -0
- package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.d.ts.map +1 -0
- package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.js +94 -0
- package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.js.map +1 -0
- package/dist/tests/tools/llm-wording.test.d.ts +2 -0
- package/dist/tests/tools/llm-wording.test.d.ts.map +1 -0
- package/dist/tests/tools/llm-wording.test.js +85 -0
- package/dist/tests/tools/llm-wording.test.js.map +1 -0
- package/dist/tests/tools/session/device-info.test.js +9 -0
- package/dist/tests/tools/session/device-info.test.js.map +1 -1
- package/dist/tests/tools/session/file-transfer.test.js +9 -0
- package/dist/tests/tools/session/file-transfer.test.js.map +1 -1
- package/dist/tests/tools/session/session.test.js +12 -4
- package/dist/tests/tools/session/session.test.js.map +1 -1
- package/dist/tools/ai/ai.js +1 -1
- package/dist/tools/ai/ai.js.map +1 -1
- package/dist/tools/app-management/activate-app.js +1 -1
- package/dist/tools/app-management/activate-app.js.map +1 -1
- package/dist/tools/app-management/background-app.js +1 -1
- package/dist/tools/app-management/background-app.js.map +1 -1
- package/dist/tools/app-management/clear-app.js +1 -1
- package/dist/tools/app-management/clear-app.js.map +1 -1
- package/dist/tools/app-management/deep-link.js +1 -1
- package/dist/tools/app-management/deep-link.js.map +1 -1
- package/dist/tools/app-management/install-app.js +1 -1
- package/dist/tools/app-management/install-app.js.map +1 -1
- package/dist/tools/app-management/is-app-installed.js +1 -1
- package/dist/tools/app-management/is-app-installed.js.map +1 -1
- package/dist/tools/app-management/list-apps.js +1 -1
- package/dist/tools/app-management/list-apps.js.map +1 -1
- package/dist/tools/app-management/permissions.js +1 -1
- package/dist/tools/app-management/permissions.js.map +1 -1
- package/dist/tools/app-management/query-app-state.js +1 -1
- package/dist/tools/app-management/query-app-state.js.map +1 -1
- package/dist/tools/app-management/terminate-app.js +1 -1
- package/dist/tools/app-management/terminate-app.js.map +1 -1
- package/dist/tools/app-management/uninstall-app.js +1 -1
- package/dist/tools/app-management/uninstall-app.js.map +1 -1
- package/dist/tools/context/context.js +1 -1
- package/dist/tools/context/context.js.map +1 -1
- package/dist/tools/documentation/uploads/embeddings-Xenova-bge-small-en-v1.5.json +1 -1
- package/dist/tools/gestures/drag-and-drop.js +1 -1
- package/dist/tools/gestures/drag-and-drop.js.map +1 -1
- package/dist/tools/gestures/gesture.js +1 -1
- package/dist/tools/gestures/gesture.js.map +1 -1
- package/dist/tools/gestures/handlers/ai-element.d.ts +3 -0
- package/dist/tools/gestures/handlers/ai-element.d.ts.map +1 -1
- package/dist/tools/gestures/handlers/ai-element.js +12 -0
- package/dist/tools/gestures/handlers/ai-element.js.map +1 -1
- package/dist/tools/gestures/perform-actions.js +1 -1
- package/dist/tools/gestures/perform-actions.js.map +1 -1
- package/dist/tools/interactions/active-element.js +1 -1
- package/dist/tools/interactions/active-element.js.map +1 -1
- package/dist/tools/interactions/clipboard.js +2 -2
- package/dist/tools/interactions/clipboard.js.map +1 -1
- package/dist/tools/interactions/find.js +1 -1
- package/dist/tools/interactions/find.js.map +1 -1
- package/dist/tools/interactions/get-element-attribute.d.ts.map +1 -1
- package/dist/tools/interactions/get-element-attribute.js +6 -1
- package/dist/tools/interactions/get-element-attribute.js.map +1 -1
- package/dist/tools/interactions/get-page-source.js +1 -1
- package/dist/tools/interactions/get-page-source.js.map +1 -1
- package/dist/tools/interactions/get-text.d.ts.map +1 -1
- package/dist/tools/interactions/get-text.js +6 -1
- package/dist/tools/interactions/get-text.js.map +1 -1
- package/dist/tools/interactions/handle-alert.js +1 -1
- package/dist/tools/interactions/handle-alert.js.map +1 -1
- package/dist/tools/interactions/keyboard.js +2 -2
- package/dist/tools/interactions/keyboard.js.map +1 -1
- package/dist/tools/interactions/orientation.js +1 -1
- package/dist/tools/interactions/orientation.js.map +1 -1
- package/dist/tools/interactions/press-key.js +1 -1
- package/dist/tools/interactions/press-key.js.map +1 -1
- package/dist/tools/interactions/screen-recording.js +1 -1
- package/dist/tools/interactions/screen-recording.js.map +1 -1
- package/dist/tools/interactions/set-value.d.ts.map +1 -1
- package/dist/tools/interactions/set-value.js +8 -1
- package/dist/tools/interactions/set-value.js.map +1 -1
- package/dist/tools/interactions/window-size.js +1 -1
- package/dist/tools/interactions/window-size.js.map +1 -1
- package/dist/tools/session/attach-session.d.ts.map +1 -1
- package/dist/tools/session/attach-session.js +21 -19
- package/dist/tools/session/attach-session.js.map +1 -1
- package/dist/tools/session/create-session.d.ts +2 -6
- package/dist/tools/session/create-session.d.ts.map +1 -1
- package/dist/tools/session/create-session.js +4 -7
- package/dist/tools/session/create-session.js.map +1 -1
- package/dist/tools/session/device-control.js +1 -1
- package/dist/tools/session/device-control.js.map +1 -1
- package/dist/tools/session/device-info.js +1 -1
- package/dist/tools/session/device-info.js.map +1 -1
- package/dist/tools/session/driver-settings.js +2 -2
- package/dist/tools/session/driver-settings.js.map +1 -1
- package/dist/tools/session/file-transfer.js +1 -1
- package/dist/tools/session/file-transfer.js.map +1 -1
- package/dist/tools/session/geolocation.js +3 -3
- package/dist/tools/session/geolocation.js.map +1 -1
- package/dist/tools/test-generation/generate-tests.d.ts.map +1 -1
- package/dist/tools/test-generation/generate-tests.js +6 -4
- package/dist/tools/test-generation/generate-tests.js.map +1 -1
- package/dist/tools/test-generation/locators.js +1 -1
- package/dist/tools/test-generation/locators.js.map +1 -1
- package/dist/tools/tool-response.d.ts +4 -2
- package/dist/tools/tool-response.d.ts.map +1 -1
- package/dist/tools/tool-response.js +60 -3
- package/dist/tools/tool-response.js.map +1 -1
- package/dist/utils/paths.d.ts +15 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +21 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/url.d.ts +22 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +34 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +2 -2
- package/server.json +2 -2
- package/src/persistence.ts +151 -0
- package/src/resources/submodules.zip +0 -0
- package/src/session-store.ts +38 -1
- package/src/tools/ai/ai.ts +1 -1
- package/src/tools/app-management/activate-app.ts +1 -1
- package/src/tools/app-management/background-app.ts +1 -1
- package/src/tools/app-management/clear-app.ts +1 -1
- package/src/tools/app-management/deep-link.ts +1 -1
- package/src/tools/app-management/install-app.ts +1 -1
- package/src/tools/app-management/is-app-installed.ts +1 -1
- package/src/tools/app-management/list-apps.ts +1 -1
- package/src/tools/app-management/permissions.ts +1 -1
- package/src/tools/app-management/query-app-state.ts +1 -1
- package/src/tools/app-management/terminate-app.ts +1 -1
- package/src/tools/app-management/uninstall-app.ts +1 -1
- package/src/tools/context/context.ts +1 -1
- package/src/tools/gestures/drag-and-drop.ts +1 -1
- package/src/tools/gestures/gesture.ts +1 -1
- package/src/tools/gestures/handlers/ai-element.ts +18 -0
- package/src/tools/gestures/perform-actions.ts +1 -1
- package/src/tools/interactions/active-element.ts +1 -1
- package/src/tools/interactions/clipboard.ts +2 -2
- package/src/tools/interactions/find.ts +1 -1
- package/src/tools/interactions/get-element-attribute.ts +7 -1
- package/src/tools/interactions/get-page-source.ts +1 -1
- package/src/tools/interactions/get-text.ts +7 -1
- package/src/tools/interactions/handle-alert.ts +1 -1
- package/src/tools/interactions/keyboard.ts +2 -2
- package/src/tools/interactions/orientation.ts +1 -1
- package/src/tools/interactions/press-key.ts +1 -1
- package/src/tools/interactions/screen-recording.ts +1 -1
- package/src/tools/interactions/set-value.ts +11 -1
- package/src/tools/interactions/window-size.ts +1 -1
- package/src/tools/session/attach-session.ts +28 -20
- package/src/tools/session/create-session.ts +11 -8
- package/src/tools/session/device-control.ts +1 -1
- package/src/tools/session/device-info.ts +1 -1
- package/src/tools/session/driver-settings.ts +2 -2
- package/src/tools/session/file-transfer.ts +1 -1
- package/src/tools/session/geolocation.ts +3 -3
- package/src/tools/test-generation/generate-tests.ts +6 -4
- package/src/tools/test-generation/locators.ts +1 -1
- package/src/tools/tool-response.ts +88 -4
- package/src/utils/paths.ts +22 -0
- package/src/utils/url.ts +43 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## [1.76.0](https://github.com/appium/appium-mcp/compare/v1.75.7...v1.76.0) (2026-05-25)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* **session:** persist remote sessions and auto-rehydrate on cache with APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH ([#349](https://github.com/appium/appium-mcp/issues/349)) ([81c605e](https://github.com/appium/appium-mcp/commit/81c605eb848aeda7f3813b003c2acf7376dfba85)), closes [#9](https://github.com/appium/appium-mcp/issues/9) [#4](https://github.com/appium/appium-mcp/issues/4) [#5](https://github.com/appium/appium-mcp/issues/5) [#7](https://github.com/appium/appium-mcp/issues/7) [#1](https://github.com/appium/appium-mcp/issues/1) [#2](https://github.com/appium/appium-mcp/issues/2) [#3](https://github.com/appium/appium-mcp/issues/3) [#6](https://github.com/appium/appium-mcp/issues/6)
|
|
6
|
+
|
|
7
|
+
## [1.75.7](https://github.com/appium/appium-mcp/compare/v1.75.6...v1.75.7) (2026-05-23)
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* apply npm pkg fix to tweak package.json ([#362](https://github.com/appium/appium-mcp/issues/362)) ([412cae1](https://github.com/appium/appium-mcp/commit/412cae1f722d64ee3b73a2f3f050e022607fe0c1))
|
|
12
|
+
|
|
13
|
+
## [1.75.6](https://github.com/appium/appium-mcp/compare/v1.75.5...v1.75.6) (2026-05-23)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **interactions:** reject ai-element tokens in get and set tools ([#358](https://github.com/appium/appium-mcp/issues/358)) ([ac630a3](https://github.com/appium/appium-mcp/commit/ac630a3881bc58e262bac73e8fc687e13e57c286))
|
|
18
|
+
|
|
1
19
|
## [1.75.5](https://github.com/appium/appium-mcp/compare/v1.75.4...v1.75.5) (2026-05-23)
|
|
2
20
|
|
|
3
21
|
### Bug Fixes
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { SessionCapabilities, SessionOwnership } from './session-store.js';
|
|
2
|
+
/**
|
|
3
|
+
* On-disk representation of a remote Appium session.
|
|
4
|
+
*
|
|
5
|
+
* Persistence allows MCP processes that get recycled by their host (for
|
|
6
|
+
* example, stdio hosts that respawn the server between tool calls) to
|
|
7
|
+
* reattach to the underlying session without losing it.
|
|
8
|
+
*
|
|
9
|
+
* Only sessions that have a `remoteServerUrl` are eligible; local/embedded
|
|
10
|
+
* sessions cannot be rehydrated because their driver instance dies with the
|
|
11
|
+
* process.
|
|
12
|
+
*/
|
|
13
|
+
export interface PersistedSession {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
remoteServerUrl: string;
|
|
16
|
+
capabilities: SessionCapabilities;
|
|
17
|
+
platform: string | null;
|
|
18
|
+
automationName: string | null;
|
|
19
|
+
deviceName: string | null;
|
|
20
|
+
ownership: SessionOwnership;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Return the directory where persisted sessions live, or `null` when the
|
|
24
|
+
* feature is disabled.
|
|
25
|
+
*
|
|
26
|
+
* Configured by the `APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH` environment
|
|
27
|
+
* variable: set the variable to a path to opt in. When unset, persistence is
|
|
28
|
+
* dormant and no files are read or written.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getPersistenceDir(): string | null;
|
|
31
|
+
/**
|
|
32
|
+
* Convenience boolean for callers that only need to know whether the feature
|
|
33
|
+
* is enabled; the actual path lookup is done by `getPersistenceDir`.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isSessionPersistenceEnabled(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Read every persisted session from the on-disk directory.
|
|
38
|
+
*
|
|
39
|
+
* Returns an empty list when the feature is disabled, when the directory
|
|
40
|
+
* does not exist, or when reads fail. Files that fail to parse are silently
|
|
41
|
+
* skipped (logged at warn level) so a single corrupt file cannot wedge the
|
|
42
|
+
* whole feature.
|
|
43
|
+
*/
|
|
44
|
+
export declare function readAllPersistedSessions(): Promise<PersistedSession[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Write a single persisted session atomically.
|
|
47
|
+
*
|
|
48
|
+
* Writes to a sibling `.tmp` file first and renames into place so a partial
|
|
49
|
+
* write cannot leave the on-disk entry corrupt. Concurrent writes to the
|
|
50
|
+
* same session id still race on the final rename, but each session lives in
|
|
51
|
+
* its own file so writes to *different* sessions never collide.
|
|
52
|
+
*/
|
|
53
|
+
export declare function writePersistedSession(entry: PersistedSession): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Remove a single persisted session file.
|
|
56
|
+
*
|
|
57
|
+
* No-op when the feature is disabled or the file does not exist.
|
|
58
|
+
*/
|
|
59
|
+
export declare function removePersistedSession(sessionId: string): Promise<void>;
|
|
60
|
+
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEhF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,mBAAmB,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAErD;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAiC5E;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7E"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { fs } from '@appium/support';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import log from './logger.js';
|
|
4
|
+
import { resolveAppiumMcpSessionsDir } from './utils/paths.js';
|
|
5
|
+
/**
|
|
6
|
+
* Return the directory where persisted sessions live, or `null` when the
|
|
7
|
+
* feature is disabled.
|
|
8
|
+
*
|
|
9
|
+
* Configured by the `APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH` environment
|
|
10
|
+
* variable: set the variable to a path to opt in. When unset, persistence is
|
|
11
|
+
* dormant and no files are read or written.
|
|
12
|
+
*/
|
|
13
|
+
export function getPersistenceDir() {
|
|
14
|
+
return resolveAppiumMcpSessionsDir();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Convenience boolean for callers that only need to know whether the feature
|
|
18
|
+
* is enabled; the actual path lookup is done by `getPersistenceDir`.
|
|
19
|
+
*/
|
|
20
|
+
export function isSessionPersistenceEnabled() {
|
|
21
|
+
return getPersistenceDir() !== null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read every persisted session from the on-disk directory.
|
|
25
|
+
*
|
|
26
|
+
* Returns an empty list when the feature is disabled, when the directory
|
|
27
|
+
* does not exist, or when reads fail. Files that fail to parse are silently
|
|
28
|
+
* skipped (logged at warn level) so a single corrupt file cannot wedge the
|
|
29
|
+
* whole feature.
|
|
30
|
+
*/
|
|
31
|
+
export async function readAllPersistedSessions() {
|
|
32
|
+
const dir = getPersistenceDir();
|
|
33
|
+
if (!dir) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
if (!(await fs.hasAccess(dir))) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
let entries;
|
|
40
|
+
try {
|
|
41
|
+
entries = await fs.readdir(dir);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
log.warn(`Failed to read persisted sessions directory: ${err.message}`);
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const jsonFiles = entries.filter((name) => name.endsWith('.json'));
|
|
48
|
+
const parsed = await Promise.all(jsonFiles.map(async (name) => {
|
|
49
|
+
const filePath = path.join(dir, name);
|
|
50
|
+
try {
|
|
51
|
+
const raw = await fs.readFile(filePath, 'utf8');
|
|
52
|
+
return JSON.parse(raw);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
log.warn(`Skipping persisted session file ${name}: ${err.message}`);
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
return parsed.filter((entry) => entry !== null);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Write a single persisted session atomically.
|
|
63
|
+
*
|
|
64
|
+
* Writes to a sibling `.tmp` file first and renames into place so a partial
|
|
65
|
+
* write cannot leave the on-disk entry corrupt. Concurrent writes to the
|
|
66
|
+
* same session id still race on the final rename, but each session lives in
|
|
67
|
+
* its own file so writes to *different* sessions never collide.
|
|
68
|
+
*/
|
|
69
|
+
export async function writePersistedSession(entry) {
|
|
70
|
+
const dir = getPersistenceDir();
|
|
71
|
+
if (!dir) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const target = sessionFilePath(entry.sessionId, dir);
|
|
75
|
+
const tmp = `${target}.${process.pid}.tmp`;
|
|
76
|
+
try {
|
|
77
|
+
await fs.mkdir(dir, { recursive: true });
|
|
78
|
+
await fs.writeFile(tmp, JSON.stringify(entry, null, 2), 'utf8');
|
|
79
|
+
await fs.rename(tmp, target);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
log.warn(`Failed to persist session ${entry.sessionId}: ${err.message}`);
|
|
83
|
+
// Best-effort cleanup of the tmp file. Ignore if it does not exist.
|
|
84
|
+
try {
|
|
85
|
+
await fs.unlink(tmp);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// ignore
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Remove a single persisted session file.
|
|
94
|
+
*
|
|
95
|
+
* No-op when the feature is disabled or the file does not exist.
|
|
96
|
+
*/
|
|
97
|
+
export async function removePersistedSession(sessionId) {
|
|
98
|
+
const dir = getPersistenceDir();
|
|
99
|
+
if (!dir) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
await fs.unlink(sessionFilePath(sessionId, dir));
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
if (err.code === 'ENOENT') {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
log.warn(`Failed to remove persisted session ${sessionId}: ${err.message}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function sessionFilePath(sessionId, dir) {
|
|
113
|
+
return path.join(dir, `${sessionId}.json`);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAwB/D;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,iBAAiB,EAAE,KAAK,IAAI,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,gDAAiD,GAAa,CAAC,OAAO,EAAE,CACzE,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAoC,EAAE;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CACN,mCAAmC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CACrE,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAuB;IAEvB,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,6BAA6B,KAAK,CAAC,SAAS,KAAM,GAAa,CAAC,OAAO,EAAE,CAC1E,CAAC;QACF,oEAAoE;QACpE,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB;IAC5D,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CACN,sCAAsC,SAAS,KAC5C,GAAa,CAAC,OACjB,EAAE,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,GAAW;IACrD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/session-store.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ interface SessionInfo {
|
|
|
18
18
|
isDeletingSession: boolean;
|
|
19
19
|
ownership: SessionOwnership;
|
|
20
20
|
metadata: SessionMetadata;
|
|
21
|
+
remoteServerUrl?: string;
|
|
21
22
|
}
|
|
22
23
|
export declare const PLATFORM: {
|
|
23
24
|
android: string;
|
|
@@ -57,7 +58,7 @@ export declare function isAndroidUiautomator2DriverSession(driver: NullableDrive
|
|
|
57
58
|
* @returns `true` if `driver` is an `XCUITestDriver`.
|
|
58
59
|
*/
|
|
59
60
|
export declare function isXCUITestDriverSession(driver: NullableDriverInstance): driver is XCUITestDriver;
|
|
60
|
-
export declare function setSession(d: DriverInstance, id: string | null, capabilities?: SessionCapabilities, ownership?: SessionOwnership): void;
|
|
61
|
+
export declare function setSession(d: DriverInstance, id: string | null, capabilities?: SessionCapabilities, ownership?: SessionOwnership, remoteServerUrl?: string): void;
|
|
61
62
|
export declare function getDriver(sessionId?: string): NullableDriverInstance;
|
|
62
63
|
export declare function getSessionId(): string | null;
|
|
63
64
|
export declare function listSessions(): Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"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"}
|
package/dist/session-store.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
|
|
2
2
|
import { XCUITestDriver } from 'appium-xcuitest-driver';
|
|
3
3
|
import log from './logger.js';
|
|
4
|
+
import { removePersistedSession, writePersistedSession, } from './persistence.js';
|
|
4
5
|
/**
|
|
5
6
|
* In-memory store for active Appium sessions and their associated drivers.
|
|
6
7
|
*/
|
|
@@ -61,7 +62,7 @@ export function isXCUITestDriverSession(driver) {
|
|
|
61
62
|
return (driver instanceof XCUITestDriver ||
|
|
62
63
|
driver?.constructor?.name === 'XCUITestDriver');
|
|
63
64
|
}
|
|
64
|
-
export function setSession(d, id, capabilities = {}, ownership = 'owned') {
|
|
65
|
+
export function setSession(d, id, capabilities = {}, ownership = 'owned', remoteServerUrl) {
|
|
65
66
|
if (!id) {
|
|
66
67
|
activeSessionId = null;
|
|
67
68
|
return;
|
|
@@ -85,8 +86,20 @@ export function setSession(d, id, capabilities = {}, ownership = 'owned') {
|
|
|
85
86
|
isDeletingSession: false,
|
|
86
87
|
ownership,
|
|
87
88
|
metadata,
|
|
89
|
+
remoteServerUrl,
|
|
88
90
|
});
|
|
89
91
|
activeSessionId = id;
|
|
92
|
+
if (remoteServerUrl) {
|
|
93
|
+
void writePersistedSession({
|
|
94
|
+
sessionId: id,
|
|
95
|
+
remoteServerUrl,
|
|
96
|
+
capabilities,
|
|
97
|
+
platform: metadata.platform,
|
|
98
|
+
automationName: metadata.automationName,
|
|
99
|
+
deviceName: metadata.deviceName,
|
|
100
|
+
ownership,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
90
103
|
}
|
|
91
104
|
export function getDriver(sessionId) {
|
|
92
105
|
const id = sessionId ?? activeSessionId;
|
|
@@ -195,6 +208,7 @@ export function detachSession(sessionId) {
|
|
|
195
208
|
}
|
|
196
209
|
sessions.delete(id);
|
|
197
210
|
activeSessionId = selectNextActiveSessionId(id);
|
|
211
|
+
void removePersistedSession(id);
|
|
198
212
|
log.info(`Session ${id} detached successfully.`);
|
|
199
213
|
}
|
|
200
214
|
export async function safeDeleteSession(sessionId) {
|
|
@@ -222,6 +236,7 @@ export async function safeDeleteSession(sessionId) {
|
|
|
222
236
|
// Clear the session from store
|
|
223
237
|
sessions.delete(id);
|
|
224
238
|
activeSessionId = selectNextActiveSessionId(id);
|
|
239
|
+
void removePersistedSession(id);
|
|
225
240
|
log.info(`Session ${id} deleted successfully.`);
|
|
226
241
|
return true;
|
|
227
242
|
}
|
|
@@ -282,6 +297,21 @@ export const getPlatformName = (driver) => {
|
|
|
282
297
|
if (session && session.platform) {
|
|
283
298
|
return session.platform;
|
|
284
299
|
}
|
|
300
|
+
// Fallback: check by sessionId directly on the map (covers attached sessions
|
|
301
|
+
// where isAndroid/isIOS flags aren't set on the raw webdriver Client).
|
|
302
|
+
if (client.sessionId) {
|
|
303
|
+
const info = sessions.get(client.sessionId);
|
|
304
|
+
const platformName = info?.metadata.platform;
|
|
305
|
+
if (platformName) {
|
|
306
|
+
if (/android/i.test(platformName)) {
|
|
307
|
+
return PLATFORM.android;
|
|
308
|
+
}
|
|
309
|
+
if (/ios/i.test(platformName)) {
|
|
310
|
+
return PLATFORM.ios;
|
|
311
|
+
}
|
|
312
|
+
return platformName;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
285
315
|
throw new Error('Unknown driver type');
|
|
286
316
|
};
|
|
287
317
|
//# sourceMappingURL=session-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,GAAG,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { describe, test, expect, jest, beforeEach } from '@jest/globals';
|
|
2
|
+
jest.unstable_mockModule('../../../persistence', () => ({
|
|
3
|
+
isSessionPersistenceEnabled: jest.fn(() => false),
|
|
4
|
+
readAllPersistedSessions: jest.fn(async () => []),
|
|
5
|
+
removePersistedSession: jest.fn(async () => { }),
|
|
6
|
+
writePersistedSession: jest.fn(async () => { }),
|
|
7
|
+
}));
|
|
2
8
|
jest.unstable_mockModule('../../../session-store', () => ({
|
|
9
|
+
listPersistedSessions: jest.fn(() => []),
|
|
10
|
+
removePersistedSession: jest.fn(),
|
|
11
|
+
setSession: jest.fn(),
|
|
3
12
|
getDriver: jest.fn(),
|
|
4
13
|
getPlatformName: jest.fn(),
|
|
5
14
|
PLATFORM: { ios: 'iOS', android: 'Android' },
|
|
@@ -7,7 +16,7 @@ jest.unstable_mockModule('../../../session-store', () => ({
|
|
|
7
16
|
jest.unstable_mockModule('../../../command', () => ({
|
|
8
17
|
getElementRect: jest.fn(),
|
|
9
18
|
}));
|
|
10
|
-
const { AI_ELEMENT_PREFIX, isAiElementUUID, parseAiElement, resolveTargetRect, } = await import('../../../tools/gestures/handlers/ai-element.js');
|
|
19
|
+
const { AI_ELEMENT_PREFIX, AI_WEBDRIVER_REJECTION, isAiElementUUID, parseAiElement, resolveTargetRect, aiElementWebDriverRejectionIfNeeded, } = await import('../../../tools/gestures/handlers/ai-element.js');
|
|
11
20
|
const fakeDriver = {};
|
|
12
21
|
describe('isAiElementUUID', () => {
|
|
13
22
|
test('returns true for ai-element UUIDs', () => {
|
|
@@ -20,6 +29,18 @@ describe('isAiElementUUID', () => {
|
|
|
20
29
|
expect(isAiElementUUID(undefined)).toBe(false);
|
|
21
30
|
});
|
|
22
31
|
});
|
|
32
|
+
describe('aiElementWebDriverRejectionIfNeeded', () => {
|
|
33
|
+
test('returns isError for ai-element UUIDs', () => {
|
|
34
|
+
const result = aiElementWebDriverRejectionIfNeeded('ai-element:100,200:50,150,150,250');
|
|
35
|
+
expect(result?.isError).toBe(true);
|
|
36
|
+
const block = result?.content[0];
|
|
37
|
+
expect(block && 'text' in block && block.text).toBe(AI_WEBDRIVER_REJECTION);
|
|
38
|
+
});
|
|
39
|
+
test('returns undefined for real element ids and missing values', () => {
|
|
40
|
+
expect(aiElementWebDriverRejectionIfNeeded('aaaaaaaa-bbbb-cccc-dddd')).toBeUndefined();
|
|
41
|
+
expect(aiElementWebDriverRejectionIfNeeded(undefined)).toBeUndefined();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
23
44
|
describe('parseAiElement', () => {
|
|
24
45
|
test('parses centre + bbox into a rect that spans the bbox', () => {
|
|
25
46
|
const result = parseAiElement('ai-element:200,300:100,200,300,400');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-element.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/gestures/ai-element.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGzE,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;IACpB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;IAC1B,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE;CAC7C,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClD,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,MAAM,EACJ,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ai-element.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/gestures/ai-element.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { describe, test, expect, jest } from '@jest/globals';
|
|
2
|
+
jest.unstable_mockModule('../../../persistence', () => ({
|
|
3
|
+
isSessionPersistenceEnabled: jest.fn(() => false),
|
|
4
|
+
getPersistenceDir: jest.fn(() => null),
|
|
5
|
+
readAllPersistedSessions: jest.fn(async () => []),
|
|
6
|
+
removePersistedSession: jest.fn(async () => { }),
|
|
7
|
+
writePersistedSession: jest.fn(async () => { }),
|
|
8
|
+
}));
|
|
2
9
|
jest.unstable_mockModule('../../../session-store', () => ({
|
|
3
10
|
getDriver: jest.fn(),
|
|
4
11
|
getPlatformName: jest.fn(),
|
|
5
12
|
PLATFORM: { ios: 'iOS', android: 'Android' },
|
|
13
|
+
setSession: jest.fn(),
|
|
6
14
|
}));
|
|
7
15
|
jest.unstable_mockModule('../../../command', () => ({
|
|
8
16
|
execute: jest.fn(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swipe-scroll.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/gestures/swipe-scroll.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE7D,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;IACpB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;IAC1B,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"swipe-scroll.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/gestures/swipe-scroll.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webdriver-ai-element-rejection.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/tools/interactions/webdriver-ai-element-rejection.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { describe, test, expect, jest, beforeEach } from '@jest/globals';
|
|
2
|
+
jest.unstable_mockModule('../../../persistence.js', () => ({
|
|
3
|
+
isSessionPersistenceEnabled: jest.fn(() => false),
|
|
4
|
+
getPersistenceDir: jest.fn(() => null),
|
|
5
|
+
readAllPersistedSessions: jest.fn(async () => []),
|
|
6
|
+
removePersistedSession: jest.fn(async () => { }),
|
|
7
|
+
writePersistedSession: jest.fn(async () => { }),
|
|
8
|
+
}));
|
|
9
|
+
jest.unstable_mockModule('../../../session-store.js', () => ({
|
|
10
|
+
getDriver: jest.fn(),
|
|
11
|
+
setSession: jest.fn(),
|
|
12
|
+
}));
|
|
13
|
+
jest.unstable_mockModule('../../../command.js', () => ({
|
|
14
|
+
getElementRect: jest.fn(),
|
|
15
|
+
setValue: jest.fn(),
|
|
16
|
+
getElementText: jest.fn(),
|
|
17
|
+
getElementAttribute: jest.fn(),
|
|
18
|
+
}));
|
|
19
|
+
const { getDriver } = await import('../../../session-store.js');
|
|
20
|
+
const { setValue, getElementText, getElementAttribute } = await import('../../../command.js');
|
|
21
|
+
const { AI_WEBDRIVER_REJECTION } = await import('../../../tools/gestures/handlers/ai-element.js');
|
|
22
|
+
const mockGetDriver = getDriver;
|
|
23
|
+
const mockSetValue = setValue;
|
|
24
|
+
const mockGetElementText = getElementText;
|
|
25
|
+
const mockGetElementAttribute = getElementAttribute;
|
|
26
|
+
const AI_UUID = 'ai-element:100,200:50,150,150,250';
|
|
27
|
+
const REAL_UUID = '11111111-2222-3333-4444-555555555555';
|
|
28
|
+
function textFromResult(result) {
|
|
29
|
+
const block = result.content[0];
|
|
30
|
+
return block && 'text' in block ? block.text : undefined;
|
|
31
|
+
}
|
|
32
|
+
describe('interaction tools and ai-element tokens', () => {
|
|
33
|
+
const mockServer = { addTool: jest.fn() };
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
mockGetDriver.mockReturnValue({});
|
|
36
|
+
mockSetValue.mockReset();
|
|
37
|
+
mockGetElementText.mockReset();
|
|
38
|
+
mockGetElementAttribute.mockReset();
|
|
39
|
+
});
|
|
40
|
+
async function loadTool(modulePath) {
|
|
41
|
+
const mod = await import(modulePath);
|
|
42
|
+
mod.default(mockServer);
|
|
43
|
+
return mockServer.addTool.mock.calls.at(-1)?.[0];
|
|
44
|
+
}
|
|
45
|
+
async function runTool(tool, args) {
|
|
46
|
+
return tool.execute(args, undefined);
|
|
47
|
+
}
|
|
48
|
+
test('set_value rejects ai-element without w3cActions', async () => {
|
|
49
|
+
const tool = await loadTool('../../../tools/interactions/set-value.js');
|
|
50
|
+
const result = await runTool(tool, { elementUUID: AI_UUID, text: 'hello' });
|
|
51
|
+
expect(result.isError).toBe(true);
|
|
52
|
+
expect(textFromResult(result)).toBe(AI_WEBDRIVER_REJECTION);
|
|
53
|
+
expect(mockSetValue).not.toHaveBeenCalled();
|
|
54
|
+
});
|
|
55
|
+
test('set_value still works with w3cActions', async () => {
|
|
56
|
+
const tool = await loadTool('../../../tools/interactions/set-value.js');
|
|
57
|
+
mockSetValue.mockResolvedValueOnce(undefined);
|
|
58
|
+
const result = await runTool(tool, {
|
|
59
|
+
elementUUID: AI_UUID,
|
|
60
|
+
text: 'hello',
|
|
61
|
+
w3cActions: true,
|
|
62
|
+
});
|
|
63
|
+
expect(result.isError).toBeUndefined();
|
|
64
|
+
expect(mockSetValue).toHaveBeenCalled();
|
|
65
|
+
});
|
|
66
|
+
test('set_value accepts a normal element id', async () => {
|
|
67
|
+
const tool = await loadTool('../../../tools/interactions/set-value.js');
|
|
68
|
+
mockSetValue.mockResolvedValueOnce(undefined);
|
|
69
|
+
const result = await runTool(tool, {
|
|
70
|
+
elementUUID: REAL_UUID,
|
|
71
|
+
text: 'hello',
|
|
72
|
+
});
|
|
73
|
+
expect(result.isError).toBeUndefined();
|
|
74
|
+
expect(mockSetValue).toHaveBeenCalledWith(expect.anything(), REAL_UUID, 'hello', undefined);
|
|
75
|
+
});
|
|
76
|
+
test('get_text rejects ai-element', async () => {
|
|
77
|
+
const tool = await loadTool('../../../tools/interactions/get-text.js');
|
|
78
|
+
const result = await runTool(tool, { elementUUID: AI_UUID });
|
|
79
|
+
expect(result.isError).toBe(true);
|
|
80
|
+
expect(textFromResult(result)).toBe(AI_WEBDRIVER_REJECTION);
|
|
81
|
+
expect(mockGetElementText).not.toHaveBeenCalled();
|
|
82
|
+
});
|
|
83
|
+
test('get_element_attribute rejects ai-element', async () => {
|
|
84
|
+
const tool = await loadTool('../../../tools/interactions/get-element-attribute.js');
|
|
85
|
+
const result = await runTool(tool, {
|
|
86
|
+
elementUUID: AI_UUID,
|
|
87
|
+
attribute: 'enabled',
|
|
88
|
+
});
|
|
89
|
+
expect(result.isError).toBe(true);
|
|
90
|
+
expect(textFromResult(result)).toBe(AI_WEBDRIVER_REJECTION);
|
|
91
|
+
expect(mockGetElementAttribute).not.toHaveBeenCalled();
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=webdriver-ai-element-rejection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webdriver-ai-element-rejection.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/interactions/webdriver-ai-element-rejection.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-wording.test.d.ts","sourceRoot":"","sources":["../../../src/tests/tools/llm-wording.test.ts"],"names":[],"mappings":""}
|