22 * Tool to create a new mobile session (Android or iOS)
33 */
44import { z } from 'zod' ;
5+ import fs from 'fs' ;
6+ import path from 'path' ;
57import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver' ;
68import { XCUITestDriver } from 'appium-xcuitest-driver' ;
79import { setSession , getDriver , getSessionId } from './sessionStore.js' ;
@@ -10,10 +12,16 @@ import { setSession, getDriver, getSessionId } from './sessionStore.js';
1012interface Capabilities {
1113 platformName : string ;
1214 'appium:automationName' : string ;
13- 'appium:deviceName' : string ;
15+ 'appium:deviceName' ? : string ;
1416 [ key : string ] : any ;
1517}
1618
19+ // Define capabilities config type
20+ interface CapabilitiesConfig {
21+ android : Record < string , any > ;
22+ ios : Record < string , any > ;
23+ }
24+
1725export default function createSession ( server : any ) : void {
1826 server . addTool ( {
1927 name : 'create_session' ,
@@ -42,35 +50,63 @@ export default function createSession(server: any): void {
4250
4351 let defaultCapabilities : Capabilities ;
4452 let driver : any ;
45-
53+ let finalCapabilities : Capabilities ;
54+
55+ // Load capabilities from config file
56+ let configCapabilities : CapabilitiesConfig = { android : { } , ios : { } } ;
57+ const configPath = process . env . CAPABILITIES_CONFIG ;
58+
59+ if ( configPath && fs . existsSync ( configPath ) ) {
60+ try {
61+ const configContent = fs . readFileSync ( configPath , 'utf8' ) ;
62+ configCapabilities = JSON . parse ( configContent ) ;
63+ } catch ( error ) {
64+ console . warn ( `Failed to parse capabilities config: ${ error } ` ) ;
65+ }
66+ }
67+
4668 if ( platform === 'android' ) {
4769 defaultCapabilities = {
4870 platformName : 'Android' ,
4971 'appium:automationName' : 'UiAutomator2' ,
5072 'appium:deviceName' : 'Android Device' ,
5173 } ;
74+
75+ // Get platform-specific capabilities from config
76+ const androidCaps = configCapabilities . android || { } ;
77+
78+ // Merge custom capabilities with defaults and config capabilities
79+ finalCapabilities = {
80+ ...defaultCapabilities ,
81+ ...androidCaps ,
82+ ...customCapabilities ,
83+ } ;
84+
5285 driver = new AndroidUiautomator2Driver ( ) ;
5386 } else if ( platform === 'ios' ) {
5487 defaultCapabilities = {
5588 platformName : 'iOS' ,
5689 'appium:automationName' : 'XCUITest' ,
57- 'appium:deviceName' : 'iPhone 16 Pro' ,
58- 'appium:platformVersion' : '18.2' ,
59- 'appium:udid' : 'E9F10A3E-58E6-4506-B273-B22AF836014E' ,
90+ 'appium:deviceName' : 'iPhone Simulator' ,
91+ } ;
92+
93+ // Get platform-specific capabilities from config
94+ const iosCaps = configCapabilities . ios || { } ;
95+
96+ // Merge custom capabilities with defaults and config capabilities
97+ finalCapabilities = {
98+ ...defaultCapabilities ,
99+ ...iosCaps ,
100+ ...customCapabilities ,
60101 } ;
102+
61103 driver = new XCUITestDriver ( ) ;
62104 } else {
63105 throw new Error (
64106 `Unsupported platform: ${ platform } . Please choose 'android' or 'ios'.`
65107 ) ;
66108 }
67109
68- // Merge custom capabilities with defaults
69- const finalCapabilities = {
70- ...defaultCapabilities ,
71- ...customCapabilities ,
72- } ;
73-
74110 console . log (
75111 `Creating new ${ platform . toUpperCase ( ) } session with capabilities:` ,
76112 JSON . stringify ( finalCapabilities , null , 2 )
0 commit comments