appium-mcp 1.7.5 → 1.8.1
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/.github/workflows/ci.yml +3 -0
- package/CHANGELOG.md +22 -0
- package/dist/devicemanager/adb-manager.d.ts +1 -0
- package/dist/devicemanager/adb-manager.d.ts.map +1 -0
- package/dist/devicemanager/adb-manager.js +5 -5
- package/dist/devicemanager/adb-manager.js.map +1 -1
- package/dist/devicemanager/ios-manager.d.ts +1 -0
- package/dist/devicemanager/ios-manager.d.ts.map +1 -0
- package/dist/devicemanager/ios-manager.js +2 -0
- package/dist/devicemanager/ios-manager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/locators/element-filter.d.ts +1 -0
- package/dist/locators/element-filter.d.ts.map +1 -0
- package/dist/locators/generate-all-locators.d.ts +1 -0
- package/dist/locators/generate-all-locators.d.ts.map +1 -0
- package/dist/locators/locator-generation.d.ts +1 -0
- package/dist/locators/locator-generation.d.ts.map +1 -0
- package/dist/locators/source-parsing.d.ts +1 -0
- package/dist/locators/source-parsing.d.ts.map +1 -0
- package/dist/logger.d.ts +2 -1
- package/dist/logger.d.ts.map +1 -0
- package/dist/resources/index.d.ts +1 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/java/template.d.ts +1 -0
- package/dist/resources/java/template.d.ts.map +1 -0
- package/dist/schema.d.ts +1 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/scripts/simple-index-documentation.d.ts +1 -0
- package/dist/scripts/simple-index-documentation.d.ts.map +1 -0
- package/dist/scripts/simple-query-documentation.d.ts +1 -0
- package/dist/scripts/simple-query-documentation.d.ts.map +1 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/session-store.d.ts +16 -2
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +21 -0
- package/dist/session-store.js.map +1 -1
- package/dist/tests/__mocks__/@appium/support.d.ts +1 -0
- package/dist/tests/__mocks__/@appium/support.d.ts.map +1 -0
- package/dist/tests/generate-all-locators.test.d.ts +1 -0
- package/dist/tests/generate-all-locators.test.d.ts.map +1 -0
- package/dist/tests/screenshot.test.d.ts +1 -0
- package/dist/tests/screenshot.test.d.ts.map +1 -0
- package/dist/tests/screenshot.test.js +6 -5
- package/dist/tests/screenshot.test.js.map +1 -1
- package/dist/tests/test-setup-wda.d.ts +1 -0
- package/dist/tests/test-setup-wda.d.ts.map +1 -0
- package/dist/tests/test-setup-wda.js +1 -3
- package/dist/tests/test-setup-wda.js.map +1 -1
- package/dist/tools/app-management/activate-app.d.ts +2 -1
- package/dist/tools/app-management/activate-app.d.ts.map +1 -0
- package/dist/tools/app-management/activate-app.js.map +1 -1
- package/dist/tools/app-management/install-app.d.ts +2 -1
- package/dist/tools/app-management/install-app.d.ts.map +1 -0
- package/dist/tools/app-management/install-app.js +6 -2
- package/dist/tools/app-management/install-app.js.map +1 -1
- package/dist/tools/app-management/list-apps.d.ts +2 -1
- package/dist/tools/app-management/list-apps.d.ts.map +1 -0
- package/dist/tools/app-management/list-apps.js +4 -1
- package/dist/tools/app-management/list-apps.js.map +1 -1
- package/dist/tools/app-management/terminate-app.d.ts +2 -1
- package/dist/tools/app-management/terminate-app.d.ts.map +1 -0
- package/dist/tools/app-management/terminate-app.js +6 -2
- package/dist/tools/app-management/terminate-app.js.map +1 -1
- package/dist/tools/app-management/uninstall-app.d.ts +2 -1
- package/dist/tools/app-management/uninstall-app.d.ts.map +1 -0
- package/dist/tools/app-management/uninstall-app.js +6 -2
- package/dist/tools/app-management/uninstall-app.js.map +1 -1
- package/dist/tools/context/get-contexts.d.ts +2 -1
- package/dist/tools/context/get-contexts.d.ts.map +1 -0
- package/dist/tools/context/get-contexts.js +4 -1
- package/dist/tools/context/get-contexts.js.map +1 -1
- package/dist/tools/context/switch-context.d.ts +2 -1
- package/dist/tools/context/switch-context.d.ts.map +1 -0
- package/dist/tools/context/switch-context.js +4 -1
- package/dist/tools/context/switch-context.js.map +1 -1
- package/dist/tools/documentation/answer-appium.d.ts +1 -0
- package/dist/tools/documentation/answer-appium.d.ts.map +1 -0
- package/dist/tools/documentation/index.d.ts +1 -0
- package/dist/tools/documentation/index.d.ts.map +1 -0
- package/dist/tools/documentation/reasoning-rag.d.ts +1 -0
- package/dist/tools/documentation/reasoning-rag.d.ts.map +1 -0
- package/dist/tools/documentation/reasoning-rag.js +3 -3
- package/dist/tools/documentation/reasoning-rag.js.map +1 -1
- package/dist/tools/documentation/sentence-transformers-embeddings.d.ts +1 -0
- package/dist/tools/documentation/sentence-transformers-embeddings.d.ts.map +1 -0
- package/dist/tools/documentation/sentence-transformers-embeddings.js +4 -3
- package/dist/tools/documentation/sentence-transformers-embeddings.js.map +1 -1
- package/dist/tools/documentation/simple-pdf-indexer.d.ts +1 -0
- package/dist/tools/documentation/simple-pdf-indexer.d.ts.map +1 -0
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/interactions/click.d.ts +2 -1
- package/dist/tools/interactions/click.d.ts.map +1 -0
- package/dist/tools/interactions/click.js +4 -2
- package/dist/tools/interactions/click.js.map +1 -1
- package/dist/tools/interactions/double-tap.d.ts +2 -1
- package/dist/tools/interactions/double-tap.d.ts.map +1 -0
- package/dist/tools/interactions/double-tap.js +8 -4
- package/dist/tools/interactions/double-tap.js.map +1 -1
- package/dist/tools/interactions/drag-and-drop.d.ts +2 -1
- package/dist/tools/interactions/drag-and-drop.d.ts.map +1 -0
- package/dist/tools/interactions/drag-and-drop.js +4 -4
- package/dist/tools/interactions/drag-and-drop.js.map +1 -1
- package/dist/tools/interactions/find.d.ts +2 -1
- package/dist/tools/interactions/find.d.ts.map +1 -0
- package/dist/tools/interactions/find.js.map +1 -1
- package/dist/tools/interactions/get-page-source.d.ts +2 -1
- package/dist/tools/interactions/get-page-source.d.ts.map +1 -0
- package/dist/tools/interactions/get-page-source.js.map +1 -1
- package/dist/tools/interactions/get-text.d.ts +2 -1
- package/dist/tools/interactions/get-text.d.ts.map +1 -0
- package/dist/tools/interactions/get-text.js +4 -2
- package/dist/tools/interactions/get-text.js.map +1 -1
- package/dist/tools/interactions/long-press.d.ts +2 -1
- package/dist/tools/interactions/long-press.d.ts.map +1 -0
- package/dist/tools/interactions/long-press.js +12 -5
- package/dist/tools/interactions/long-press.js.map +1 -1
- package/dist/tools/interactions/screenshot.d.ts +6 -4
- package/dist/tools/interactions/screenshot.d.ts.map +1 -0
- package/dist/tools/interactions/screenshot.js +6 -3
- package/dist/tools/interactions/screenshot.js.map +1 -1
- package/dist/tools/interactions/set-value.d.ts +2 -1
- package/dist/tools/interactions/set-value.d.ts.map +1 -0
- package/dist/tools/interactions/set-value.js +4 -2
- package/dist/tools/interactions/set-value.js.map +1 -1
- package/dist/tools/ios/boot-simulator.d.ts +1 -0
- package/dist/tools/ios/boot-simulator.d.ts.map +1 -0
- package/dist/tools/ios/install-wda.d.ts +1 -0
- package/dist/tools/ios/install-wda.d.ts.map +1 -0
- package/dist/tools/ios/setup-wda.d.ts +1 -0
- package/dist/tools/ios/setup-wda.d.ts.map +1 -0
- package/dist/tools/navigations/scroll-to-element.d.ts +1 -0
- package/dist/tools/navigations/scroll-to-element.d.ts.map +1 -0
- package/dist/tools/navigations/scroll-to-element.js +2 -2
- package/dist/tools/navigations/scroll-to-element.js.map +1 -1
- package/dist/tools/navigations/scroll.d.ts +1 -0
- package/dist/tools/navigations/scroll.d.ts.map +1 -0
- package/dist/tools/navigations/scroll.js +19 -9
- package/dist/tools/navigations/scroll.js.map +1 -1
- package/dist/tools/navigations/swipe.d.ts +1 -0
- package/dist/tools/navigations/swipe.d.ts.map +1 -0
- package/dist/tools/navigations/swipe.js +11 -5
- package/dist/tools/navigations/swipe.js.map +1 -1
- package/dist/tools/session/create-session.d.ts +31 -0
- package/dist/tools/session/create-session.d.ts.map +1 -0
- package/dist/tools/session/create-session.js +88 -21
- package/dist/tools/session/create-session.js.map +1 -1
- package/dist/tools/session/delete-session.d.ts +1 -0
- package/dist/tools/session/delete-session.d.ts.map +1 -0
- package/dist/tools/session/delete-session.js +10 -1
- package/dist/tools/session/delete-session.js.map +1 -1
- package/dist/tools/session/select-device.d.ts +1 -0
- package/dist/tools/session/select-device.d.ts.map +1 -0
- package/dist/tools/session/select-device.js +11 -4
- package/dist/tools/session/select-device.js.map +1 -1
- package/dist/tools/session/select-platform.d.ts +1 -0
- package/dist/tools/session/select-platform.d.ts.map +1 -0
- package/dist/tools/session/select-platform.js +12 -5
- package/dist/tools/session/select-platform.js.map +1 -1
- package/dist/tools/test-generation/generate-tests.d.ts +2 -1
- package/dist/tools/test-generation/generate-tests.d.ts.map +1 -0
- package/dist/tools/test-generation/locators.d.ts +1 -0
- package/dist/tools/test-generation/locators.d.ts.map +1 -0
- package/dist/tools/test-generation/locators.js +4 -2
- package/dist/tools/test-generation/locators.js.map +1 -1
- package/dist/ui/mcp-ui-utils.d.ts +1 -0
- package/dist/ui/mcp-ui-utils.d.ts.map +1 -0
- package/package.json +6 -6
- package/server.json +2 -2
- package/src/session-store.ts +34 -2
- package/src/tests/screenshot.test.ts +6 -5
- package/src/tools/app-management/activate-app.ts +2 -2
- package/src/tools/app-management/install-app.ts +12 -3
- package/src/tools/app-management/list-apps.ts +12 -3
- package/src/tools/app-management/terminate-app.ts +12 -3
- package/src/tools/app-management/uninstall-app.ts +12 -3
- package/src/tools/context/get-contexts.ts +10 -4
- package/src/tools/context/switch-context.ts +17 -6
- package/src/tools/index.ts +1 -1
- package/src/tools/interactions/click.ts +6 -3
- package/src/tools/interactions/double-tap.ts +19 -7
- package/src/tools/interactions/drag-and-drop.ts +16 -7
- package/src/tools/interactions/find.ts +5 -2
- package/src/tools/interactions/get-page-source.ts +2 -2
- package/src/tools/interactions/get-text.ts +6 -3
- package/src/tools/interactions/long-press.ts +22 -10
- package/src/tools/interactions/screenshot.ts +11 -5
- package/src/tools/interactions/set-value.ts +9 -3
- package/src/tools/navigations/scroll-to-element.ts +4 -4
- package/src/tools/navigations/scroll.ts +25 -10
- package/src/tools/navigations/swipe.ts +17 -6
- package/src/tools/session/create-session.ts +108 -27
- package/src/tools/session/delete-session.ts +10 -1
- package/src/tools/session/select-device.ts +11 -4
- package/src/tools/session/select-platform.ts +12 -5
- package/src/tools/test-generation/generate-tests.ts +1 -1
- package/src/tools/test-generation/locators.ts +8 -3
- package/tsconfig.json +7 -15
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { getDriver, getPlatformName } from '../../session-store.js';
|
|
2
|
+
import { getDriver, getPlatformName, isRemoteDriverSession, } from '../../session-store.js';
|
|
3
3
|
import { elementUUIDScheme } from '../../schema.js';
|
|
4
4
|
export default function longPress(server) {
|
|
5
5
|
const longPressSchema = z.object({
|
|
@@ -49,10 +49,17 @@ export default function longPress(server) {
|
|
|
49
49
|
}
|
|
50
50
|
else if (platform === 'iOS') {
|
|
51
51
|
try {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
const _ok = isRemoteDriverSession(driver)
|
|
53
|
+
? await driver.executeScript('mobile: touchAndHold', [
|
|
54
|
+
{
|
|
55
|
+
elementId: args.elementUUID,
|
|
56
|
+
duration: duration / 1000,
|
|
57
|
+
},
|
|
58
|
+
])
|
|
59
|
+
: await driver.execute('mobile: touchAndHold', {
|
|
60
|
+
elementId: args.elementUUID,
|
|
61
|
+
duration: duration / 1000,
|
|
62
|
+
});
|
|
56
63
|
}
|
|
57
64
|
catch (touchAndHoldError) {
|
|
58
65
|
const rect = await driver.getElementRect(args.elementUUID);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"long-press.js","sourceRoot":"","sources":["../../../src/tools/interactions/long-press.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"long-press.js","sourceRoot":"","sources":["../../../src/tools/interactions/long-press.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { FastMCP } from 'fastmcp
|
|
1
|
+
import { FastMCP } from 'fastmcp';
|
|
2
2
|
import { writeFile, mkdir } from 'fs/promises';
|
|
3
|
+
import type { Client } from 'webdriver';
|
|
4
|
+
import type { XCUITestDriver } from 'appium-xcuitest-driver';
|
|
5
|
+
import type { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
|
|
3
6
|
/**
|
|
4
7
|
* Resolves the screenshot directory path.
|
|
5
8
|
* - If SCREENSHOTS_DIR is not set, returns process.cwd()
|
|
@@ -8,9 +11,7 @@ import { writeFile, mkdir } from 'fs/promises';
|
|
|
8
11
|
*/
|
|
9
12
|
export declare function resolveScreenshotDir(): string;
|
|
10
13
|
export interface ScreenshotDeps {
|
|
11
|
-
getDriver: () =>
|
|
12
|
-
getScreenshot: () => Promise<string>;
|
|
13
|
-
} | null;
|
|
14
|
+
getDriver: () => Client | AndroidUiautomator2Driver | XCUITestDriver | null;
|
|
14
15
|
writeFile: typeof writeFile;
|
|
15
16
|
mkdir: typeof mkdir;
|
|
16
17
|
resolveScreenshotDir: typeof resolveScreenshotDir;
|
|
@@ -18,3 +19,4 @@ export interface ScreenshotDeps {
|
|
|
18
19
|
}
|
|
19
20
|
export declare function executeScreenshot(deps?: ScreenshotDeps): Promise<any>;
|
|
20
21
|
export default function screenshot(server: FastMCP): void;
|
|
22
|
+
//# sourceMappingURL=screenshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQ/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,MAAM,GAAG,yBAAyB,GAAG,cAAc,GAAG,IAAI,CAAC;IAC5E,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;IAClD,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB;AAUD,wBAAsB,iBAAiB,CACrC,IAAI,GAAE,cAA4B,GACjC,OAAO,CAAC,GAAG,CAAC,CAqDd;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAWxD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { getDriver } from '../../session-store.js';
|
|
1
|
+
import { getDriver, isRemoteDriverSession } from '../../session-store.js';
|
|
2
2
|
import { writeFile, mkdir } from 'fs/promises';
|
|
3
3
|
import { join, isAbsolute } from 'path';
|
|
4
|
+
import * as os from 'node:os';
|
|
4
5
|
import { createUIResource, createScreenshotViewerUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
5
6
|
/**
|
|
6
7
|
* Resolves the screenshot directory path.
|
|
@@ -11,7 +12,7 @@ import { createUIResource, createScreenshotViewerUI, addUIResourceToResponse, }
|
|
|
11
12
|
export function resolveScreenshotDir() {
|
|
12
13
|
const screenshotDir = process.env.SCREENSHOTS_DIR;
|
|
13
14
|
if (!screenshotDir) {
|
|
14
|
-
return
|
|
15
|
+
return os.tmpdir();
|
|
15
16
|
}
|
|
16
17
|
if (isAbsolute(screenshotDir)) {
|
|
17
18
|
return screenshotDir;
|
|
@@ -31,7 +32,9 @@ export async function executeScreenshot(deps = defaultDeps) {
|
|
|
31
32
|
throw new Error('No driver found');
|
|
32
33
|
}
|
|
33
34
|
try {
|
|
34
|
-
const screenshotBase64 =
|
|
35
|
+
const screenshotBase64 = isRemoteDriverSession(driver)
|
|
36
|
+
? await driver.takeScreenshot()
|
|
37
|
+
: await driver.getScreenshot();
|
|
35
38
|
// Convert base64 to buffer
|
|
36
39
|
const screenshotBuffer = Buffer.from(screenshotBase64, 'base64');
|
|
37
40
|
// Generate filename with timestamp
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/interactions/screenshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-value.d.ts","sourceRoot":"","sources":["../../../src/tools/interactions/set-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMlC,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA+CtD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { getDriver } from '../../session-store.js';
|
|
2
|
+
import { getDriver, isRemoteDriverSession } from '../../session-store.js';
|
|
3
3
|
import { elementUUIDScheme } from '../../schema.js';
|
|
4
4
|
export default function setValue(server) {
|
|
5
5
|
const setValueSchema = z.object({
|
|
@@ -20,7 +20,9 @@ export default function setValue(server) {
|
|
|
20
20
|
throw new Error('No driver found');
|
|
21
21
|
}
|
|
22
22
|
try {
|
|
23
|
-
|
|
23
|
+
const _ok = isRemoteDriverSession(driver)
|
|
24
|
+
? await driver.elementSendKeys(args.elementUUID, args.text)
|
|
25
|
+
: await driver.setValue(args.text, args.elementUUID);
|
|
24
26
|
return {
|
|
25
27
|
content: [
|
|
26
28
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-value.js","sourceRoot":"","sources":["../../../src/tools/interactions/set-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"set-value.js","sourceRoot":"","sources":["../../../src/tools/interactions/set-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAe;IAC9C,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC/C,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,4BAA4B;QACzC,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,OAAY,EAAgB,EAAE;YACvD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,qBAAqB,CAAC,MAAM,CAAC;oBACvC,CAAC,CAAC,MAAO,MAAiB,CAAC,eAAe,CACtC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,IAAI,CACV;oBACH,CAAC,CAAC,MAAO,MAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,0BAA0B,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,WAAW,EAAE;yBAC7E;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,uBAAuB,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,WAAW,UAAU,GAAG,CAAC,QAAQ,EAAE,EAAE;yBAClG;qBACF;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-simulator.d.ts","sourceRoot":"","sources":["../../../src/tools/ios/boot-simulator.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CA+EvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-wda.d.ts","sourceRoot":"","sources":["../../../src/tools/ios/install-wda.ts"],"names":[],"mappings":"AA6JA,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAuHpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wda.d.ts","sourceRoot":"","sources":["../../../src/tools/ios/setup-wda.ts"],"names":[],"mappings":"AA6FA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CA4HlD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-to-element.d.ts","sourceRoot":"","sources":["../../../src/tools/navigations/scroll-to-element.ts"],"names":[],"mappings":"AAiHA,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CA0EzD"}
|
|
@@ -65,7 +65,7 @@ async function performAndroidScroll(driver, args, direction) {
|
|
|
65
65
|
}
|
|
66
66
|
catch (error) {
|
|
67
67
|
// If UiScrollable fails, try touch actions
|
|
68
|
-
const { width, height } = await driver.
|
|
68
|
+
const { width, height } = await driver.getWindowRect();
|
|
69
69
|
const startX = width / 2;
|
|
70
70
|
const startY = direction === 'up' ? height * 0.3 : height * 0.7;
|
|
71
71
|
const endY = direction === 'up' ? height * 0.7 : height * 0.3;
|
|
@@ -79,7 +79,7 @@ async function performAndroidScroll(driver, args, direction) {
|
|
|
79
79
|
}
|
|
80
80
|
async function performiOSScroll(driver, direction) {
|
|
81
81
|
// Use iOS mobile commands for scrolling
|
|
82
|
-
const { width, height } = await driver.
|
|
82
|
+
const { width, height } = await driver.getWindowRect();
|
|
83
83
|
await driver.execute('mobile: scroll', {
|
|
84
84
|
direction: direction,
|
|
85
85
|
startX: width / 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-to-element.js","sourceRoot":"","sources":["../../../src/tools/navigations/scroll-to-element.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scroll-to-element.js","sourceRoot":"","sources":["../../../src/tools/navigations/scroll-to-element.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/tools/navigations/scroll.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAuGhD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { getDriver, getPlatformName } from '../../session-store.js';
|
|
2
|
+
import { getDriver, getPlatformName, isRemoteDriverSession, } from '../../session-store.js';
|
|
3
3
|
import log from '../../logger.js';
|
|
4
4
|
export default function scroll(server) {
|
|
5
5
|
server.addTool({
|
|
@@ -21,7 +21,7 @@ export default function scroll(server) {
|
|
|
21
21
|
throw new Error('No active driver session. Please create a session first.');
|
|
22
22
|
}
|
|
23
23
|
try {
|
|
24
|
-
const { width, height } = await driver.
|
|
24
|
+
const { width, height } = await driver.getWindowRect();
|
|
25
25
|
log.info('Device screen size:', { width, height });
|
|
26
26
|
const startX = Math.floor(width / 2);
|
|
27
27
|
// calculate start and end Y positions for scrolling depending on the direction
|
|
@@ -56,13 +56,23 @@ export default function scroll(server) {
|
|
|
56
56
|
log.info('Scroll action completed successfully.');
|
|
57
57
|
}
|
|
58
58
|
else if (getPlatformName(driver) === 'iOS') {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
const _ok = isRemoteDriverSession(driver)
|
|
60
|
+
? await driver.executeScript('mobile: scroll', [
|
|
61
|
+
{
|
|
62
|
+
direction: args.direction,
|
|
63
|
+
startX: startX,
|
|
64
|
+
startY: startY,
|
|
65
|
+
endX: startX,
|
|
66
|
+
endY: endY,
|
|
67
|
+
},
|
|
68
|
+
])
|
|
69
|
+
: await driver.execute('mobile: scroll', {
|
|
70
|
+
direction: args.direction,
|
|
71
|
+
startX: startX,
|
|
72
|
+
startY: startY,
|
|
73
|
+
endX: startX,
|
|
74
|
+
endY: endY,
|
|
75
|
+
});
|
|
66
76
|
}
|
|
67
77
|
else {
|
|
68
78
|
throw new Error(`Unsupported platform: ${getPlatformName(driver)}. Only Android and iOS are supported.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/tools/navigations/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/tools/navigations/scroll.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipe.d.ts","sourceRoot":"","sources":["../../../src/tools/navigations/swipe.ts"],"names":[],"mappings":"AAkHA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CA6P/C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { getDriver, getPlatformName } from '../../session-store.js';
|
|
2
|
+
import { getDriver, getPlatformName, isRemoteDriverSession, } from '../../session-store.js';
|
|
3
3
|
import log from '../../logger.js';
|
|
4
4
|
import { elementUUIDScheme } from '../../schema.js';
|
|
5
5
|
function calculateSwipeCoordinates(direction, width, height) {
|
|
@@ -187,7 +187,7 @@ export default function swipe(server) {
|
|
|
187
187
|
});
|
|
188
188
|
}
|
|
189
189
|
else {
|
|
190
|
-
const { width, height } = await driver.
|
|
190
|
+
const { width, height } = await driver.getWindowRect();
|
|
191
191
|
log.info('Device screen size:', { width, height });
|
|
192
192
|
const coords = calculateSwipeCoordinates(args.direction, width, height);
|
|
193
193
|
startX = coords.startX;
|
|
@@ -249,9 +249,15 @@ export default function swipe(server) {
|
|
|
249
249
|
else if (platform === 'iOS') {
|
|
250
250
|
if (args.direction) {
|
|
251
251
|
try {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
252
|
+
const _ok = isRemoteDriverSession(driver)
|
|
253
|
+
? await driver.executeScript('mobile: swipe', [
|
|
254
|
+
{
|
|
255
|
+
direction: args.direction,
|
|
256
|
+
},
|
|
257
|
+
])
|
|
258
|
+
: await driver.execute('mobile: swipe', {
|
|
259
|
+
direction: args.direction,
|
|
260
|
+
});
|
|
255
261
|
log.info(`iOS swipe completed using mobile: swipe (${args.direction})`);
|
|
256
262
|
}
|
|
257
263
|
catch (swipeError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swipe.js","sourceRoot":"","sources":["../../../src/tools/navigations/swipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"swipe.js","sourceRoot":"","sources":["../../../src/tools/navigations/swipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registers a tool for creating a new mobile session with Android or iOS devices.
|
|
3
|
+
*
|
|
4
|
+
* This function adds a 'create_session' tool to the provided server that handles
|
|
5
|
+
* mobile session creation with support for both local and remote Appium servers.
|
|
6
|
+
*
|
|
7
|
+
* @param server - The server instance to which the create_session tool will be added
|
|
8
|
+
*
|
|
9
|
+
* @tool create_session
|
|
10
|
+
* @description Creates a new mobile session with Android or iOS device. Requires prior
|
|
11
|
+
* platform selection via the select_platform tool. Supports both local and remote
|
|
12
|
+
* Appium server connections.
|
|
13
|
+
*
|
|
14
|
+
* @param {Object} args - Tool execution arguments
|
|
15
|
+
* @param {'ios' | 'android'} args.platform - REQUIRED. The target platform, must match
|
|
16
|
+
* the platform explicitly selected via select_platform tool
|
|
17
|
+
* @param {Object} [args.capabilities] - Optional custom W3C format capabilities
|
|
18
|
+
* @param {string} [args.remoteServerUrl] - Optional remote Appium server URL
|
|
19
|
+
* (e.g., http://localhost:4723). If not provided, uses local Appium server
|
|
20
|
+
*
|
|
21
|
+
* @returns {Promise<Object>} Response object containing:
|
|
22
|
+
* - text: Success message with session ID and device details
|
|
23
|
+
* - ui: Interactive session dashboard UI component
|
|
24
|
+
*
|
|
25
|
+
* @throws {Error} If session creation fails or platform capabilities cannot be loaded
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // Register the tool
|
|
29
|
+
* createSession(server);
|
|
30
|
+
*/
|
|
1
31
|
export default function createSession(server: any): void;
|
|
32
|
+
//# sourceMappingURL=create-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/create-session.ts"],"names":[],"mappings":"AAkNA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAyIvD"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Tool to create a new mobile session (Android or iOS)
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { access, readFile } from 'fs/promises';
|
|
6
|
-
import { constants } from 'fs';
|
|
5
|
+
import { access, readFile } from 'node:fs/promises';
|
|
6
|
+
import { constants } from 'node:fs';
|
|
7
|
+
import { URL } from 'node:url';
|
|
7
8
|
import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
|
|
8
9
|
import { XCUITestDriver } from 'appium-xcuitest-driver';
|
|
9
10
|
import { setSession, hasActiveSession, safeDeleteSession, } from '../../session-store.js';
|
|
@@ -11,6 +12,7 @@ import { getSelectedDevice, getSelectedDeviceType, getSelectedDeviceInfo, clearS
|
|
|
11
12
|
import { IOSManager } from '../../devicemanager/ios-manager.js';
|
|
12
13
|
import log from '../../logger.js';
|
|
13
14
|
import { createUIResource, createSessionDashboardUI, addUIResourceToResponse, } from '../../ui/mcp-ui-utils.js';
|
|
15
|
+
import WebDriver from 'webdriver';
|
|
14
16
|
/**
|
|
15
17
|
* Load capabilities configuration from file if specified in environment
|
|
16
18
|
*/
|
|
@@ -44,13 +46,13 @@ function filterEmptyCapabilities(capabilities) {
|
|
|
44
46
|
/**
|
|
45
47
|
* Build Android capabilities by merging defaults, config, device selection, and custom capabilities
|
|
46
48
|
*/
|
|
47
|
-
function buildAndroidCapabilities(configCaps, customCaps) {
|
|
49
|
+
function buildAndroidCapabilities(configCaps, customCaps, isRemoteServer) {
|
|
48
50
|
const defaultCaps = {
|
|
49
51
|
platformName: 'Android',
|
|
50
52
|
'appium:automationName': 'UiAutomator2',
|
|
51
53
|
'appium:deviceName': 'Android Device',
|
|
52
54
|
};
|
|
53
|
-
const selectedDeviceUdid = getSelectedDevice();
|
|
55
|
+
const selectedDeviceUdid = isRemoteServer ? undefined : getSelectedDevice();
|
|
54
56
|
const capabilities = {
|
|
55
57
|
...defaultCaps,
|
|
56
58
|
...configCaps,
|
|
@@ -81,16 +83,18 @@ async function validateIOSDeviceSelection(deviceType) {
|
|
|
81
83
|
/**
|
|
82
84
|
* Build iOS capabilities by merging defaults, config, device selection, and custom capabilities
|
|
83
85
|
*/
|
|
84
|
-
async function buildIOSCapabilities(configCaps, customCaps) {
|
|
85
|
-
const deviceType = getSelectedDeviceType();
|
|
86
|
+
async function buildIOSCapabilities(configCaps, customCaps, isRemoteServer) {
|
|
87
|
+
const deviceType = isRemoteServer ? null : getSelectedDeviceType();
|
|
86
88
|
await validateIOSDeviceSelection(deviceType);
|
|
87
89
|
const defaultCaps = {
|
|
88
90
|
platformName: 'iOS',
|
|
89
91
|
'appium:automationName': 'XCUITest',
|
|
90
92
|
'appium:deviceName': 'iPhone Simulator',
|
|
91
93
|
};
|
|
92
|
-
const selectedDeviceUdid = getSelectedDevice();
|
|
93
|
-
const selectedDeviceInfo =
|
|
94
|
+
const selectedDeviceUdid = isRemoteServer ? undefined : getSelectedDevice();
|
|
95
|
+
const selectedDeviceInfo = isRemoteServer
|
|
96
|
+
? undefined
|
|
97
|
+
: getSelectedDeviceInfo();
|
|
94
98
|
log.debug('Selected device info:', selectedDeviceInfo);
|
|
95
99
|
const platformVersion = selectedDeviceInfo?.platform && selectedDeviceInfo.platform.trim() !== ''
|
|
96
100
|
? selectedDeviceInfo.platform
|
|
@@ -137,20 +141,63 @@ async function createDriverSession(driver, capabilities) {
|
|
|
137
141
|
});
|
|
138
142
|
return sessionId;
|
|
139
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Registers a tool for creating a new mobile session with Android or iOS devices.
|
|
146
|
+
*
|
|
147
|
+
* This function adds a 'create_session' tool to the provided server that handles
|
|
148
|
+
* mobile session creation with support for both local and remote Appium servers.
|
|
149
|
+
*
|
|
150
|
+
* @param server - The server instance to which the create_session tool will be added
|
|
151
|
+
*
|
|
152
|
+
* @tool create_session
|
|
153
|
+
* @description Creates a new mobile session with Android or iOS device. Requires prior
|
|
154
|
+
* platform selection via the select_platform tool. Supports both local and remote
|
|
155
|
+
* Appium server connections.
|
|
156
|
+
*
|
|
157
|
+
* @param {Object} args - Tool execution arguments
|
|
158
|
+
* @param {'ios' | 'android'} args.platform - REQUIRED. The target platform, must match
|
|
159
|
+
* the platform explicitly selected via select_platform tool
|
|
160
|
+
* @param {Object} [args.capabilities] - Optional custom W3C format capabilities
|
|
161
|
+
* @param {string} [args.remoteServerUrl] - Optional remote Appium server URL
|
|
162
|
+
* (e.g., http://localhost:4723). If not provided, uses local Appium server
|
|
163
|
+
*
|
|
164
|
+
* @returns {Promise<Object>} Response object containing:
|
|
165
|
+
* - text: Success message with session ID and device details
|
|
166
|
+
* - ui: Interactive session dashboard UI component
|
|
167
|
+
*
|
|
168
|
+
* @throws {Error} If session creation fails or platform capabilities cannot be loaded
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* // Register the tool
|
|
172
|
+
* createSession(server);
|
|
173
|
+
*/
|
|
140
174
|
export default function createSession(server) {
|
|
141
175
|
server.addTool({
|
|
142
176
|
name: 'create_session',
|
|
143
177
|
description: `Create a new mobile session with Android or iOS device.
|
|
144
|
-
|
|
145
|
-
|
|
178
|
+
WORKFLOW FOR LOCAL SERVERS (no remoteServerUrl):
|
|
179
|
+
- Use select_platform tool FIRST to ask the user which platform they want
|
|
180
|
+
- Then optionally use select_device tool if multiple devices are available
|
|
181
|
+
- Finally call create_session with the selected platform and device
|
|
182
|
+
- DO NOT assume or default to any platform
|
|
183
|
+
WORKFLOW FOR REMOTE SERVERS (remoteServerUrl provided):
|
|
184
|
+
- SKIP select_platform tool entirely
|
|
185
|
+
- Infer the platform from the user's request (e.g., 'ios', 'android')
|
|
186
|
+
- Infer device type from context when possible (e.g., 'simulator', 'real device')
|
|
187
|
+
- Call create_session directly with platform, remoteServerUrl, and any other capabilities from the user's request
|
|
188
|
+
- Example: User says 'start session with http://localhost:4723 for ios with iphone 17' → infer platform='ios' and call create_session with remoteServerUrl and platform parameters
|
|
146
189
|
`,
|
|
147
190
|
parameters: z.object({
|
|
148
|
-
platform: z.enum(['ios', 'android']).describe(`REQUIRED:
|
|
149
|
-
|
|
191
|
+
platform: z.enum(['ios', 'android']).describe(`REQUIRED: Platform to use. For local servers, this must match the platform the user explicitly selected via the select_platform tool.
|
|
192
|
+
If remoteServerUrl is provided, the assistant should ask the user to confirm or infer the platform from the conversation; do not assume a default.`),
|
|
150
193
|
capabilities: z
|
|
151
194
|
.object({})
|
|
152
195
|
.optional()
|
|
153
|
-
.describe('Optional custom capabilities for the session (
|
|
196
|
+
.describe('Optional custom W3C format capabilities for the session. Common options include appium:app (app path), appium:deviceName, appium:platformVersion, appium:bundleId, appium:autoGrantPermissions, etc. Custom capabilities override default and config file settings.'),
|
|
197
|
+
remoteServerUrl: z
|
|
198
|
+
.string()
|
|
199
|
+
.optional()
|
|
200
|
+
.describe('Remote Appium server URL (e.g., http://localhost:4723 or http://192.168.1.100:4723). If not provided, uses local Appium server.'),
|
|
154
201
|
}),
|
|
155
202
|
annotations: {
|
|
156
203
|
readOnlyHint: false,
|
|
@@ -160,20 +207,40 @@ export default function createSession(server) {
|
|
|
160
207
|
try {
|
|
161
208
|
if (hasActiveSession()) {
|
|
162
209
|
log.info('Existing session detected, cleaning up before creating new session...');
|
|
163
|
-
|
|
210
|
+
try {
|
|
211
|
+
await safeDeleteSession();
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// ok to ignore
|
|
215
|
+
}
|
|
164
216
|
}
|
|
165
|
-
const { platform, capabilities: customCapabilities } = args;
|
|
217
|
+
const { platform, capabilities: customCapabilities, remoteServerUrl, } = args;
|
|
166
218
|
const configCapabilities = await loadCapabilitiesConfig();
|
|
167
219
|
const platformCaps = platform === 'android'
|
|
168
220
|
? configCapabilities.android
|
|
169
221
|
: configCapabilities.ios;
|
|
170
222
|
const finalCapabilities = platform === 'android'
|
|
171
|
-
? buildAndroidCapabilities(platformCaps, customCapabilities)
|
|
172
|
-
: await buildIOSCapabilities(platformCaps, customCapabilities);
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
223
|
+
? buildAndroidCapabilities(platformCaps, customCapabilities, !!remoteServerUrl)
|
|
224
|
+
: await buildIOSCapabilities(platformCaps, customCapabilities, !!remoteServerUrl);
|
|
225
|
+
let sessionId;
|
|
226
|
+
if (remoteServerUrl) {
|
|
227
|
+
const remoteUrl = new URL(remoteServerUrl);
|
|
228
|
+
const client = await WebDriver.newSession({
|
|
229
|
+
protocol: remoteUrl.protocol.replace(':', ''),
|
|
230
|
+
hostname: remoteUrl.hostname,
|
|
231
|
+
port: parseInt(remoteUrl.port, 10),
|
|
232
|
+
path: remoteUrl.pathname,
|
|
233
|
+
capabilities: finalCapabilities,
|
|
234
|
+
});
|
|
235
|
+
sessionId = client.sessionId;
|
|
236
|
+
setSession(client, client.sessionId);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
log.info(`Creating new ${platform.toUpperCase()} session with capabilities:`, JSON.stringify(finalCapabilities, null, 2));
|
|
240
|
+
const driver = createDriverForPlatform(platform);
|
|
241
|
+
sessionId = await createDriverSession(driver, finalCapabilities);
|
|
242
|
+
setSession(driver, sessionId);
|
|
243
|
+
}
|
|
177
244
|
// Safely convert sessionId to string for display
|
|
178
245
|
const sessionIdStr = typeof sessionId === 'string'
|
|
179
246
|
? sessionId
|