appium-webdriveragent 4.8.4 → 4.8.6
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/WebDriverAgent.xcodeproj/project.pbxproj +2 -0
- package/WebDriverAgentRunner-Runner.app.zip +0 -0
- package/build/lib/check-dependencies.js.map +1 -0
- package/build/lib/constants.js.map +1 -0
- package/build/lib/logger.js.map +1 -0
- package/build/lib/no-session-proxy.js.map +1 -0
- package/build/lib/utils.js.map +1 -0
- package/build/lib/webdriveragent.js.map +1 -0
- package/build/lib/xcodebuild.js.map +1 -0
- package/package.json +2 -3
|
@@ -3625,6 +3625,7 @@
|
|
|
3625
3625
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
3626
3626
|
SDKROOT = appletvos;
|
|
3627
3627
|
SKIP_INSTALL = YES;
|
|
3628
|
+
TARGETED_DEVICE_FAMILY = 3;
|
|
3628
3629
|
VERSIONING_SYSTEM = "apple-generic";
|
|
3629
3630
|
VERSION_INFO_PREFIX = "";
|
|
3630
3631
|
WARNING_CFLAGS = (
|
|
@@ -3686,6 +3687,7 @@
|
|
|
3686
3687
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
3687
3688
|
SDKROOT = appletvos;
|
|
3688
3689
|
SKIP_INSTALL = YES;
|
|
3690
|
+
TARGETED_DEVICE_FAMILY = 3;
|
|
3689
3691
|
VERSIONING_SYSTEM = "apple-generic";
|
|
3690
3692
|
VERSION_INFO_PREFIX = "";
|
|
3691
3693
|
WARNING_CFLAGS = (
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-dependencies.js","names":["buildWDASim","args","path","join","BOOTSTRAP_PATH","WDA_SCHEME","SDK_SIMULATOR","exec","checkForDependencies","log","debug","bundleWDASim","xcodebuild","opts","_","isFunction","retrieveDerivedDataPath","XcodeBuild","derivedDataPath","wdaBundlePath","WDA_RUNNER_APP","fs","exists"],"sources":["../../lib/check-dependencies.js"],"sourcesContent":["import { fs } from 'appium/support';\nimport _ from 'lodash';\nimport { exec } from 'teen_process';\nimport path from 'path';\nimport XcodeBuild from './xcodebuild';\nimport {\n WDA_SCHEME, SDK_SIMULATOR, WDA_RUNNER_APP\n} from './constants';\nimport { BOOTSTRAP_PATH } from './utils';\nimport log from './logger';\n\nasync function buildWDASim () {\n const args = [\n '-project', path.join(BOOTSTRAP_PATH, 'WebDriverAgent.xcodeproj'),\n '-scheme', WDA_SCHEME,\n '-sdk', SDK_SIMULATOR,\n 'CODE_SIGN_IDENTITY=\"\"',\n 'CODE_SIGNING_REQUIRED=\"NO\"',\n 'GCC_TREAT_WARNINGS_AS_ERRORS=0',\n ];\n await exec('xcodebuild', args);\n}\n\n// eslint-disable-next-line require-await\nasync function checkForDependencies () {\n log.debug('Dependencies are up to date');\n return false;\n}\n\nasync function bundleWDASim (xcodebuild, opts = {}) {\n if (xcodebuild && !_.isFunction(xcodebuild.retrieveDerivedDataPath)) {\n xcodebuild = new XcodeBuild();\n opts = xcodebuild;\n }\n\n const derivedDataPath = await xcodebuild.retrieveDerivedDataPath();\n const wdaBundlePath = path.join(derivedDataPath, 'Build', 'Products', 'Debug-iphonesimulator', WDA_RUNNER_APP);\n if (await fs.exists(wdaBundlePath)) {\n return wdaBundlePath;\n }\n await buildWDASim(xcodebuild, opts);\n return wdaBundlePath;\n}\n\nexport { checkForDependencies, bundleWDASim };\n"],"mappings":";;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AAEA,eAAeA,WAAf,GAA8B;EAC5B,MAAMC,IAAI,GAAG,CACX,UADW,EACCC,aAAA,CAAKC,IAAL,CAAUC,qBAAV,EAA0B,0BAA1B,CADD,EAEX,SAFW,EAEAC,qBAFA,EAGX,MAHW,EAGHC,wBAHG,EAIX,uBAJW,EAKX,4BALW,EAMX,gCANW,CAAb;EAQA,MAAM,IAAAC,kBAAA,EAAK,YAAL,EAAmBN,IAAnB,CAAN;AACD;;AAGD,eAAeO,oBAAf,GAAuC;EACrCC,eAAA,CAAIC,KAAJ,CAAU,6BAAV;;EACA,OAAO,KAAP;AACD;;AAED,eAAeC,YAAf,CAA6BC,UAA7B,EAAyCC,IAAI,GAAG,EAAhD,EAAoD;EAClD,IAAID,UAAU,IAAI,CAACE,eAAA,CAAEC,UAAF,CAAaH,UAAU,CAACI,uBAAxB,CAAnB,EAAqE;IACnEJ,UAAU,GAAG,IAAIK,mBAAJ,EAAb;IACAJ,IAAI,GAAGD,UAAP;EACD;;EAED,MAAMM,eAAe,GAAG,MAAMN,UAAU,CAACI,uBAAX,EAA9B;;EACA,MAAMG,aAAa,GAAGjB,aAAA,CAAKC,IAAL,CAAUe,eAAV,EAA2B,OAA3B,EAAoC,UAApC,EAAgD,uBAAhD,EAAyEE,yBAAzE,CAAtB;;EACA,IAAI,MAAMC,WAAA,CAAGC,MAAH,CAAUH,aAAV,CAAV,EAAoC;IAClC,OAAOA,aAAP;EACD;;EACD,MAAMnB,WAAW,CAACY,UAAD,EAAaC,IAAb,CAAjB;EACA,OAAOM,aAAP;AACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":["WDA_RUNNER_BUNDLE_ID","WDA_RUNNER_APP","WDA_SCHEME","PROJECT_FILE","WDA_BASE_URL","PLATFORM_NAME_TVOS","PLATFORM_NAME_IOS","SDK_SIMULATOR","SDK_DEVICE","WDA_UPGRADE_TIMESTAMP_PATH","path","join"],"sources":["../../lib/constants.js"],"sourcesContent":["import path from 'path';\n\nconst WDA_RUNNER_BUNDLE_ID = 'com.facebook.WebDriverAgentRunner';\nconst WDA_RUNNER_APP = 'WebDriverAgentRunner-Runner.app';\nconst WDA_SCHEME = 'WebDriverAgentRunner';\nconst PROJECT_FILE = 'project.pbxproj';\nconst WDA_BASE_URL = 'http://127.0.0.1';\n\nconst PLATFORM_NAME_TVOS = 'tvOS';\nconst PLATFORM_NAME_IOS = 'iOS';\n\nconst SDK_SIMULATOR = 'iphonesimulator';\nconst SDK_DEVICE = 'iphoneos';\n\nconst WDA_UPGRADE_TIMESTAMP_PATH = path.join('.appium', 'webdriveragent', 'upgrade.time');\n\nexport {\n WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_APP, PROJECT_FILE,\n WDA_SCHEME, PLATFORM_NAME_TVOS, PLATFORM_NAME_IOS,\n SDK_SIMULATOR, SDK_DEVICE, WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AAEA,MAAMA,oBAAoB,GAAG,mCAA7B;;AACA,MAAMC,cAAc,GAAG,iCAAvB;;AACA,MAAMC,UAAU,GAAG,sBAAnB;;AACA,MAAMC,YAAY,GAAG,iBAArB;;AACA,MAAMC,YAAY,GAAG,kBAArB;;AAEA,MAAMC,kBAAkB,GAAG,MAA3B;;AACA,MAAMC,iBAAiB,GAAG,KAA1B;;AAEA,MAAMC,aAAa,GAAG,iBAAtB;;AACA,MAAMC,UAAU,GAAG,UAAnB;;;AAEA,MAAMC,0BAA0B,GAAGC,aAAA,CAAKC,IAAL,CAAU,SAAV,EAAqB,gBAArB,EAAuC,cAAvC,CAAnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from 'appium/support';\n\nconst log = logger.getLogger('WebDriverAgent');\n\nexport default log;\n"],"mappings":";;;;;;;;;AAAA;;AAEA,MAAMA,GAAG,GAAGC,eAAA,CAAOC,SAAP,CAAiB,gBAAjB,CAAZ;;eAEeF,G"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-session-proxy.js","names":["NoSessionProxy","JWProxy","constructor","opts","getUrlForProxy","url","proxyBase","scheme","server","port","base","remainingUrl","RegExp","test","Error","replace"],"sources":["../../lib/no-session-proxy.js"],"sourcesContent":["import { JWProxy } from 'appium/driver';\n\n\nclass NoSessionProxy extends JWProxy {\n constructor (opts = {}) {\n super(opts);\n }\n\n getUrlForProxy (url) {\n if (url === '') {\n url = '/';\n }\n const proxyBase = `${this.scheme}://${this.server}:${this.port}${this.base}`;\n let remainingUrl = '';\n if ((new RegExp('^/')).test(url)) {\n remainingUrl = url;\n } else {\n throw new Error(`Did not know what to do with url '${url}'`);\n }\n remainingUrl = remainingUrl.replace(/\\/$/, ''); // can't have trailing slashes\n return proxyBase + remainingUrl;\n }\n}\n\nexport { NoSessionProxy };\nexport default NoSessionProxy;\n"],"mappings":";;;;;;;;;AAAA;;AAGA,MAAMA,cAAN,SAA6BC,eAA7B,CAAqC;EACnCC,WAAW,CAAEC,IAAI,GAAG,EAAT,EAAa;IACtB,MAAMA,IAAN;EACD;;EAEDC,cAAc,CAAEC,GAAF,EAAO;IACnB,IAAIA,GAAG,KAAK,EAAZ,EAAgB;MACdA,GAAG,GAAG,GAAN;IACD;;IACD,MAAMC,SAAS,GAAI,GAAE,KAAKC,MAAO,MAAK,KAAKC,MAAO,IAAG,KAAKC,IAAK,GAAE,KAAKC,IAAK,EAA3E;IACA,IAAIC,YAAY,GAAG,EAAnB;;IACA,IAAK,IAAIC,MAAJ,CAAW,IAAX,CAAD,CAAmBC,IAAnB,CAAwBR,GAAxB,CAAJ,EAAkC;MAChCM,YAAY,GAAGN,GAAf;IACD,CAFD,MAEO;MACL,MAAM,IAAIS,KAAJ,CAAW,qCAAoCT,GAAI,GAAnD,CAAN;IACD;;IACDM,YAAY,GAAGA,YAAY,CAACI,OAAb,CAAqB,KAArB,EAA4B,EAA5B,CAAf;IACA,OAAOT,SAAS,GAAGK,YAAnB;EACD;;AAlBkC;;;eAsBtBX,c"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","names":["PROJECT_FILE","getModuleRoot","_","memoize","currentDir","path","dirname","resolve","__filename","isAtFsRoot","manifestPath","join","_fs","existsSync","JSON","parse","readFileSync","name","ign","length","Error","BOOTSTRAP_PATH","getPIDsUsingPattern","pattern","args","stdout","exec","split","map","x","parseInt","filter","isInteger","err","log","debug","code","killAppUsingPattern","pgrepPattern","signals","signal","matchedPids","isEmpty","message","last","waitForCondition","pidCheckPromises","pid","then","catch","B","all","every","waitMs","intervalMs","isTvOS","platformName","toLower","PLATFORM_NAME_TVOS","replaceInFile","file","find","replace","contents","fs","readFile","newContents","writeFile","updateProjectFile","agentPath","newBundleId","projectFilePath","copyFile","RegExp","escapeRegExp","WDA_RUNNER_BUNDLE_ID","warn","resetProjectFile","exists","mv","setRealDeviceSecurity","keychainPath","keychainPassword","generateXcodeConfigFile","orgId","signingId","xcconfigPath","tempDir","setXctestrunFile","deviceInfo","sdkVersion","bootstrapPath","wdaRemotePort","xctestrunFilePath","getXctestrunFilePath","xctestRunContent","plist","parsePlistFile","updateWDAPort","getAdditionalRunContent","newXctestRunContent","merge","updatePlistFile","runner","EnvironmentVariables","USE_PORT","sdkBased","udid","platformBased","platformVersion","filePath","version","info","originalXctestrunFile","getXctestrunFileName","errorAndThrow","isRealDevice","killProcess","proc","isRunning","stop","includes","randomInt","low","high","Math","floor","random","getWDAUpgradeTimestamp","packageManifest","mtime","stat","getTime","resetTestProcesses","isSimulator","processPatterns","push","getPIDsListeningOnPort","port","filteringFunc","result","trim","e","stderr","isFunction"],"sources":["../../lib/utils.js"],"sourcesContent":["import { fs, tempDir, plist } from 'appium/support';\nimport { exec } from 'teen_process';\nimport path from 'path';\nimport log from './logger';\nimport _ from 'lodash';\nimport { WDA_RUNNER_BUNDLE_ID, PLATFORM_NAME_TVOS } from './constants';\nimport B from 'bluebird';\nimport _fs from 'fs';\nimport { waitForCondition } from 'asyncbox';\n\nconst PROJECT_FILE = 'project.pbxproj';\n\n/**\n * Calculates the path to the current module's root folder\n *\n * @returns {string} The full path to module root\n * @throws {Error} If the current module root folder cannot be determined\n */\nconst getModuleRoot = _.memoize(function getModuleRoot () {\n let currentDir = path.dirname(path.resolve(__filename));\n let isAtFsRoot = false;\n while (!isAtFsRoot) {\n const manifestPath = path.join(currentDir, 'package.json');\n try {\n if (_fs.existsSync(manifestPath) &&\n JSON.parse(_fs.readFileSync(manifestPath, 'utf8')).name === 'appium-webdriveragent') {\n return currentDir;\n }\n } catch (ign) {}\n currentDir = path.dirname(currentDir);\n isAtFsRoot = currentDir.length <= path.dirname(currentDir).length;\n }\n throw new Error('Cannot find the root folder of the appium-webdriveragent Node.js module');\n});\n\nexport const BOOTSTRAP_PATH = getModuleRoot();\n\nasync function getPIDsUsingPattern (pattern) {\n const args = [\n '-if', // case insensitive, full cmdline match\n pattern,\n ];\n try {\n const {stdout} = await exec('pgrep', args);\n return stdout.split(/\\s+/)\n .map((x) => parseInt(x, 10))\n .filter(_.isInteger)\n .map((x) => `${x}`);\n } catch (err) {\n log.debug(`'pgrep ${args.join(' ')}' didn't detect any matching processes. Return code: ${err.code}`);\n return [];\n }\n}\n\nasync function killAppUsingPattern (pgrepPattern) {\n const signals = [2, 15, 9];\n for (const signal of signals) {\n const matchedPids = await getPIDsUsingPattern(pgrepPattern);\n if (_.isEmpty(matchedPids)) {\n return;\n }\n const args = [`-${signal}`, ...matchedPids];\n try {\n await exec('kill', args);\n } catch (err) {\n log.debug(`kill ${args.join(' ')} -> ${err.message}`);\n }\n if (signal === _.last(signals)) {\n // there is no need to wait after SIGKILL\n return;\n }\n try {\n await waitForCondition(async () => {\n const pidCheckPromises = matchedPids\n .map((pid) => exec('kill', ['-0', pid])\n // the process is still alive\n .then(() => false)\n // the process is dead\n .catch(() => true)\n );\n return (await B.all(pidCheckPromises))\n .every((x) => x === true);\n }, {\n waitMs: 1000,\n intervalMs: 100,\n });\n return;\n } catch (ign) {\n // try the next signal\n }\n }\n}\n\n/**\n * Return true if the platformName is tvOS\n * @param {string} platformName The name of the platorm\n * @returns {boolean} Return true if the platformName is tvOS\n */\nfunction isTvOS (platformName) {\n return _.toLower(platformName) === _.toLower(PLATFORM_NAME_TVOS);\n}\n\nasync function replaceInFile (file, find, replace) {\n let contents = await fs.readFile(file, 'utf8');\n\n let newContents = contents.replace(find, replace);\n if (newContents !== contents) {\n await fs.writeFile(file, newContents, 'utf8');\n }\n}\n\n/**\n * Update WebDriverAgentRunner project bundle ID with newBundleId.\n * This method assumes project file is in the correct state.\n * @param {string} agentPath - Path to the .xcodeproj directory.\n * @param {string} newBundleId the new bundle ID used to update.\n */\nasync function updateProjectFile (agentPath, newBundleId) {\n let projectFilePath = path.resolve(agentPath, PROJECT_FILE);\n try {\n // Assuming projectFilePath is in the correct state, create .old from projectFilePath\n await fs.copyFile(projectFilePath, `${projectFilePath}.old`);\n await replaceInFile(projectFilePath, new RegExp(_.escapeRegExp(WDA_RUNNER_BUNDLE_ID), 'g'), newBundleId); // eslint-disable-line no-useless-escape\n log.debug(`Successfully updated '${projectFilePath}' with bundle id '${newBundleId}'`);\n } catch (err) {\n log.debug(`Error updating project file: ${err.message}`);\n log.warn(`Unable to update project file '${projectFilePath}' with ` +\n `bundle id '${newBundleId}'. WebDriverAgent may not start`);\n }\n}\n\n/**\n * Reset WebDriverAgentRunner project bundle ID to correct state.\n * @param {string} agentPath - Path to the .xcodeproj directory.\n */\nasync function resetProjectFile (agentPath) {\n const projectFilePath = path.join(agentPath, PROJECT_FILE);\n try {\n // restore projectFilePath from .old file\n if (!await fs.exists(`${projectFilePath}.old`)) {\n return; // no need to reset\n }\n await fs.mv(`${projectFilePath}.old`, projectFilePath);\n log.debug(`Successfully reset '${projectFilePath}' with bundle id '${WDA_RUNNER_BUNDLE_ID}'`);\n } catch (err) {\n log.debug(`Error resetting project file: ${err.message}`);\n log.warn(`Unable to reset project file '${projectFilePath}' with ` +\n `bundle id '${WDA_RUNNER_BUNDLE_ID}'. WebDriverAgent has been ` +\n `modified and not returned to the original state.`);\n }\n}\n\nasync function setRealDeviceSecurity (keychainPath, keychainPassword) {\n log.debug('Setting security for iOS device');\n await exec('security', ['-v', 'list-keychains', '-s', keychainPath]);\n await exec('security', ['-v', 'unlock-keychain', '-p', keychainPassword, keychainPath]);\n await exec('security', ['set-keychain-settings', '-t', '3600', '-l', keychainPath]);\n}\n\nasync function generateXcodeConfigFile (orgId, signingId) {\n log.debug(`Generating xcode config file for orgId '${orgId}' and signingId ` +\n `'${signingId}'`);\n const contents = `DEVELOPMENT_TEAM = ${orgId}\nCODE_SIGN_IDENTITY = ${signingId}\n`;\n const xcconfigPath = await tempDir.path('appium-temp.xcconfig');\n log.debug(`Writing xcode config file to ${xcconfigPath}`);\n await fs.writeFile(xcconfigPath, contents, 'utf8');\n return xcconfigPath;\n}\n\n/**\n * Information of the device under test\n * @typedef {Object} DeviceInfo\n * @property {string} isRealDevice - Equals to true if the current device is a real device\n * @property {string} udid - The device UDID.\n * @property {string} platformVersion - The platform version of OS.\n * @property {string} platformName - The platform name of iOS, tvOS\n*/\n/**\n * Creates xctestrun file per device & platform version.\n * We expects to have WebDriverAgentRunner_iphoneos${sdkVersion|platformVersion}-arm64.xctestrun for real device\n * and WebDriverAgentRunner_iphonesimulator${sdkVersion|platformVersion}-x86_64.xctestrun for simulator located @bootstrapPath\n * Newer Xcode (Xcode 10.0 at least) generate xctestrun file following sdkVersion.\n * e.g. Xcode which has iOS SDK Version 12.2 generate WebDriverAgentRunner_iphonesimulator.2-x86_64.xctestrun\n * even if the cap has platform version 11.4\n *\n * @param {DeviceInfo} deviceInfo\n * @param {string} sdkVersion - The Xcode SDK version of OS.\n * @param {string} bootstrapPath - The folder path containing xctestrun file.\n * @param {string} wdaRemotePort - The remote port WDA is listening on.\n * @return {string} returns xctestrunFilePath for given device\n * @throws if WebDriverAgentRunner_iphoneos${sdkVersion|platformVersion}-arm64.xctestrun for real device\n * or WebDriverAgentRunner_iphonesimulator${sdkVersion|platformVersion}-x86_64.xctestrun for simulator is not found @bootstrapPath,\n * then it will throw file not found exception\n */\nasync function setXctestrunFile (deviceInfo, sdkVersion, bootstrapPath, wdaRemotePort) {\n const xctestrunFilePath = await getXctestrunFilePath(deviceInfo, sdkVersion, bootstrapPath);\n const xctestRunContent = await plist.parsePlistFile(xctestrunFilePath);\n const updateWDAPort = getAdditionalRunContent(deviceInfo.platformName, wdaRemotePort);\n const newXctestRunContent = _.merge(xctestRunContent, updateWDAPort);\n await plist.updatePlistFile(xctestrunFilePath, newXctestRunContent, true);\n\n return xctestrunFilePath;\n}\n\n/**\n * Return the WDA object which appends existing xctest runner content\n * @param {string} platformName - The name of the platform\n * @param {string} version - The Xcode SDK version of OS.\n * @return {object} returns a runner object which has USE_PORT\n */\nfunction getAdditionalRunContent (platformName, wdaRemotePort) {\n const runner = `WebDriverAgentRunner${isTvOS(platformName) ? '_tvOS' : ''}`;\n\n return {\n [runner]: {\n EnvironmentVariables: {\n // USE_PORT must be 'string'\n USE_PORT: `${wdaRemotePort}`\n }\n }\n };\n}\n\n/**\n * Return the path of xctestrun if it exists\n * @param {DeviceInfo} deviceInfo\n * @param {string} sdkVersion - The Xcode SDK version of OS.\n * @param {string} bootstrapPath - The folder path containing xctestrun file.\n */\nasync function getXctestrunFilePath (deviceInfo, sdkVersion, bootstrapPath) {\n // First try the SDK path, for Xcode 10 (at least)\n const sdkBased = [\n path.resolve(bootstrapPath, `${deviceInfo.udid}_${sdkVersion}.xctestrun`),\n sdkVersion,\n ];\n // Next try Platform path, for earlier Xcode versions\n const platformBased = [\n path.resolve(bootstrapPath, `${deviceInfo.udid}_${deviceInfo.platformVersion}.xctestrun`),\n deviceInfo.platformVersion,\n ];\n\n for (const [filePath, version] of [sdkBased, platformBased]) {\n if (await fs.exists(filePath)) {\n log.info(`Using '${filePath}' as xctestrun file`);\n return filePath;\n }\n const originalXctestrunFile = path.resolve(bootstrapPath, getXctestrunFileName(deviceInfo, version));\n if (await fs.exists(originalXctestrunFile)) {\n // If this is first time run for given device, then first generate xctestrun file for device.\n // We need to have a xctestrun file **per device** because we cant not have same wda port for all devices.\n await fs.copyFile(originalXctestrunFile, filePath);\n log.info(`Using '${filePath}' as xctestrun file copied by '${originalXctestrunFile}'`);\n return filePath;\n }\n }\n\n log.errorAndThrow(`If you are using 'useXctestrunFile' capability then you ` +\n `need to have a xctestrun file (expected: ` +\n `'${path.resolve(bootstrapPath, getXctestrunFileName(deviceInfo, sdkVersion))}')`);\n}\n\n\n/**\n * Return the name of xctestrun file\n * @param {DeviceInfo} deviceInfo\n * @param {string} version - The Xcode SDK version of OS.\n * @return {string} returns xctestrunFilePath for given device\n */\nfunction getXctestrunFileName (deviceInfo, version) {\n return isTvOS(deviceInfo.platformName)\n ? `WebDriverAgentRunner_tvOS_appletv${deviceInfo.isRealDevice ? `os${version}-arm64` : `simulator${version}-x86_64`}.xctestrun`\n : `WebDriverAgentRunner_iphone${deviceInfo.isRealDevice ? `os${version}-arm64` : `simulator${version}-x86_64`}.xctestrun`;\n}\n\nasync function killProcess (name, proc) {\n if (!proc || !proc.isRunning) {\n return;\n }\n\n log.info(`Shutting down '${name}' process (pid '${proc.proc.pid}')`);\n\n log.info(`Sending 'SIGTERM'...`);\n try {\n await proc.stop('SIGTERM', 1000);\n return;\n } catch (err) {\n if (!err.message.includes(`Process didn't end after`)) {\n throw err;\n }\n log.debug(`${name} process did not end in a timely fashion: '${err.message}'.`);\n }\n\n log.info(`Sending 'SIGKILL'...`);\n try {\n await proc.stop('SIGKILL');\n } catch (err) {\n if (err.message.includes('not currently running')) {\n // the process ended but for some reason we were not informed\n return;\n }\n throw err;\n }\n}\n\n/**\n * Generate a random integer.\n *\n * @return {number} A random integer number in range [low, hight). `low`` is inclusive and `high` is exclusive.\n */\nfunction randomInt (low, high) {\n return Math.floor(Math.random() * (high - low) + low);\n}\n\n/**\n * Retrieves WDA upgrade timestamp\n *\n * @return {?number} The UNIX timestamp of the package manifest. The manifest only gets modified on\n * package upgrade.\n */\nasync function getWDAUpgradeTimestamp () {\n const packageManifest = path.resolve(getModuleRoot(), 'package.json');\n if (!await fs.exists(packageManifest)) {\n return null;\n }\n const {mtime} = await fs.stat(packageManifest);\n return mtime.getTime();\n}\n\n/**\n * Kills running XCTest processes for the particular device.\n *\n * @param {string} udid - The device UDID.\n * @param {boolean} isSimulator - Equals to true if the current device is a Simulator\n */\nasync function resetTestProcesses (udid, isSimulator) {\n const processPatterns = [`xcodebuild.*${udid}`];\n if (isSimulator) {\n processPatterns.push(`${udid}.*XCTRunner`);\n // The pattern to find in case idb was used\n processPatterns.push(`xctest.*${udid}`);\n }\n log.debug(`Killing running processes '${processPatterns.join(', ')}' for the device ${udid}...`);\n await B.all(processPatterns.map(killAppUsingPattern));\n}\n\n/**\n * Get the IDs of processes listening on the particular system port.\n * It is also possible to apply additional filtering based on the\n * process command line.\n *\n * @param {string|number} port - The port number.\n * @param {?Function} filteringFunc - Optional lambda function, which\n * receives command line string of the particular process\n * listening on given port, and is expected to return\n * either true or false to include/exclude the corresponding PID\n * from the resulting array.\n * @returns {Array<string>} - the list of matched process ids.\n */\nasync function getPIDsListeningOnPort (port, filteringFunc = null) {\n const result = [];\n try {\n // This only works since Mac OS X El Capitan\n const {stdout} = await exec('lsof', ['-ti', `tcp:${port}`]);\n result.push(...(stdout.trim().split(/\\n+/)));\n } catch (e) {\n if (e.code !== 1) {\n // code 1 means no processes. Other errors need reporting\n log.debug(`Error getting processes listening on port '${port}': ${e.stderr || e.message}`);\n }\n return result;\n }\n\n if (!_.isFunction(filteringFunc)) {\n return result;\n }\n return await B.filter(result, async (pid) => {\n let stdout;\n try {\n ({stdout} = await exec('ps', ['-p', pid, '-o', 'command']));\n } catch (e) {\n if (e.code === 1) {\n // The process does not exist anymore, there's nothing to filter\n return false;\n }\n throw e;\n }\n return await filteringFunc(stdout);\n });\n}\n\nexport { updateProjectFile, resetProjectFile, setRealDeviceSecurity,\n getAdditionalRunContent, getXctestrunFileName, generateXcodeConfigFile,\n setXctestrunFile, getXctestrunFilePath, killProcess, randomInt,\n getWDAUpgradeTimestamp, resetTestProcesses,\n getPIDsListeningOnPort, killAppUsingPattern, isTvOS\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webdriveragent.js","names":["WDA_LAUNCH_TIMEOUT","WDA_AGENT_PORT","WDA_CF_BUNDLE_NAME","SHARED_RESOURCES_GUARD","AsyncLock","WebDriverAgent","constructor","xcodeVersion","args","log","_","clone","defaultLogger","device","platformVersion","platformName","iosSdkVersion","host","isRealDevice","realDevice","idb","wdaBundlePath","setWDAPaths","bootstrapPath","agentPath","wdaLocalPort","wdaRemotePort","wdaBaseUrl","WDA_BASE_URL","prebuildWDA","webDriverAgentUrl","started","wdaConnectionTimeout","useXctestrunFile","usePrebuiltWDA","derivedDataPath","mjpegServerPort","updatedWDABundleId","xcodebuild","XcodeBuild","showXcodeLog","xcodeConfigFile","xcodeOrgId","xcodeSigningId","keychainPath","keychainPassword","useSimpleBuildTest","launchTimeout","wdaLaunchTimeout","allowProvisioningDeviceRegistration","resultBundlePath","resultBundleVersion","BOOTSTRAP_PATH","info","path","resolve","cleanupObsoleteProcesses","obsoletePids","getPIDsListeningOnPort","url","port","cmdLine","includes","toLowerCase","udid","isEmpty","debug","length","exec","e","warn","message","isRunning","getStatus","basePath","noSessionProxy","NoSessionProxy","server","hostname","base","timeout","command","err","href","uninstall","bundleIds","getUserInstalledBundleIdsByBundleName","bundleId","removeApp","_cleanupProjectIfFresh","homeFolder","process","env","HOME","currentUpgradeTimestamp","getWDAUpgradeTimestamp","isInteger","timestampPath","WDA_UPGRADE_TIMESTAMP_PATH","didTimestampExist","fs","exists","access","W_OK","ign","recentUpgradeTimestamp","parseInt","readFile","mkdirp","dirname","writeFile","cleanProject","launch","sessionId","setupProxies","Error","synchronizationKey","normalize","acquire","resetTestProcesses","startWithIDB","init","prebuild","start","wdaBundleId","testBundleId","prepareWDA","USE_PORT","WDA_PRODUCT_BUNDLE_IDENTIFIER","MJPEG_SERVER_PORT","runXCUITest","parseBundleId","infoPlistPath","join","infoPlist","plist","parsePlist","CFBundleIdentifier","fetchWDABundle","isAppInstalled","installApp","installXCTestBundle","bundleWDASim","wdaBundlePaths","glob","WDA_RUNNER_APP","absolute","isSourceFresh","existsPromises","sep","map","subPath","B","all","some","v","proxyOpts","keepAlive","jwproxy","JWProxy","proxyReqRes","bind","quit","reset","_url","parse","protocol","fullyStarted","retrieveDerivedDataPath","setupCaching","status","build","productBundleIdentifier","upgradedAt","util","hasValue","WDA_RUNNER_BUNDLE_ID","actualUpgradeTimestamp","toLower","quitAndUninstall"],"sources":["../../lib/webdriveragent.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport url from 'url';\nimport B from 'bluebird';\nimport { JWProxy } from 'appium/driver';\nimport { fs, util, plist, mkdirp } from 'appium/support';\nimport defaultLogger from './logger';\nimport { NoSessionProxy } from './no-session-proxy';\nimport {\n getWDAUpgradeTimestamp, resetTestProcesses, getPIDsListeningOnPort, BOOTSTRAP_PATH\n} from './utils';\nimport XcodeBuild from './xcodebuild';\nimport AsyncLock from 'async-lock';\nimport { exec } from 'teen_process';\nimport { bundleWDASim } from './check-dependencies';\nimport {\n WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_APP, WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH,\n} from './constants';\n\nconst WDA_LAUNCH_TIMEOUT = 60 * 1000;\nconst WDA_AGENT_PORT = 8100;\nconst WDA_CF_BUNDLE_NAME = 'WebDriverAgentRunner-Runner';\nconst SHARED_RESOURCES_GUARD = new AsyncLock();\n\nclass WebDriverAgent {\n constructor (xcodeVersion, args = {}, log = null) {\n this.xcodeVersion = xcodeVersion;\n\n this.args = _.clone(args);\n this.log = log ?? defaultLogger;\n\n this.device = args.device;\n this.platformVersion = args.platformVersion;\n this.platformName = args.platformName;\n this.iosSdkVersion = args.iosSdkVersion;\n this.host = args.host;\n this.isRealDevice = !!args.realDevice;\n this.idb = (args.device || {}).idb;\n this.wdaBundlePath = args.wdaBundlePath;\n\n this.setWDAPaths(args.bootstrapPath, args.agentPath);\n\n this.wdaLocalPort = args.wdaLocalPort;\n this.wdaRemotePort = args.wdaLocalPort || WDA_AGENT_PORT;\n this.wdaBaseUrl = args.wdaBaseUrl || WDA_BASE_URL;\n\n this.prebuildWDA = args.prebuildWDA;\n\n this.webDriverAgentUrl = args.webDriverAgentUrl;\n\n this.started = false;\n\n this.wdaConnectionTimeout = args.wdaConnectionTimeout;\n\n this.useXctestrunFile = args.useXctestrunFile;\n this.usePrebuiltWDA = args.usePrebuiltWDA;\n this.derivedDataPath = args.derivedDataPath;\n this.mjpegServerPort = args.mjpegServerPort;\n\n this.updatedWDABundleId = args.updatedWDABundleId;\n\n this.xcodebuild = new XcodeBuild(this.xcodeVersion, this.device, {\n platformVersion: this.platformVersion,\n platformName: this.platformName,\n iosSdkVersion: this.iosSdkVersion,\n agentPath: this.agentPath,\n bootstrapPath: this.bootstrapPath,\n realDevice: this.isRealDevice,\n showXcodeLog: args.showXcodeLog,\n xcodeConfigFile: args.xcodeConfigFile,\n xcodeOrgId: args.xcodeOrgId,\n xcodeSigningId: args.xcodeSigningId,\n keychainPath: args.keychainPath,\n keychainPassword: args.keychainPassword,\n useSimpleBuildTest: args.useSimpleBuildTest,\n usePrebuiltWDA: args.usePrebuiltWDA,\n updatedWDABundleId: this.updatedWDABundleId,\n launchTimeout: args.wdaLaunchTimeout || WDA_LAUNCH_TIMEOUT,\n wdaRemotePort: this.wdaRemotePort,\n useXctestrunFile: this.useXctestrunFile,\n derivedDataPath: args.derivedDataPath,\n mjpegServerPort: this.mjpegServerPort,\n allowProvisioningDeviceRegistration: args.allowProvisioningDeviceRegistration,\n resultBundlePath: args.resultBundlePath,\n resultBundleVersion: args.resultBundleVersion,\n }, this.log);\n }\n\n setWDAPaths (bootstrapPath, agentPath) {\n // allow the user to specify a place for WDA. This is undocumented and\n // only here for the purposes of testing development of WDA\n this.bootstrapPath = bootstrapPath || BOOTSTRAP_PATH;\n this.log.info(`Using WDA path: '${this.bootstrapPath}'`);\n\n // for backward compatibility we need to be able to specify agentPath too\n this.agentPath = agentPath || path.resolve(this.bootstrapPath, 'WebDriverAgent.xcodeproj');\n this.log.info(`Using WDA agent: '${this.agentPath}'`);\n }\n\n async cleanupObsoleteProcesses () {\n const obsoletePids = await getPIDsListeningOnPort(this.url.port,\n (cmdLine) => cmdLine.includes('/WebDriverAgentRunner') &&\n !cmdLine.toLowerCase().includes(this.device.udid.toLowerCase()));\n\n if (_.isEmpty(obsoletePids)) {\n this.log.debug(`No obsolete cached processes from previous WDA sessions ` +\n `listening on port ${this.url.port} have been found`);\n return;\n }\n\n this.log.info(`Detected ${obsoletePids.length} obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} ` +\n `from previous WDA sessions. Cleaning them up`);\n try {\n await exec('kill', obsoletePids);\n } catch (e) {\n this.log.warn(`Failed to kill obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} '${obsoletePids}'. ` +\n `Original error: ${e.message}`);\n }\n }\n\n /**\n * Return boolean if WDA is running or not\n * @return {boolean} True if WDA is running\n * @throws {Error} If there was invalid response code or body\n */\n async isRunning () {\n return !!(await this.getStatus());\n }\n\n get basePath () {\n if (this.url.path === '/') {\n return '';\n }\n return this.url.path || '';\n }\n\n /**\n * Return current running WDA's status like below\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async getStatus () {\n const noSessionProxy = new NoSessionProxy({\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: 3000,\n });\n try {\n return await noSessionProxy.command('/status', 'GET');\n } catch (err) {\n this.log.debug(`WDA is not listening at '${this.url.href}'`);\n return null;\n }\n }\n\n /**\n * Uninstall WDAs from the test device.\n * Over Xcode 11, multiple WDA can be in the device since Xcode 11 generates different WDA.\n * Appium does not expect multiple WDAs are running on a device.\n */\n async uninstall () {\n try {\n const bundleIds = await this.device.getUserInstalledBundleIdsByBundleName(WDA_CF_BUNDLE_NAME);\n if (_.isEmpty(bundleIds)) {\n this.log.debug('No WDAs on the device.');\n return;\n }\n\n this.log.debug(`Uninstalling WDAs: '${bundleIds}'`);\n for (const bundleId of bundleIds) {\n await this.device.removeApp(bundleId);\n }\n } catch (e) {\n this.log.debug(e);\n this.log.warn(`WebDriverAgent uninstall failed. Perhaps, it is already uninstalled? ` +\n `Original error: ${e.message}`);\n }\n }\n\n async _cleanupProjectIfFresh () {\n const homeFolder = process.env.HOME;\n if (!homeFolder) {\n this.log.info('The HOME folder path cannot be determined');\n return;\n }\n\n const currentUpgradeTimestamp = await getWDAUpgradeTimestamp();\n if (!_.isInteger(currentUpgradeTimestamp)) {\n this.log.info('It is impossible to determine the timestamp of the package');\n return;\n }\n\n const timestampPath = path.resolve(homeFolder, WDA_UPGRADE_TIMESTAMP_PATH);\n const didTimestampExist = await fs.exists(timestampPath);\n if (didTimestampExist) {\n try {\n await fs.access(timestampPath, fs.W_OK);\n } catch (ign) {\n this.log.info(`WebDriverAgent upgrade timestamp at '${timestampPath}' is not writeable. ` +\n `Skipping sources cleanup`);\n return;\n }\n const recentUpgradeTimestamp = parseInt(await fs.readFile(timestampPath, 'utf8'), 10);\n if (_.isInteger(recentUpgradeTimestamp)) {\n if (recentUpgradeTimestamp >= currentUpgradeTimestamp) {\n this.log.info(`WebDriverAgent does not need a cleanup. The sources are up to date ` +\n `(${recentUpgradeTimestamp} >= ${currentUpgradeTimestamp})`);\n return;\n }\n this.log.info(`WebDriverAgent sources have been upgraded ` +\n `(${recentUpgradeTimestamp} < ${currentUpgradeTimestamp})`);\n } else {\n this.log.warn(`The recent upgrade timestamp at '${timestampPath}' is corrupted. Trying to fix it`);\n }\n }\n\n try {\n await mkdirp(path.dirname(timestampPath));\n await fs.writeFile(timestampPath, `${currentUpgradeTimestamp}`, 'utf8');\n this.log.debug(`Stored the recent WebDriverAgent upgrade timestamp ${currentUpgradeTimestamp} ` +\n `at '${timestampPath}'`);\n } catch (e) {\n this.log.info(`Unable to create the recent WebDriverAgent upgrade timestamp at '${timestampPath}'. ` +\n `Original error: ${e.message}`);\n return;\n }\n\n if (!didTimestampExist) {\n this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');\n return;\n }\n\n try {\n await this.xcodebuild.cleanProject();\n } catch (e) {\n this.log.warn(`Cannot perform WebDriverAgent project cleanup. Original error: ${e.message}`);\n }\n }\n\n /**\n * Return current running WDA's status like below after launching WDA\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @param {string} sessionId Launch WDA and establish the session with this sessionId\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async launch (sessionId) {\n if (this.webDriverAgentUrl) {\n this.log.info(`Using provided WebdriverAgent at '${this.webDriverAgentUrl}'`);\n this.url = this.webDriverAgentUrl;\n this.setupProxies(sessionId);\n return await this.getStatus();\n }\n\n this.log.info('Launching WebDriverAgent on the device');\n\n this.setupProxies(sessionId);\n\n if (!this.useXctestrunFile && !await fs.exists(this.agentPath)) {\n throw new Error(`Trying to use WebDriverAgent project at '${this.agentPath}' but the ` +\n 'file does not exist');\n }\n\n // useXctestrunFile and usePrebuiltWDA use existing dependencies\n // It depends on user side\n if (this.idb || this.useXctestrunFile || (this.derivedDataPath && this.usePrebuiltWDA)) {\n this.log.info('Skipped WDA project cleanup according to the provided capabilities');\n } else {\n const synchronizationKey = path.normalize(this.bootstrapPath);\n await SHARED_RESOURCES_GUARD.acquire(synchronizationKey,\n async () => await this._cleanupProjectIfFresh());\n }\n\n // We need to provide WDA local port, because it might be occupied\n await resetTestProcesses(this.device.udid, !this.isRealDevice);\n\n if (this.idb) {\n return await this.startWithIDB();\n }\n\n await this.xcodebuild.init(this.noSessionProxy);\n\n // Start the xcodebuild process\n if (this.prebuildWDA) {\n await this.xcodebuild.prebuild();\n }\n return await this.xcodebuild.start();\n }\n\n async startWithIDB () {\n this.log.info('Will launch WDA with idb instead of xcodebuild since the corresponding flag is enabled');\n const {wdaBundleId, testBundleId} = await this.prepareWDA();\n const env = {\n USE_PORT: this.wdaRemotePort,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.updatedWDABundleId,\n };\n if (this.mjpegServerPort) {\n env.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n\n return await this.idb.runXCUITest(wdaBundleId, wdaBundleId, testBundleId, {env});\n }\n\n async parseBundleId (wdaBundlePath) {\n const infoPlistPath = path.join(wdaBundlePath, 'Info.plist');\n const infoPlist = await plist.parsePlist(await fs.readFile(infoPlistPath));\n if (!infoPlist.CFBundleIdentifier) {\n throw new Error(`Could not find bundle id in '${infoPlistPath}'`);\n }\n return infoPlist.CFBundleIdentifier;\n }\n\n async prepareWDA () {\n const wdaBundlePath = this.wdaBundlePath || await this.fetchWDABundle();\n const wdaBundleId = await this.parseBundleId(wdaBundlePath);\n if (!await this.device.isAppInstalled(wdaBundleId)) {\n await this.device.installApp(wdaBundlePath);\n }\n const testBundleId = await this.idb.installXCTestBundle(path.join(wdaBundlePath, 'PlugIns', 'WebDriverAgentRunner.xctest'));\n return {wdaBundleId, testBundleId, wdaBundlePath};\n }\n\n async fetchWDABundle () {\n if (!this.derivedDataPath) {\n return await bundleWDASim(this.xcodebuild);\n }\n const wdaBundlePaths = await fs.glob(`${this.derivedDataPath}/**/*${WDA_RUNNER_APP}/`, {\n absolute: true,\n });\n if (_.isEmpty(wdaBundlePaths)) {\n throw new Error(`Could not find the WDA bundle in '${this.derivedDataPath}'`);\n }\n return wdaBundlePaths[0];\n }\n\n async isSourceFresh () {\n const existsPromises = [\n 'Resources',\n `Resources${path.sep}WebDriverAgent.bundle`,\n ].map((subPath) => fs.exists(path.resolve(this.bootstrapPath, subPath)));\n return (await B.all(existsPromises)).some((v) => v === false);\n }\n\n setupProxies (sessionId) {\n const proxyOpts = {\n log: this.log,\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: this.wdaConnectionTimeout,\n keepAlive: true,\n };\n\n this.jwproxy = new JWProxy(proxyOpts);\n this.jwproxy.sessionId = sessionId;\n this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);\n\n this.noSessionProxy = new NoSessionProxy(proxyOpts);\n }\n\n async quit () {\n this.log.info('Shutting down sub-processes');\n\n await this.xcodebuild.quit();\n await this.xcodebuild.reset();\n\n if (this.jwproxy) {\n this.jwproxy.sessionId = null;\n }\n\n this.started = false;\n\n if (!this.args.webDriverAgentUrl) {\n // if we populated the url ourselves (during `setupCaching` call, for instance)\n // then clean that up. If the url was supplied, we want to keep it\n this.webDriverAgentUrl = null;\n }\n }\n\n get url () {\n if (!this._url) {\n if (this.webDriverAgentUrl) {\n this._url = url.parse(this.webDriverAgentUrl);\n } else {\n const port = this.wdaLocalPort || WDA_AGENT_PORT;\n const {protocol, hostname} = url.parse(this.wdaBaseUrl || WDA_BASE_URL);\n this._url = url.parse(`${protocol}//${hostname}:${port}`);\n }\n }\n return this._url;\n }\n\n set url (_url) {\n this._url = url.parse(_url);\n }\n\n get fullyStarted () {\n return this.started;\n }\n\n set fullyStarted (started = false) {\n this.started = started;\n }\n\n async retrieveDerivedDataPath () {\n return await this.xcodebuild.retrieveDerivedDataPath();\n }\n\n /**\n * Reuse running WDA if it has the same bundle id with updatedWDABundleId.\n * Or reuse it if it has the default id without updatedWDABundleId.\n * Uninstall it if the method faces an exception for the above situation.\n *\n * @param {string} updatedWDABundleId BundleId you'd like to use\n */\n async setupCaching () {\n const status = await this.getStatus();\n if (!status || !status.build) {\n this.log.debug('WDA is currently not running. There is nothing to cache');\n return;\n }\n\n const {\n productBundleIdentifier,\n upgradedAt,\n } = status.build;\n // for real device\n if (util.hasValue(productBundleIdentifier) && util.hasValue(this.updatedWDABundleId) && this.updatedWDABundleId !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since it has different bundle id. The actual value is '${productBundleIdentifier}'.`);\n return await this.uninstall();\n }\n // for simulator\n if (util.hasValue(productBundleIdentifier) && !util.hasValue(this.updatedWDABundleId) && WDA_RUNNER_BUNDLE_ID !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since its bundle id is not equal to the default value ${WDA_RUNNER_BUNDLE_ID}`);\n return await this.uninstall();\n }\n\n const actualUpgradeTimestamp = await getWDAUpgradeTimestamp();\n this.log.debug(`Upgrade timestamp of the currently bundled WDA: ${actualUpgradeTimestamp}`);\n this.log.debug(`Upgrade timestamp of the WDA on the device: ${upgradedAt}`);\n if (actualUpgradeTimestamp && upgradedAt && _.toLower(`${actualUpgradeTimestamp}`) !== _.toLower(`${upgradedAt}`)) {\n this.log.info('Will uninstall running WDA since it has different version in comparison to the one ' +\n `which is bundled with appium-xcuitest-driver module (${actualUpgradeTimestamp} != ${upgradedAt})`);\n return await this.uninstall();\n }\n\n const message = util.hasValue(productBundleIdentifier)\n ? `Will reuse previously cached WDA instance at '${this.url.href}' with '${productBundleIdentifier}'`\n : `Will reuse previously cached WDA instance at '${this.url.href}'`;\n this.log.info(`${message}. Set the wdaLocalPort capability to a value different from ${this.url.port} if this is an undesired behavior.`);\n this.webDriverAgentUrl = this.url.href;\n }\n\n /**\n * Quit and uninstall running WDA.\n */\n async quitAndUninstall () {\n await this.quit();\n await this.uninstall();\n }\n}\n\nexport default WebDriverAgent;\nexport { WebDriverAgent };\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xcodebuild.js","names":["DEFAULT_SIGNING_ID","PREBUILD_DELAY","RUNNER_SCHEME_IOS","LIB_SCHEME_IOS","ERROR_WRITING_ATTACHMENT","ERROR_COPYING_ATTACHMENT","IGNORED_ERRORS","RUNNER_SCHEME_TV","LIB_SCHEME_TV","xcodeLog","logger","getLogger","XcodeBuild","constructor","xcodeVersion","device","args","log","defaultLogger","realDevice","agentPath","bootstrapPath","platformVersion","platformName","iosSdkVersion","showXcodeLog","xcodeConfigFile","xcodeOrgId","xcodeSigningId","keychainPath","keychainPassword","prebuildWDA","usePrebuiltWDA","useSimpleBuildTest","useXctestrunFile","launchTimeout","wdaRemotePort","updatedWDABundleId","derivedDataPath","mjpegServerPort","prebuildDelay","_","isNumber","allowProvisioningDeviceRegistration","resultBundlePath","resultBundleVersion","init","noSessionProxy","deviveInfo","isRealDevice","udid","xctestrunFilePath","setXctestrunFile","resetProjectFile","updateProjectFile","retrieveDerivedDataPath","_derivedDataPathPromise","stdout","exec","err","warn","message","pattern","match","truncate","length","debug","path","dirname","normalize","reset","prebuild","start","xcodebuild","B","delay","cleanProject","tmpIsTvOS","isTvOS","libScheme","runnerScheme","scheme","getCommand","buildOnly","cmd","buildCmd","testCmd","push","versionMatch","RegExp","process","env","APPIUM_XCUITEST_TREAT_WARNINGS_AS_ERRORS","createSubProcess","setRealDeviceSecurity","generateXcodeConfigFile","join","Object","assign","USE_PORT","WDA_PRODUCT_BUNDLE_IDENTIFIER","WDA_RUNNER_BUNDLE_ID","MJPEG_SERVER_PORT","upgradeTimestamp","getWDAUpgradeTimestamp","UPGRADE_TIMESTAMP","SubProcess","cwd","detached","stdio","logXcodeOutput","logMsg","isBoolean","on","stderr","out","includes","logLocation","first","remove","trim","split","v","startsWith","sep","ignoreError","some","x","_wda_error_occurred","line","EOL","error","_wda_error_message","resolve","reject","code","signal","data","fs","readFile","processExited","Error","timer","timing","Timer","status","waitForStart","msg","currentStatus","retries","parseInt","retryInterval","proxyTimeout","timeout","command","ios","ip","agentUrl","JSON","stringify","getDuration","asMilliSeconds","toFixed","quit","killProcess"],"sources":["../../lib/xcodebuild.js"],"sourcesContent":["import { retryInterval } from 'asyncbox';\nimport { SubProcess, exec } from 'teen_process';\nimport { fs, logger, timing } from 'appium/support';\nimport defaultLogger from './logger';\nimport B from 'bluebird';\nimport {\n setRealDeviceSecurity, generateXcodeConfigFile, setXctestrunFile,\n updateProjectFile, resetProjectFile, killProcess,\n getWDAUpgradeTimestamp, isTvOS } from './utils';\nimport _ from 'lodash';\nimport path from 'path';\nimport { EOL } from 'os';\nimport { WDA_RUNNER_BUNDLE_ID } from './constants';\n\n\nconst DEFAULT_SIGNING_ID = 'iPhone Developer';\nconst PREBUILD_DELAY = 0;\nconst RUNNER_SCHEME_IOS = 'WebDriverAgentRunner';\nconst LIB_SCHEME_IOS = 'WebDriverAgentLib';\n\nconst ERROR_WRITING_ATTACHMENT = 'Error writing attachment data to file';\nconst ERROR_COPYING_ATTACHMENT = 'Error copying testing attachment';\nconst IGNORED_ERRORS = [\n ERROR_WRITING_ATTACHMENT,\n ERROR_COPYING_ATTACHMENT,\n 'Failed to remove screenshot at path',\n];\n\nconst RUNNER_SCHEME_TV = 'WebDriverAgentRunner_tvOS';\nconst LIB_SCHEME_TV = 'WebDriverAgentLib_tvOS';\n\nconst xcodeLog = logger.getLogger('Xcode');\n\n\nclass XcodeBuild {\n constructor (xcodeVersion, device, args = {}, log = null) {\n this.xcodeVersion = xcodeVersion;\n\n this.device = device;\n this.log = log ?? defaultLogger;\n\n this.realDevice = args.realDevice;\n\n this.agentPath = args.agentPath;\n this.bootstrapPath = args.bootstrapPath;\n\n this.platformVersion = args.platformVersion;\n this.platformName = args.platformName;\n this.iosSdkVersion = args.iosSdkVersion;\n\n this.showXcodeLog = args.showXcodeLog;\n\n this.xcodeConfigFile = args.xcodeConfigFile;\n this.xcodeOrgId = args.xcodeOrgId;\n this.xcodeSigningId = args.xcodeSigningId || DEFAULT_SIGNING_ID;\n this.keychainPath = args.keychainPath;\n this.keychainPassword = args.keychainPassword;\n\n this.prebuildWDA = args.prebuildWDA;\n this.usePrebuiltWDA = args.usePrebuiltWDA;\n this.useSimpleBuildTest = args.useSimpleBuildTest;\n\n this.useXctestrunFile = args.useXctestrunFile;\n\n this.launchTimeout = args.launchTimeout;\n\n this.wdaRemotePort = args.wdaRemotePort;\n\n this.updatedWDABundleId = args.updatedWDABundleId;\n this.derivedDataPath = args.derivedDataPath;\n\n this.mjpegServerPort = args.mjpegServerPort;\n\n this.prebuildDelay = _.isNumber(args.prebuildDelay) ? args.prebuildDelay : PREBUILD_DELAY;\n\n this.allowProvisioningDeviceRegistration = args.allowProvisioningDeviceRegistration;\n\n this.resultBundlePath = args.resultBundlePath;\n this.resultBundleVersion = args.resultBundleVersion;\n }\n\n async init (noSessionProxy) {\n this.noSessionProxy = noSessionProxy;\n\n if (this.useXctestrunFile) {\n const deviveInfo = {\n isRealDevice: this.realDevice,\n udid: this.device.udid,\n platformVersion: this.platformVersion,\n platformName: this.platformName\n };\n this.xctestrunFilePath = await setXctestrunFile(deviveInfo, this.iosSdkVersion, this.bootstrapPath, this.wdaRemotePort);\n return;\n }\n\n // if necessary, update the bundleId to user's specification\n if (this.realDevice) {\n // In case the project still has the user specific bundle ID, reset the project file first.\n // - We do this reset even if updatedWDABundleId is not specified,\n // since the previous updatedWDABundleId test has generated the user specific bundle ID project file.\n // - We don't call resetProjectFile for simulator,\n // since simulator test run will work with any user specific bundle ID.\n await resetProjectFile(this.agentPath);\n if (this.updatedWDABundleId) {\n await updateProjectFile(this.agentPath, this.updatedWDABundleId);\n }\n }\n }\n\n async retrieveDerivedDataPath () {\n if (this.derivedDataPath) {\n return this.derivedDataPath;\n }\n\n // avoid race conditions\n if (this._derivedDataPathPromise) {\n return await this._derivedDataPathPromise;\n }\n\n this._derivedDataPathPromise = (async () => {\n let stdout;\n try {\n ({stdout} = await exec('xcodebuild', ['-project', this.agentPath, '-showBuildSettings']));\n } catch (err) {\n this.log.warn(`Cannot retrieve WDA build settings. Original error: ${err.message}`);\n return;\n }\n\n const pattern = /^\\s*BUILD_DIR\\s+=\\s+(\\/.*)/m;\n const match = pattern.exec(stdout);\n if (!match) {\n this.log.warn(`Cannot parse WDA build dir from ${_.truncate(stdout, {length: 300})}`);\n return;\n }\n this.log.debug(`Parsed BUILD_DIR configuration value: '${match[1]}'`);\n // Derived data root is two levels higher over the build dir\n this.derivedDataPath = path.dirname(path.dirname(path.normalize(match[1])));\n this.log.debug(`Got derived data root: '${this.derivedDataPath}'`);\n return this.derivedDataPath;\n })();\n return await this._derivedDataPathPromise;\n }\n\n async reset () {\n // if necessary, reset the bundleId to original value\n if (this.realDevice && this.updatedWDABundleId) {\n await resetProjectFile(this.agentPath);\n }\n }\n\n async prebuild () {\n // first do a build phase\n this.log.debug('Pre-building WDA before launching test');\n this.usePrebuiltWDA = true;\n await this.start(true);\n\n this.xcodebuild = null;\n\n // pause a moment\n await B.delay(this.prebuildDelay);\n }\n\n async cleanProject () {\n const tmpIsTvOS = isTvOS(this.platformName);\n const libScheme = tmpIsTvOS ? LIB_SCHEME_TV : LIB_SCHEME_IOS;\n const runnerScheme = tmpIsTvOS ? RUNNER_SCHEME_TV : RUNNER_SCHEME_IOS;\n\n for (const scheme of [libScheme, runnerScheme]) {\n this.log.debug(`Cleaning the project scheme '${scheme}' to make sure there are no leftovers from previous installs`);\n await exec('xcodebuild', [\n 'clean',\n '-project', this.agentPath,\n '-scheme', scheme,\n ]);\n }\n }\n\n getCommand (buildOnly = false) {\n let cmd = 'xcodebuild';\n let args;\n\n // figure out the targets for xcodebuild\n const [buildCmd, testCmd] = this.useSimpleBuildTest ? ['build', 'test'] : ['build-for-testing', 'test-without-building'];\n if (buildOnly) {\n args = [buildCmd];\n } else if (this.usePrebuiltWDA || this.useXctestrunFile) {\n args = [testCmd];\n } else {\n args = [buildCmd, testCmd];\n }\n\n if (this.allowProvisioningDeviceRegistration) {\n // To -allowProvisioningDeviceRegistration flag takes effect, -allowProvisioningUpdates needs to be passed as well.\n args.push('-allowProvisioningUpdates', '-allowProvisioningDeviceRegistration');\n }\n\n if (this.resultBundlePath) {\n args.push('-resultBundlePath', this.resultBundlePath);\n }\n\n if (this.resultBundleVersion) {\n args.push('-resultBundleVersion', this.resultBundleVersion);\n }\n\n if (this.useXctestrunFile) {\n args.push('-xctestrun', this.xctestrunFilePath);\n } else {\n const runnerScheme = isTvOS(this.platformName) ? RUNNER_SCHEME_TV : RUNNER_SCHEME_IOS;\n args.push('-project', this.agentPath, '-scheme', runnerScheme);\n if (this.derivedDataPath) {\n args.push('-derivedDataPath', this.derivedDataPath);\n }\n }\n args.push('-destination', `id=${this.device.udid}`);\n\n const versionMatch = new RegExp(/^(\\d+)\\.(\\d+)/).exec(this.platformVersion);\n if (versionMatch) {\n args.push(`IPHONEOS_DEPLOYMENT_TARGET=${versionMatch[1]}.${versionMatch[2]}`);\n } else {\n this.log.warn(`Cannot parse major and minor version numbers from platformVersion \"${this.platformVersion}\". ` +\n 'Will build for the default platform instead');\n }\n\n if (this.realDevice && this.xcodeConfigFile) {\n this.log.debug(`Using Xcode configuration file: '${this.xcodeConfigFile}'`);\n args.push('-xcconfig', this.xcodeConfigFile);\n }\n\n if (!process.env.APPIUM_XCUITEST_TREAT_WARNINGS_AS_ERRORS) {\n // This sometimes helps to survive Xcode updates\n args.push('GCC_TREAT_WARNINGS_AS_ERRORS=0');\n }\n\n // Below option slightly reduces build time in debug build\n // with preventing to generate `/Index/DataStore` which is used by development\n args.push('COMPILER_INDEX_STORE_ENABLE=NO');\n\n return {cmd, args};\n }\n\n async createSubProcess (buildOnly = false) {\n if (!this.useXctestrunFile && this.realDevice) {\n if (this.keychainPath && this.keychainPassword) {\n await setRealDeviceSecurity(this.keychainPath, this.keychainPassword);\n }\n if (this.xcodeOrgId && this.xcodeSigningId && !this.xcodeConfigFile) {\n this.xcodeConfigFile = await generateXcodeConfigFile(this.xcodeOrgId, this.xcodeSigningId);\n }\n }\n\n const {cmd, args} = this.getCommand(buildOnly);\n this.log.debug(`Beginning ${buildOnly ? 'build' : 'test'} with command '${cmd} ${args.join(' ')}' ` +\n `in directory '${this.bootstrapPath}'`);\n const env = Object.assign({}, process.env, {\n USE_PORT: this.wdaRemotePort,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.updatedWDABundleId || WDA_RUNNER_BUNDLE_ID,\n });\n if (this.mjpegServerPort) {\n // https://github.com/appium/WebDriverAgent/pull/105\n env.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n const upgradeTimestamp = await getWDAUpgradeTimestamp(this.bootstrapPath);\n if (upgradeTimestamp) {\n env.UPGRADE_TIMESTAMP = upgradeTimestamp;\n }\n const xcodebuild = new SubProcess(cmd, args, {\n cwd: this.bootstrapPath,\n env,\n detached: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let logXcodeOutput = !!this.showXcodeLog;\n const logMsg = _.isBoolean(this.showXcodeLog)\n ? `Output from xcodebuild ${this.showXcodeLog ? 'will' : 'will not'} be logged`\n : 'Output from xcodebuild will only be logged if any errors are present there';\n this.log.debug(`${logMsg}. To change this, use 'showXcodeLog' desired capability`);\n xcodebuild.on('output', (stdout, stderr) => {\n let out = stdout || stderr;\n // we want to pull out the log file that is created, and highlight it\n // for diagnostic purposes\n if (out.includes('Writing diagnostic log for test session to')) {\n // pull out the first line that begins with the path separator\n // which *should* be the line indicating the log file generated\n xcodebuild.logLocation = _.first(_.remove(out.trim().split('\\n'), (v) => v.startsWith(path.sep)));\n xcodeLog.debug(`Log file for xcodebuild test: ${xcodebuild.logLocation}`);\n }\n\n // if we have an error we want to output the logs\n // otherwise the failure is inscrutible\n // but do not log permission errors from trying to write to attachments folder\n const ignoreError = IGNORED_ERRORS.some((x) => out.includes(x));\n if (this.showXcodeLog !== false && out.includes('Error Domain=') && !ignoreError) {\n logXcodeOutput = true;\n\n // terrible hack to handle case where xcode return 0 but is failing\n xcodebuild._wda_error_occurred = true;\n }\n\n // do not log permission errors from trying to write to attachments folder\n if (logXcodeOutput && !ignoreError) {\n for (const line of out.split(EOL)) {\n xcodeLog.error(line);\n if (line) {\n xcodebuild._wda_error_message += `${EOL}${line}`;\n }\n }\n }\n });\n\n return xcodebuild;\n }\n\n async start (buildOnly = false) {\n this.xcodebuild = await this.createSubProcess(buildOnly);\n // Store xcodebuild message\n this.xcodebuild._wda_error_message = '';\n\n // wrap the start procedure in a promise so that we can catch, and report,\n // any startup errors that are thrown as events\n return await new B((resolve, reject) => {\n this.xcodebuild.on('exit', async (code, signal) => {\n xcodeLog.error(`xcodebuild exited with code '${code}' and signal '${signal}'`);\n // print out the xcodebuild file if users have asked for it\n if (this.showXcodeLog && this.xcodebuild.logLocation) {\n xcodeLog.error(`Contents of xcodebuild log file '${this.xcodebuild.logLocation}':`);\n try {\n let data = await fs.readFile(this.xcodebuild.logLocation, 'utf8');\n for (let line of data.split('\\n')) {\n xcodeLog.error(line);\n }\n } catch (err) {\n xcodeLog.error(`Unable to access xcodebuild log file: '${err.message}'`);\n }\n }\n this.xcodebuild.processExited = true;\n if (this.xcodebuild._wda_error_occurred || (!signal && code !== 0)) {\n return reject(new Error(`xcodebuild failed with code ${code}${EOL}` +\n `xcodebuild error message:${EOL}${this.xcodebuild._wda_error_message}`));\n }\n // in the case of just building, the process will exit and that is our finish\n if (buildOnly) {\n return resolve();\n }\n });\n\n return (async () => {\n try {\n const timer = new timing.Timer().start();\n await this.xcodebuild.start(true);\n if (!buildOnly) {\n let status = await this.waitForStart(timer);\n resolve(status);\n }\n } catch (err) {\n let msg = `Unable to start WebDriverAgent: ${err}`;\n this.log.error(msg);\n reject(new Error(msg));\n }\n })();\n });\n }\n\n async waitForStart (timer) {\n // try to connect once every 0.5 seconds, until `launchTimeout` is up\n this.log.debug(`Waiting up to ${this.launchTimeout}ms for WebDriverAgent to start`);\n let currentStatus = null;\n try {\n let retries = parseInt(this.launchTimeout / 500, 10);\n await retryInterval(retries, 1000, async () => {\n if (this.xcodebuild.processExited) {\n // there has been an error elsewhere and we need to short-circuit\n return;\n }\n const proxyTimeout = this.noSessionProxy.timeout;\n this.noSessionProxy.timeout = 1000;\n try {\n currentStatus = await this.noSessionProxy.command('/status', 'GET');\n if (currentStatus && currentStatus.ios && currentStatus.ios.ip) {\n this.agentUrl = currentStatus.ios.ip;\n }\n this.log.debug(`WebDriverAgent information:`);\n this.log.debug(JSON.stringify(currentStatus, null, 2));\n } catch (err) {\n throw new Error(`Unable to connect to running WebDriverAgent: ${err.message}`);\n } finally {\n this.noSessionProxy.timeout = proxyTimeout;\n }\n });\n\n if (this.xcodebuild.processExited) {\n // there has been an error elsewhere and we need to short-circuit\n return currentStatus;\n }\n\n this.log.debug(`WebDriverAgent successfully started after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n } catch (err) {\n // at this point, if we have not had any errors from xcode itself (reported\n // elsewhere), we can let this go through and try to create the session\n this.log.debug(err.message);\n this.log.warn(`Getting status of WebDriverAgent on device timed out. Continuing`);\n }\n return currentStatus;\n }\n\n async quit () {\n await killProcess('xcodebuild', this.xcodebuild);\n }\n}\n\nexport { XcodeBuild };\nexport default XcodeBuild;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-webdriveragent",
|
|
3
|
-
"version": "4.8.
|
|
3
|
+
"version": "4.8.6",
|
|
4
4
|
"description": "Package bundling WebDriverAgent",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"homepage": "https://github.com/appium/WebDriverAgent#readme",
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@appium/eslint-config-appium": "^6.0.0",
|
|
57
|
-
"@appium/test-support": "^
|
|
57
|
+
"@appium/test-support": "^2.0.0",
|
|
58
58
|
"@babel/cli": "^7.18.10",
|
|
59
59
|
"@babel/core": "^7.18.10",
|
|
60
60
|
"@babel/eslint-parser": "^7.18.9",
|
|
@@ -73,7 +73,6 @@
|
|
|
73
73
|
"eslint-plugin-mocha": "^9.0.0",
|
|
74
74
|
"eslint-plugin-promise": "^6.0.0",
|
|
75
75
|
"lint-staged": "^13.0.3",
|
|
76
|
-
"ios-uicatalog": "^3.5.0",
|
|
77
76
|
"mocha": "^10.0.0",
|
|
78
77
|
"pre-commit": "^1.2.2",
|
|
79
78
|
"prettier": "^2.7.1",
|