appium-android-driver 5.4.3 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/build/index.js +1 -9
  2. package/build/lib/android-helpers.js +10 -194
  3. package/build/lib/android-helpers.js.map +1 -1
  4. package/build/lib/bootstrap.js +4 -45
  5. package/build/lib/bootstrap.js.map +1 -1
  6. package/build/lib/commands/actions.js +3 -78
  7. package/build/lib/commands/actions.js.map +1 -1
  8. package/build/lib/commands/alert.js +3 -10
  9. package/build/lib/commands/alert.js.map +1 -1
  10. package/build/lib/commands/app-management.js +4 -32
  11. package/build/lib/commands/app-management.js.map +1 -1
  12. package/build/lib/commands/context.js +6 -78
  13. package/build/lib/commands/context.js.map +1 -1
  14. package/build/lib/commands/coverage.js +1 -6
  15. package/build/lib/commands/coverage.js.map +1 -1
  16. package/build/lib/commands/element.js +4 -47
  17. package/build/lib/commands/element.js.map +1 -1
  18. package/build/lib/commands/emu-console.js +2 -7
  19. package/build/lib/commands/emu-console.js.map +1 -1
  20. package/build/lib/commands/execute.js +1 -13
  21. package/build/lib/commands/execute.js.map +1 -1
  22. package/build/lib/commands/file-actions.js +3 -44
  23. package/build/lib/commands/file-actions.js.map +1 -1
  24. package/build/lib/commands/find.js +3 -16
  25. package/build/lib/commands/find.js.map +1 -1
  26. package/build/lib/commands/general.js +32 -91
  27. package/build/lib/commands/general.js.map +1 -1
  28. package/build/lib/commands/ime.js +3 -14
  29. package/build/lib/commands/ime.js.map +1 -1
  30. package/build/lib/commands/index.js +3 -27
  31. package/build/lib/commands/index.js.map +1 -1
  32. package/build/lib/commands/intent.js +1 -40
  33. package/build/lib/commands/intent.js.map +1 -1
  34. package/build/lib/commands/log.js +3 -35
  35. package/build/lib/commands/log.js.map +1 -1
  36. package/build/lib/commands/media-projection.js +2 -47
  37. package/build/lib/commands/media-projection.js.map +1 -1
  38. package/build/lib/commands/network.js +4 -40
  39. package/build/lib/commands/network.js.map +1 -1
  40. package/build/lib/commands/performance.js +5 -57
  41. package/build/lib/commands/performance.js.map +1 -1
  42. package/build/lib/commands/recordscreen.js +1 -59
  43. package/build/lib/commands/recordscreen.js.map +1 -1
  44. package/build/lib/commands/shell.js +1 -15
  45. package/build/lib/commands/shell.js.map +1 -1
  46. package/build/lib/commands/streamscreen.js +7 -74
  47. package/build/lib/commands/streamscreen.js.map +1 -1
  48. package/build/lib/commands/system-bars.js +1 -23
  49. package/build/lib/commands/system-bars.js.map +1 -1
  50. package/build/lib/commands/touch.js +13 -79
  51. package/build/lib/commands/touch.js.map +1 -1
  52. package/build/lib/desired-caps.js +3 -4
  53. package/build/lib/desired-caps.js.map +1 -1
  54. package/build/lib/driver.js +8 -97
  55. package/build/lib/driver.js.map +1 -1
  56. package/build/lib/logger.js +1 -5
  57. package/build/lib/logger.js.map +1 -1
  58. package/build/lib/uiautomator.js +3 -24
  59. package/build/lib/uiautomator.js.map +1 -1
  60. package/build/lib/unlock-helpers.js +1 -61
  61. package/build/lib/unlock-helpers.js.map +1 -1
  62. package/build/lib/utils.js +1 -7
  63. package/build/lib/utils.js.map +1 -1
  64. package/build/lib/webview-helpers.js +1 -94
  65. package/build/lib/webview-helpers.js.map +1 -1
  66. package/lib/android-helpers.js +2 -1
  67. package/lib/commands/general.js +34 -15
  68. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","names":["APP_EXTENSION","DEVICE_PORT","NO_PROXY","RegExp","AndroidDriver","BaseDriver","constructor","opts","shouldValidateCaps","locatorStrategies","desiredCapConstraints","desiredConstraints","sessionChromedrivers","jwpProxyActive","jwpProxyAvoid","_","clone","settings","DeviceSettings","ignoreUnimportantViews","onSettingsUpdate","bind","chromedriver","apkStrings","unlocker","helpers","cmd","fn","toPairs","commands","prototype","curContext","defaultContextName","createSession","args","sessionId","caps","serverDetails","platform","webStorageEnabled","takesScreenshot","javascriptEnabled","databaseEnabled","networkConnectionEnabled","locationContextEnabled","warnings","desired","Object","assign","defaultOpts","action","category","flags","disableAndroidWatchers","tmpDir","tempDir","staticDir","fullReset","autoLaunch","adbPort","DEFAULT_ADB_PORT","bootstrapPort","androidInstallTimeout","defaults","useUnlockHelperApp","isUndefined","unlockType","noReset","fastReset","skipUninstall","isChromeSession","adjustBrowserSessionCaps","nativeWebScreenshot","push","reboot","setAvdFromCapabilities","udid","emPort","getDeviceInfoFromCaps","adb","createADB","suppressKillServer","remoteAdbHost","clearDeviceLogsOnStart","adbExecTimeout","allowOfflineDevices","getApiLevel","log","warn","isPackageOrBundle","app","appPackage","configureApp","checkAppPresent","appOnDevice","info","checkPackagePresent","util","hasValue","networkSpeed","isEmulator","ensureNetworkSpeed","gpsEnabled","toggleGPSLocationProvider","startAndroidSession","e","deleteSession","ign","avd","deviceName","errorAndThrow","platformVersion","avdDevice","replace","isChromeBrowser","browserName","key","value","setCompressedLayoutHierarchy","defaultIME","initDevice","curDeviceId","deviceUDID","getPlatformVersion","deviceScreenSize","getScreenSize","deviceModel","getModel","deviceManufacturer","getManufacturer","disableWindowAnimation","isAnimationOn","setHiddenApiPolicy","ignoreHiddenApiPolicyError","setAnimationState","_wasWindowAnimationDisabled","initAUT","bootstrap","websocket","start","acceptSslCerts","onUnexpectedShutdown","err","ignoreUnexpectedShutdown","startUnexpectedShutdown","skipUnlock","unlock","update","startChromeSession","startAUT","orientation","debug","setOrientation","initAutoWebview","autoWebview","viewName","defaultWebviewName","timeout","autoWebviewTimeout","retryInterval","setContext","launchInfo","getLaunchInfo","uninstallOtherPackages","validateDesiredCaps","parseArray","SETTINGS_HELPER_PKG_ID","otherApps","message","B","all","map","installOtherApks","resetApp","uninstallApk","installApk","apkStringsForLanguage","pushStrings","language","sharedPreferences","setSharedPreferences","fs","exists","shell","compress","sendAction","compressLayout","isEmpty","_screenRecordingProperties","stopRecordingScreen","removeAllSessionWebSocketHandlers","server","mobileStopScreenStreaming","stopChromedriverProxies","unicodeKeyboard","resetKeyboard","setIME","dontStopAppOnReset","forceStop","goToHome","shutdown","stopLogcat","setDefaultHiddenApiPolicy","avdName","killEmulator","sharedPrefs","name","JSON","stringify","remotePath","remoteFile","localPath","builder","getPrefsBuilder","build","prefs","toFile","unlink","SharedPrefsBuilder","proxyActive","getProxyAvoidList","canProxy","isFunction","proxyReqRes"],"sources":["../../lib/driver.js"],"sourcesContent":["import { BaseDriver, DeviceSettings } from 'appium/driver';\nimport desiredConstraints from './desired-caps';\nimport commands from './commands/index';\nimport {\n helpers, ensureNetworkSpeed,\n SETTINGS_HELPER_PKG_ID,\n} from './android-helpers';\nimport _ from 'lodash';\nimport { DEFAULT_ADB_PORT } from 'appium-adb';\nimport { fs, tempDir, util } from 'appium/support';\nimport { retryInterval } from 'asyncbox';\nimport { SharedPrefsBuilder } from 'shared-preferences-builder';\nimport B from 'bluebird';\n\nconst APP_EXTENSION = '.apk';\nconst DEVICE_PORT = 4724;\n\n// This is a set of methods and paths that we never want to proxy to\n// Chromedriver\nconst NO_PROXY = [\n ['POST', new RegExp('^/session/[^/]+/context')],\n ['GET', new RegExp('^/session/[^/]+/context')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/touch/perform')],\n ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')],\n ['POST', new RegExp('^/session/[^/]+/orientation')],\n ['GET', new RegExp('^/session/[^/]+/orientation')],\n ['POST', new RegExp('^/session/[^/]+/execute')],\n ['POST', new RegExp('^/session/[^/]+/execute/sync')],\n ['GET', new RegExp('^/session/[^/]+/network_connection')],\n ['POST', new RegExp('^/session/[^/]+/network_connection')],\n];\n\nclass AndroidDriver extends BaseDriver {\n constructor (opts = {}, shouldValidateCaps = true) {\n super(opts, shouldValidateCaps);\n\n this.locatorStrategies = [\n 'xpath',\n 'id',\n 'class name',\n 'accessibility id',\n '-android uiautomator'\n ];\n this.desiredCapConstraints = desiredConstraints;\n this.sessionChromedrivers = {};\n this.jwpProxyActive = false;\n this.jwpProxyAvoid = _.clone(NO_PROXY);\n this.settings = new DeviceSettings({ignoreUnimportantViews: false},\n this.onSettingsUpdate.bind(this));\n this.chromedriver = null;\n this.apkStrings = {};\n this.unlocker = helpers.unlocker;\n\n for (let [cmd, fn] of _.toPairs(commands)) {\n AndroidDriver.prototype[cmd] = fn;\n }\n\n // needs to be after the line which assigns commands to AndroidDriver.prototype, so that `this.defaultContextName` is defined.\n this.curContext = this.defaultContextName();\n }\n\n async createSession (...args) {\n // the whole createSession flow is surrounded in a try-catch statement\n // if creating a session fails at any point, we teardown everything we\n // set up before throwing the error.\n try {\n let [sessionId, caps] = await super.createSession(...args);\n\n let serverDetails = {\n platform: 'LINUX',\n webStorageEnabled: false,\n takesScreenshot: true,\n javascriptEnabled: true,\n databaseEnabled: false,\n networkConnectionEnabled: true,\n locationContextEnabled: false,\n warnings: {},\n desired: this.caps\n };\n\n this.caps = Object.assign(serverDetails, this.caps);\n\n // assigning defaults\n let defaultOpts = {\n action: 'android.intent.action.MAIN',\n category: 'android.intent.category.LAUNCHER',\n flags: '0x10200000',\n disableAndroidWatchers: false,\n tmpDir: await tempDir.staticDir(),\n fullReset: false,\n autoLaunch: true,\n adbPort: DEFAULT_ADB_PORT,\n bootstrapPort: DEVICE_PORT,\n androidInstallTimeout: 90000,\n };\n _.defaults(this.opts, defaultOpts);\n this.useUnlockHelperApp = _.isUndefined(this.caps.unlockType);\n\n // not user visible via caps\n if (this.opts.noReset === true) {\n this.opts.fullReset = false;\n }\n if (this.opts.fullReset === true) {\n this.opts.noReset = false;\n }\n this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;\n this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;\n\n if (this.isChromeSession) {\n helpers.adjustBrowserSessionCaps(this.opts);\n }\n\n if (this.opts.nativeWebScreenshot) {\n this.jwpProxyAvoid.push(['GET', new RegExp('^/session/[^/]+/screenshot')]);\n }\n\n if (this.opts.reboot) {\n this.setAvdFromCapabilities(caps);\n }\n\n // get device udid for this session\n let {udid, emPort} = await helpers.getDeviceInfoFromCaps(this.opts);\n this.opts.udid = udid;\n this.opts.emPort = emPort;\n\n // set up an instance of ADB\n this.adb = await helpers.createADB({\n udid: this.opts.udid,\n emPort: this.opts.emPort,\n adbPort: this.opts.adbPort,\n suppressKillServer: this.opts.suppressKillServer,\n remoteAdbHost: this.opts.remoteAdbHost,\n clearDeviceLogsOnStart: this.opts.clearDeviceLogsOnStart,\n adbExecTimeout: this.opts.adbExecTimeout,\n allowOfflineDevices: this.opts.allowOfflineDevices,\n });\n\n if (await this.adb.getApiLevel() >= 23) {\n this.log.warn(\"Consider setting 'automationName' capability to \" +\n \"'uiautomator2' on Android >= 6, since UIAutomator framework \" +\n 'is not maintained anymore by the OS vendor.');\n }\n\n if (this.helpers.isPackageOrBundle(this.opts.app)) {\n // user provided package instead of app for 'app' capability, massage options\n this.opts.appPackage = this.opts.app;\n this.opts.app = null;\n }\n\n if (this.opts.app) {\n // find and copy, or download and unzip an app url or path\n this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);\n await this.checkAppPresent();\n } else if (this.appOnDevice) {\n // the app isn't an actual app file but rather something we want to\n // assume is on the device and just launch via the appPackage\n this.log.info(`App file was not listed, instead we're going to run ` +\n `${this.opts.appPackage} directly on the device`);\n await this.checkPackagePresent();\n }\n\n // Some cloud services using appium launch the avd themselves, so we ensure netspeed\n // is set for emulators by calling adb.networkSpeed before running the app\n if (util.hasValue(this.opts.networkSpeed)) {\n if (!this.isEmulator()) {\n this.log.warn('Sorry, networkSpeed capability is only available for emulators');\n } else {\n const networkSpeed = ensureNetworkSpeed(this.adb, this.opts.networkSpeed);\n await this.adb.networkSpeed(networkSpeed);\n }\n }\n // check if we have to enable/disable gps before running the application\n if (util.hasValue(this.opts.gpsEnabled)) {\n if (this.isEmulator()) {\n this.log.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);\n await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);\n } else {\n this.log.warn('Sorry! gpsEnabled capability is only available for emulators');\n }\n }\n\n await this.startAndroidSession(this.opts);\n return [sessionId, this.caps];\n } catch (e) {\n // ignoring delete session exception if any and throw the real error\n // that happened while creating the session.\n try {\n await this.deleteSession();\n } catch (ign) {}\n throw e;\n }\n }\n\n isEmulator () {\n return helpers.isEmulator(this.adb, this.opts);\n }\n\n setAvdFromCapabilities (caps) {\n if (this.opts.avd) {\n this.log.info('avd name defined, ignoring device name and platform version');\n } else {\n if (!caps.deviceName) {\n this.log.errorAndThrow('avd or deviceName should be specified when reboot option is enables');\n }\n if (!caps.platformVersion) {\n this.log.errorAndThrow('avd or platformVersion should be specified when reboot option is enabled');\n }\n let avdDevice = caps.deviceName.replace(/[^a-zA-Z0-9_.]/g, '-');\n this.opts.avd = `${avdDevice}__${caps.platformVersion}`;\n }\n }\n\n get appOnDevice () {\n return this.helpers.isPackageOrBundle(this.opts.app) || (!this.opts.app &&\n this.helpers.isPackageOrBundle(this.opts.appPackage));\n }\n\n get isChromeSession () {\n return helpers.isChromeBrowser(this.opts.browserName);\n }\n\n async onSettingsUpdate (key, value) {\n if (key === 'ignoreUnimportantViews') {\n await this.setCompressedLayoutHierarchy(value);\n }\n }\n\n async startAndroidSession () {\n this.log.info(`Starting Android session`);\n // set up the device to run on (real or emulator, etc)\n this.defaultIME = await helpers.initDevice(this.adb, this.opts);\n\n // set actual device name, udid, platform version, screen size, model and manufacturer details.\n this.caps.deviceName = this.adb.curDeviceId;\n this.caps.deviceUDID = this.opts.udid;\n this.caps.platformVersion = await this.adb.getPlatformVersion();\n this.caps.deviceScreenSize = await this.adb.getScreenSize();\n this.caps.deviceModel = await this.adb.getModel();\n this.caps.deviceManufacturer = await this.adb.getManufacturer();\n\n if (this.opts.disableWindowAnimation) {\n if (await this.adb.isAnimationOn()) {\n if (await this.adb.getApiLevel() >= 28) { // API level 28 is Android P\n // Don't forget to reset the relaxing in delete session\n this.log.warn('Relaxing hidden api policy to manage animation scale');\n await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);\n }\n\n this.log.info('Disabling window animation as it is requested by \"disableWindowAnimation\" capability');\n await this.adb.setAnimationState(false);\n this._wasWindowAnimationDisabled = true;\n } else {\n this.log.info('Window animation is already disabled');\n }\n }\n\n // set up app under test\n await this.initAUT();\n\n // start UiAutomator\n this.bootstrap = new helpers.bootstrap(this.adb, this.opts.bootstrapPort, this.opts.websocket);\n await this.bootstrap.start(this.opts.appPackage, this.opts.disableAndroidWatchers, this.opts.acceptSslCerts);\n // handling unexpected shutdown\n (async () => {\n try {\n await this.bootstrap.onUnexpectedShutdown;\n } catch (err) {\n if (!this.bootstrap.ignoreUnexpectedShutdown) {\n await this.startUnexpectedShutdown(err);\n }\n }\n })();\n\n\n if (!this.opts.skipUnlock) {\n // Let's try to unlock the device\n await helpers.unlock(this, this.adb, this.caps);\n }\n\n // Set CompressedLayoutHierarchy on the device based on current settings object\n // this has to happen _after_ bootstrap is initialized\n if (this.opts.ignoreUnimportantViews) {\n await this.settings.update({ignoreUnimportantViews: this.opts.ignoreUnimportantViews});\n }\n\n if (this.isChromeSession) {\n // start a chromedriver session and proxy to it\n await this.startChromeSession();\n } else {\n if (this.opts.autoLaunch) {\n // start app\n await this.startAUT();\n }\n }\n\n if (util.hasValue(this.opts.orientation)) {\n this.log.debug(`Setting initial orientation to '${this.opts.orientation}'`);\n await this.setOrientation(this.opts.orientation);\n }\n\n await this.initAutoWebview();\n }\n\n async initAutoWebview () {\n if (this.opts.autoWebview) {\n let viewName = this.defaultWebviewName();\n let timeout = (this.opts.autoWebviewTimeout) || 2000;\n\n this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);\n\n // try every 500ms until timeout is over\n await retryInterval(timeout / 500, 500, async () => {\n await this.setContext(viewName);\n });\n }\n }\n\n async initAUT () {\n // populate appPackage, appActivity, appWaitPackage, appWaitActivity,\n // and the device being used\n // in the opts and caps (so it gets back to the user on session creation)\n let launchInfo = await helpers.getLaunchInfo(this.adb, this.opts);\n Object.assign(this.opts, launchInfo);\n Object.assign(this.caps, launchInfo);\n\n // Uninstall any uninstallOtherPackages which were specified in caps\n if (this.opts.uninstallOtherPackages) {\n helpers.validateDesiredCaps(this.opts);\n // Only SETTINGS_HELPER_PKG_ID package is used by UIA1\n await helpers.uninstallOtherPackages(\n this.adb,\n helpers.parseArray(this.opts.uninstallOtherPackages),\n [SETTINGS_HELPER_PKG_ID]\n );\n }\n\n // Install any \"otherApps\" that were specified in caps\n if (this.opts.otherApps) {\n let otherApps;\n try {\n otherApps = helpers.parseArray(this.opts.otherApps);\n } catch (e) {\n this.log.errorAndThrow(`Could not parse \"otherApps\" capability: ${e.message}`);\n }\n otherApps = await B.all(otherApps.map((app) => this.helpers.configureApp(app, APP_EXTENSION)));\n await helpers.installOtherApks(otherApps, this.adb, this.opts);\n }\n\n // install app\n if (!this.opts.app) {\n if (this.opts.fullReset) {\n this.log.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');\n }\n this.log.debug('No app capability. Assuming it is already on the device');\n if (this.opts.fastReset) {\n await helpers.resetApp(this.adb, this.opts);\n }\n return;\n }\n if (!this.opts.skipUninstall) {\n await this.adb.uninstallApk(this.opts.appPackage);\n }\n await helpers.installApk(this.adb, this.opts);\n const apkStringsForLanguage = await helpers.pushStrings(this.opts.language, this.adb, this.opts);\n if (this.opts.language) {\n this.apkStrings[this.opts.language] = apkStringsForLanguage;\n }\n\n // This must run after installing the apk, otherwise it would cause the\n // install to fail. And before running the app.\n if (!_.isUndefined(this.opts.sharedPreferences)) {\n await this.setSharedPreferences(this.opts);\n }\n }\n\n async checkAppPresent () {\n this.log.debug('Checking whether app is actually present');\n if (!(await fs.exists(this.opts.app))) {\n this.log.errorAndThrow(`Could not find app apk at ${this.opts.app}`);\n }\n }\n\n async checkPackagePresent () {\n this.log.debug('Checking whether package is present on the device');\n if (!(await this.adb.shell(['pm', 'list', 'packages', this.opts.appPackage]))) {\n this.log.errorAndThrow(`Could not find package ${this.opts.appPackage} on the device`);\n }\n }\n\n // Set CompressedLayoutHierarchy on the device\n async setCompressedLayoutHierarchy (compress) {\n await this.bootstrap.sendAction('compressedLayoutHierarchy', {compressLayout: compress});\n }\n\n async deleteSession () {\n this.log.debug('Shutting down Android driver');\n\n try {\n if (!_.isEmpty(this._screenRecordingProperties)) {\n await this.stopRecordingScreen();\n }\n } catch (ign) {}\n\n await helpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);\n\n await this.mobileStopScreenStreaming();\n\n await super.deleteSession();\n\n if (this.bootstrap) {\n // certain cleanup we only care to do if the bootstrap was ever run\n await this.stopChromedriverProxies();\n if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {\n this.log.debug(`Resetting IME to ${this.defaultIME}`);\n await this.adb?.setIME(this.defaultIME);\n }\n if (!this.isChromeSession && !this.opts.dontStopAppOnReset) {\n await this.adb?.forceStop(this.opts.appPackage);\n }\n await this.adb?.goToHome();\n if (this.opts.fullReset && !this.opts.skipUninstall && !this.appOnDevice) {\n await this.adb?.uninstallApk(this.opts.appPackage);\n }\n await this.bootstrap.shutdown();\n this.bootstrap = null;\n } else {\n this.log.debug(\"Called deleteSession but bootstrap wasn't active\");\n }\n // some cleanup we want to do regardless, in case we are shutting down\n // mid-startup\n await this.adb?.stopLogcat();\n if (this.useUnlockHelperApp) {\n await this.adb?.forceStop('io.appium.unlock');\n }\n if (this._wasWindowAnimationDisabled) {\n this.log.info('Restoring window animation state');\n await this.adb?.setAnimationState(true);\n\n // This was necessary to change animation scale over Android P. We must reset the policy for the security.\n if (await this.adb?.getApiLevel() >= 28) {\n this.log.info('Restoring hidden api policy to the device default configuration');\n await this.adb?.setDefaultHiddenApiPolicy(!!this.opts.ignoreHiddenApiPolicyError);\n }\n }\n\n if (this.opts.reboot) {\n let avdName = this.opts.avd.replace('@', '');\n this.log.debug(`closing emulator '${avdName}'`);\n await this.adb?.killEmulator(avdName);\n }\n }\n\n async setSharedPreferences () {\n let sharedPrefs = this.opts.sharedPreferences;\n this.log.info('Trying to set shared preferences');\n let name = sharedPrefs.name;\n if (_.isUndefined(name)) {\n this.log.warn(`Skipping setting Shared preferences, name is undefined: ${JSON.stringify(sharedPrefs)}`);\n return false;\n }\n let remotePath = `/data/data/${this.opts.appPackage}/shared_prefs`;\n let remoteFile = `${remotePath}/${name}.xml`;\n let localPath = `/tmp/${name}.xml`;\n let builder = this.getPrefsBuilder();\n builder.build(sharedPrefs.prefs);\n this.log.info(`Creating temporary shared preferences: ${localPath}`);\n builder.toFile(localPath);\n this.log.info(`Creating shared_prefs remote folder: ${remotePath}`);\n await this.adb.shell(['mkdir', '-p', remotePath]);\n this.log.info(`Pushing shared_prefs to ${remoteFile}`);\n await this.adb.push(localPath, remoteFile);\n try {\n this.log.info(`Trying to remove shared preferences temporary file`);\n if (await fs.exists(localPath)) {\n await fs.unlink(localPath);\n }\n } catch (e) {\n this.log.warn(`Error trying to remove temporary file ${localPath}`);\n }\n return true;\n }\n\n getPrefsBuilder () {\n /* Add this method to create a new SharedPrefsBuilder instead of\n * directly creating the object on setSharedPreferences for testing purposes\n */\n return new SharedPrefsBuilder();\n }\n\n validateDesiredCaps (caps) {\n if (!super.validateDesiredCaps(caps)) {\n return false;\n }\n if ((!caps.browserName || !helpers.isChromeBrowser(caps.browserName)) && !caps.app && !caps.appPackage) {\n this.log.errorAndThrow('The desired capabilities must include either an app, appPackage or browserName');\n }\n return helpers.validateDesiredCaps(caps);\n }\n\n proxyActive (sessionId) {\n super.proxyActive(sessionId);\n\n return this.jwpProxyActive;\n }\n\n getProxyAvoidList (sessionId) {\n super.getProxyAvoidList(sessionId);\n\n return this.jwpProxyAvoid;\n }\n\n canProxy (sessionId) {\n super.canProxy(sessionId);\n\n // this will change depending on ChromeDriver status\n return _.isFunction(this.proxyReqRes);\n }\n}\n\nexport { AndroidDriver };\nexport default AndroidDriver;\n"],"mappings":"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"}
1
+ {"version":3,"file":"driver.js","names":["APP_EXTENSION","DEVICE_PORT","NO_PROXY","RegExp","AndroidDriver","BaseDriver","constructor","opts","shouldValidateCaps","locatorStrategies","desiredCapConstraints","desiredConstraints","sessionChromedrivers","jwpProxyActive","jwpProxyAvoid","_","clone","settings","DeviceSettings","ignoreUnimportantViews","onSettingsUpdate","bind","chromedriver","apkStrings","unlocker","helpers","cmd","fn","toPairs","commands","prototype","curContext","defaultContextName","createSession","args","sessionId","caps","serverDetails","platform","webStorageEnabled","takesScreenshot","javascriptEnabled","databaseEnabled","networkConnectionEnabled","locationContextEnabled","warnings","desired","Object","assign","defaultOpts","action","category","flags","disableAndroidWatchers","tmpDir","tempDir","staticDir","fullReset","autoLaunch","adbPort","DEFAULT_ADB_PORT","bootstrapPort","androidInstallTimeout","defaults","useUnlockHelperApp","isUndefined","unlockType","noReset","fastReset","skipUninstall","isChromeSession","adjustBrowserSessionCaps","nativeWebScreenshot","push","reboot","setAvdFromCapabilities","udid","emPort","getDeviceInfoFromCaps","adb","createADB","suppressKillServer","remoteAdbHost","clearDeviceLogsOnStart","adbExecTimeout","allowOfflineDevices","getApiLevel","log","warn","isPackageOrBundle","app","appPackage","configureApp","checkAppPresent","appOnDevice","info","checkPackagePresent","util","hasValue","networkSpeed","isEmulator","ensureNetworkSpeed","gpsEnabled","toggleGPSLocationProvider","startAndroidSession","e","deleteSession","ign","avd","deviceName","errorAndThrow","platformVersion","avdDevice","replace","isChromeBrowser","browserName","key","value","setCompressedLayoutHierarchy","defaultIME","initDevice","curDeviceId","deviceUDID","getPlatformVersion","deviceScreenSize","getScreenSize","deviceModel","getModel","deviceManufacturer","getManufacturer","disableWindowAnimation","isAnimationOn","setHiddenApiPolicy","ignoreHiddenApiPolicyError","setAnimationState","_wasWindowAnimationDisabled","initAUT","bootstrap","websocket","start","acceptSslCerts","onUnexpectedShutdown","err","ignoreUnexpectedShutdown","startUnexpectedShutdown","skipUnlock","unlock","update","startChromeSession","startAUT","orientation","debug","setOrientation","initAutoWebview","autoWebview","viewName","defaultWebviewName","timeout","autoWebviewTimeout","retryInterval","setContext","launchInfo","getLaunchInfo","uninstallOtherPackages","validateDesiredCaps","parseArray","SETTINGS_HELPER_PKG_ID","otherApps","message","B","all","map","installOtherApks","resetApp","uninstallApk","installApk","apkStringsForLanguage","pushStrings","language","sharedPreferences","setSharedPreferences","fs","exists","shell","compress","sendAction","compressLayout","isEmpty","_screenRecordingProperties","stopRecordingScreen","removeAllSessionWebSocketHandlers","server","mobileStopScreenStreaming","stopChromedriverProxies","unicodeKeyboard","resetKeyboard","setIME","dontStopAppOnReset","forceStop","goToHome","shutdown","stopLogcat","setDefaultHiddenApiPolicy","avdName","killEmulator","sharedPrefs","name","JSON","stringify","remotePath","remoteFile","localPath","builder","getPrefsBuilder","build","prefs","toFile","unlink","SharedPrefsBuilder","proxyActive","getProxyAvoidList","canProxy","isFunction","proxyReqRes"],"sources":["../../lib/driver.js"],"sourcesContent":["import { BaseDriver, DeviceSettings } from 'appium/driver';\nimport desiredConstraints from './desired-caps';\nimport commands from './commands/index';\nimport {\n helpers, ensureNetworkSpeed,\n SETTINGS_HELPER_PKG_ID,\n} from './android-helpers';\nimport _ from 'lodash';\nimport { DEFAULT_ADB_PORT } from 'appium-adb';\nimport { fs, tempDir, util } from 'appium/support';\nimport { retryInterval } from 'asyncbox';\nimport { SharedPrefsBuilder } from 'shared-preferences-builder';\nimport B from 'bluebird';\n\nconst APP_EXTENSION = '.apk';\nconst DEVICE_PORT = 4724;\n\n// This is a set of methods and paths that we never want to proxy to\n// Chromedriver\nconst NO_PROXY = [\n ['POST', new RegExp('^/session/[^/]+/context')],\n ['GET', new RegExp('^/session/[^/]+/context')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/touch/perform')],\n ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')],\n ['POST', new RegExp('^/session/[^/]+/orientation')],\n ['GET', new RegExp('^/session/[^/]+/orientation')],\n ['POST', new RegExp('^/session/[^/]+/execute')],\n ['POST', new RegExp('^/session/[^/]+/execute/sync')],\n ['GET', new RegExp('^/session/[^/]+/network_connection')],\n ['POST', new RegExp('^/session/[^/]+/network_connection')],\n];\n\nclass AndroidDriver extends BaseDriver {\n constructor (opts = {}, shouldValidateCaps = true) {\n super(opts, shouldValidateCaps);\n\n this.locatorStrategies = [\n 'xpath',\n 'id',\n 'class name',\n 'accessibility id',\n '-android uiautomator'\n ];\n this.desiredCapConstraints = desiredConstraints;\n this.sessionChromedrivers = {};\n this.jwpProxyActive = false;\n this.jwpProxyAvoid = _.clone(NO_PROXY);\n this.settings = new DeviceSettings({ignoreUnimportantViews: false},\n this.onSettingsUpdate.bind(this));\n this.chromedriver = null;\n this.apkStrings = {};\n this.unlocker = helpers.unlocker;\n\n for (let [cmd, fn] of _.toPairs(commands)) {\n AndroidDriver.prototype[cmd] = fn;\n }\n\n // needs to be after the line which assigns commands to AndroidDriver.prototype, so that `this.defaultContextName` is defined.\n this.curContext = this.defaultContextName();\n }\n\n async createSession (...args) {\n // the whole createSession flow is surrounded in a try-catch statement\n // if creating a session fails at any point, we teardown everything we\n // set up before throwing the error.\n try {\n let [sessionId, caps] = await super.createSession(...args);\n\n let serverDetails = {\n platform: 'LINUX',\n webStorageEnabled: false,\n takesScreenshot: true,\n javascriptEnabled: true,\n databaseEnabled: false,\n networkConnectionEnabled: true,\n locationContextEnabled: false,\n warnings: {},\n desired: this.caps\n };\n\n this.caps = Object.assign(serverDetails, this.caps);\n\n // assigning defaults\n let defaultOpts = {\n action: 'android.intent.action.MAIN',\n category: 'android.intent.category.LAUNCHER',\n flags: '0x10200000',\n disableAndroidWatchers: false,\n tmpDir: await tempDir.staticDir(),\n fullReset: false,\n autoLaunch: true,\n adbPort: DEFAULT_ADB_PORT,\n bootstrapPort: DEVICE_PORT,\n androidInstallTimeout: 90000,\n };\n _.defaults(this.opts, defaultOpts);\n this.useUnlockHelperApp = _.isUndefined(this.caps.unlockType);\n\n // not user visible via caps\n if (this.opts.noReset === true) {\n this.opts.fullReset = false;\n }\n if (this.opts.fullReset === true) {\n this.opts.noReset = false;\n }\n this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;\n this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;\n\n if (this.isChromeSession) {\n helpers.adjustBrowserSessionCaps(this.opts);\n }\n\n if (this.opts.nativeWebScreenshot) {\n this.jwpProxyAvoid.push(['GET', new RegExp('^/session/[^/]+/screenshot')]);\n }\n\n if (this.opts.reboot) {\n this.setAvdFromCapabilities(caps);\n }\n\n // get device udid for this session\n let {udid, emPort} = await helpers.getDeviceInfoFromCaps(this.opts);\n this.opts.udid = udid;\n this.opts.emPort = emPort;\n\n // set up an instance of ADB\n this.adb = await helpers.createADB({\n udid: this.opts.udid,\n emPort: this.opts.emPort,\n adbPort: this.opts.adbPort,\n suppressKillServer: this.opts.suppressKillServer,\n remoteAdbHost: this.opts.remoteAdbHost,\n clearDeviceLogsOnStart: this.opts.clearDeviceLogsOnStart,\n adbExecTimeout: this.opts.adbExecTimeout,\n allowOfflineDevices: this.opts.allowOfflineDevices,\n });\n\n if (await this.adb.getApiLevel() >= 23) {\n this.log.warn(\"Consider setting 'automationName' capability to \" +\n \"'uiautomator2' on Android >= 6, since UIAutomator framework \" +\n 'is not maintained anymore by the OS vendor.');\n }\n\n if (this.helpers.isPackageOrBundle(this.opts.app)) {\n // user provided package instead of app for 'app' capability, massage options\n this.opts.appPackage = this.opts.app;\n this.opts.app = null;\n }\n\n if (this.opts.app) {\n // find and copy, or download and unzip an app url or path\n this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);\n await this.checkAppPresent();\n } else if (this.appOnDevice) {\n // the app isn't an actual app file but rather something we want to\n // assume is on the device and just launch via the appPackage\n this.log.info(`App file was not listed, instead we're going to run ` +\n `${this.opts.appPackage} directly on the device`);\n await this.checkPackagePresent();\n }\n\n // Some cloud services using appium launch the avd themselves, so we ensure netspeed\n // is set for emulators by calling adb.networkSpeed before running the app\n if (util.hasValue(this.opts.networkSpeed)) {\n if (!this.isEmulator()) {\n this.log.warn('Sorry, networkSpeed capability is only available for emulators');\n } else {\n const networkSpeed = ensureNetworkSpeed(this.adb, this.opts.networkSpeed);\n await this.adb.networkSpeed(networkSpeed);\n }\n }\n // check if we have to enable/disable gps before running the application\n if (util.hasValue(this.opts.gpsEnabled)) {\n if (this.isEmulator()) {\n this.log.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);\n await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);\n } else {\n this.log.warn('Sorry! gpsEnabled capability is only available for emulators');\n }\n }\n\n await this.startAndroidSession(this.opts);\n return [sessionId, this.caps];\n } catch (e) {\n // ignoring delete session exception if any and throw the real error\n // that happened while creating the session.\n try {\n await this.deleteSession();\n } catch (ign) {}\n throw e;\n }\n }\n\n isEmulator () {\n return helpers.isEmulator(this.adb, this.opts);\n }\n\n setAvdFromCapabilities (caps) {\n if (this.opts.avd) {\n this.log.info('avd name defined, ignoring device name and platform version');\n } else {\n if (!caps.deviceName) {\n this.log.errorAndThrow('avd or deviceName should be specified when reboot option is enables');\n }\n if (!caps.platformVersion) {\n this.log.errorAndThrow('avd or platformVersion should be specified when reboot option is enabled');\n }\n let avdDevice = caps.deviceName.replace(/[^a-zA-Z0-9_.]/g, '-');\n this.opts.avd = `${avdDevice}__${caps.platformVersion}`;\n }\n }\n\n get appOnDevice () {\n return this.helpers.isPackageOrBundle(this.opts.app) || (!this.opts.app &&\n this.helpers.isPackageOrBundle(this.opts.appPackage));\n }\n\n get isChromeSession () {\n return helpers.isChromeBrowser(this.opts.browserName);\n }\n\n async onSettingsUpdate (key, value) {\n if (key === 'ignoreUnimportantViews') {\n await this.setCompressedLayoutHierarchy(value);\n }\n }\n\n async startAndroidSession () {\n this.log.info(`Starting Android session`);\n // set up the device to run on (real or emulator, etc)\n this.defaultIME = await helpers.initDevice(this.adb, this.opts);\n\n // set actual device name, udid, platform version, screen size, model and manufacturer details.\n this.caps.deviceName = this.adb.curDeviceId;\n this.caps.deviceUDID = this.opts.udid;\n this.caps.platformVersion = await this.adb.getPlatformVersion();\n this.caps.deviceScreenSize = await this.adb.getScreenSize();\n this.caps.deviceModel = await this.adb.getModel();\n this.caps.deviceManufacturer = await this.adb.getManufacturer();\n\n if (this.opts.disableWindowAnimation) {\n if (await this.adb.isAnimationOn()) {\n if (await this.adb.getApiLevel() >= 28) { // API level 28 is Android P\n // Don't forget to reset the relaxing in delete session\n this.log.warn('Relaxing hidden api policy to manage animation scale');\n await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);\n }\n\n this.log.info('Disabling window animation as it is requested by \"disableWindowAnimation\" capability');\n await this.adb.setAnimationState(false);\n this._wasWindowAnimationDisabled = true;\n } else {\n this.log.info('Window animation is already disabled');\n }\n }\n\n // set up app under test\n await this.initAUT();\n\n // start UiAutomator\n this.bootstrap = new helpers.bootstrap(this.adb, this.opts.bootstrapPort, this.opts.websocket);\n await this.bootstrap.start(this.opts.appPackage, this.opts.disableAndroidWatchers, this.opts.acceptSslCerts);\n // handling unexpected shutdown\n (async () => {\n try {\n await this.bootstrap.onUnexpectedShutdown;\n } catch (err) {\n if (!this.bootstrap.ignoreUnexpectedShutdown) {\n await this.startUnexpectedShutdown(err);\n }\n }\n })();\n\n\n if (!this.opts.skipUnlock) {\n // Let's try to unlock the device\n await helpers.unlock(this, this.adb, this.caps);\n }\n\n // Set CompressedLayoutHierarchy on the device based on current settings object\n // this has to happen _after_ bootstrap is initialized\n if (this.opts.ignoreUnimportantViews) {\n await this.settings.update({ignoreUnimportantViews: this.opts.ignoreUnimportantViews});\n }\n\n if (this.isChromeSession) {\n // start a chromedriver session and proxy to it\n await this.startChromeSession();\n } else {\n if (this.opts.autoLaunch) {\n // start app\n await this.startAUT();\n }\n }\n\n if (util.hasValue(this.opts.orientation)) {\n this.log.debug(`Setting initial orientation to '${this.opts.orientation}'`);\n await this.setOrientation(this.opts.orientation);\n }\n\n await this.initAutoWebview();\n }\n\n async initAutoWebview () {\n if (this.opts.autoWebview) {\n let viewName = this.defaultWebviewName();\n let timeout = (this.opts.autoWebviewTimeout) || 2000;\n\n this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);\n\n // try every 500ms until timeout is over\n await retryInterval(timeout / 500, 500, async () => {\n await this.setContext(viewName);\n });\n }\n }\n\n async initAUT () {\n // populate appPackage, appActivity, appWaitPackage, appWaitActivity,\n // and the device being used\n // in the opts and caps (so it gets back to the user on session creation)\n let launchInfo = await helpers.getLaunchInfo(this.adb, this.opts);\n Object.assign(this.opts, launchInfo);\n Object.assign(this.caps, launchInfo);\n\n // Uninstall any uninstallOtherPackages which were specified in caps\n if (this.opts.uninstallOtherPackages) {\n helpers.validateDesiredCaps(this.opts);\n // Only SETTINGS_HELPER_PKG_ID package is used by UIA1\n await helpers.uninstallOtherPackages(\n this.adb,\n helpers.parseArray(this.opts.uninstallOtherPackages),\n [SETTINGS_HELPER_PKG_ID]\n );\n }\n\n // Install any \"otherApps\" that were specified in caps\n if (this.opts.otherApps) {\n let otherApps;\n try {\n otherApps = helpers.parseArray(this.opts.otherApps);\n } catch (e) {\n this.log.errorAndThrow(`Could not parse \"otherApps\" capability: ${e.message}`);\n }\n otherApps = await B.all(otherApps.map((app) => this.helpers.configureApp(app, APP_EXTENSION)));\n await helpers.installOtherApks(otherApps, this.adb, this.opts);\n }\n\n // install app\n if (!this.opts.app) {\n if (this.opts.fullReset) {\n this.log.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');\n }\n this.log.debug('No app capability. Assuming it is already on the device');\n if (this.opts.fastReset) {\n await helpers.resetApp(this.adb, this.opts);\n }\n return;\n }\n if (!this.opts.skipUninstall) {\n await this.adb.uninstallApk(this.opts.appPackage);\n }\n await helpers.installApk(this.adb, this.opts);\n const apkStringsForLanguage = await helpers.pushStrings(this.opts.language, this.adb, this.opts);\n if (this.opts.language) {\n this.apkStrings[this.opts.language] = apkStringsForLanguage;\n }\n\n // This must run after installing the apk, otherwise it would cause the\n // install to fail. And before running the app.\n if (!_.isUndefined(this.opts.sharedPreferences)) {\n await this.setSharedPreferences(this.opts);\n }\n }\n\n async checkAppPresent () {\n this.log.debug('Checking whether app is actually present');\n if (!(await fs.exists(this.opts.app))) {\n this.log.errorAndThrow(`Could not find app apk at ${this.opts.app}`);\n }\n }\n\n async checkPackagePresent () {\n this.log.debug('Checking whether package is present on the device');\n if (!(await this.adb.shell(['pm', 'list', 'packages', this.opts.appPackage]))) {\n this.log.errorAndThrow(`Could not find package ${this.opts.appPackage} on the device`);\n }\n }\n\n // Set CompressedLayoutHierarchy on the device\n async setCompressedLayoutHierarchy (compress) {\n await this.bootstrap.sendAction('compressedLayoutHierarchy', {compressLayout: compress});\n }\n\n async deleteSession () {\n this.log.debug('Shutting down Android driver');\n\n try {\n if (!_.isEmpty(this._screenRecordingProperties)) {\n await this.stopRecordingScreen();\n }\n } catch (ign) {}\n\n await helpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);\n\n await this.mobileStopScreenStreaming();\n\n await super.deleteSession();\n\n if (this.bootstrap) {\n // certain cleanup we only care to do if the bootstrap was ever run\n await this.stopChromedriverProxies();\n if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {\n this.log.debug(`Resetting IME to ${this.defaultIME}`);\n await this.adb?.setIME(this.defaultIME);\n }\n if (!this.isChromeSession && !this.opts.dontStopAppOnReset) {\n await this.adb?.forceStop(this.opts.appPackage);\n }\n await this.adb?.goToHome();\n if (this.opts.fullReset && !this.opts.skipUninstall && !this.appOnDevice) {\n await this.adb?.uninstallApk(this.opts.appPackage);\n }\n await this.bootstrap.shutdown();\n this.bootstrap = null;\n } else {\n this.log.debug(\"Called deleteSession but bootstrap wasn't active\");\n }\n // some cleanup we want to do regardless, in case we are shutting down\n // mid-startup\n await this.adb?.stopLogcat();\n if (this.useUnlockHelperApp) {\n await this.adb?.forceStop('io.appium.unlock');\n }\n if (this._wasWindowAnimationDisabled) {\n this.log.info('Restoring window animation state');\n await this.adb?.setAnimationState(true);\n\n // This was necessary to change animation scale over Android P. We must reset the policy for the security.\n if (await this.adb?.getApiLevel() >= 28) {\n this.log.info('Restoring hidden api policy to the device default configuration');\n await this.adb?.setDefaultHiddenApiPolicy(!!this.opts.ignoreHiddenApiPolicyError);\n }\n }\n\n if (this.opts.reboot) {\n let avdName = this.opts.avd.replace('@', '');\n this.log.debug(`closing emulator '${avdName}'`);\n await this.adb?.killEmulator(avdName);\n }\n }\n\n async setSharedPreferences () {\n let sharedPrefs = this.opts.sharedPreferences;\n this.log.info('Trying to set shared preferences');\n let name = sharedPrefs.name;\n if (_.isUndefined(name)) {\n this.log.warn(`Skipping setting Shared preferences, name is undefined: ${JSON.stringify(sharedPrefs)}`);\n return false;\n }\n let remotePath = `/data/data/${this.opts.appPackage}/shared_prefs`;\n let remoteFile = `${remotePath}/${name}.xml`;\n let localPath = `/tmp/${name}.xml`;\n let builder = this.getPrefsBuilder();\n builder.build(sharedPrefs.prefs);\n this.log.info(`Creating temporary shared preferences: ${localPath}`);\n builder.toFile(localPath);\n this.log.info(`Creating shared_prefs remote folder: ${remotePath}`);\n await this.adb.shell(['mkdir', '-p', remotePath]);\n this.log.info(`Pushing shared_prefs to ${remoteFile}`);\n await this.adb.push(localPath, remoteFile);\n try {\n this.log.info(`Trying to remove shared preferences temporary file`);\n if (await fs.exists(localPath)) {\n await fs.unlink(localPath);\n }\n } catch (e) {\n this.log.warn(`Error trying to remove temporary file ${localPath}`);\n }\n return true;\n }\n\n getPrefsBuilder () {\n /* Add this method to create a new SharedPrefsBuilder instead of\n * directly creating the object on setSharedPreferences for testing purposes\n */\n return new SharedPrefsBuilder();\n }\n\n validateDesiredCaps (caps) {\n if (!super.validateDesiredCaps(caps)) {\n return false;\n }\n if ((!caps.browserName || !helpers.isChromeBrowser(caps.browserName)) && !caps.app && !caps.appPackage) {\n this.log.errorAndThrow('The desired capabilities must include either an app, appPackage or browserName');\n }\n return helpers.validateDesiredCaps(caps);\n }\n\n proxyActive (sessionId) {\n super.proxyActive(sessionId);\n\n return this.jwpProxyActive;\n }\n\n getProxyAvoidList (sessionId) {\n super.getProxyAvoidList(sessionId);\n\n return this.jwpProxyAvoid;\n }\n\n canProxy (sessionId) {\n super.canProxy(sessionId);\n\n // this will change depending on ChromeDriver status\n return _.isFunction(this.proxyReqRes);\n }\n}\n\nexport { AndroidDriver };\nexport default AndroidDriver;\n"],"mappings":"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"}
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  var _support = require("appium/support");
11
-
12
9
  const log = _support.logger.getLogger('AndroidDriver');
13
-
14
10
  var _default = log;
15
11
  exports.default = _default;
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0FuZHJvaWREcml2ZXInKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQixlQUFqQixDQUFaOztlQUVlRixHIn0=
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0FuZHJvaWREcml2ZXInKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLGVBQU0sQ0FBQ0MsU0FBUyxDQUFDLGVBQWUsQ0FBQztBQUFDLGVBRS9CRixHQUFHO0FBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from 'appium/support';\nconst log = logger.getLogger('AndroidDriver');\n\nexport default log;\n"],"mappings":";;;;;;;;;AAAA;;AACA,MAAMA,GAAG,GAAGC,eAAA,CAAOC,SAAP,CAAiB,eAAjB,CAAZ;;eAEeF,G"}
1
+ {"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from 'appium/support';\nconst log = logger.getLogger('AndroidDriver');\n\nexport default log;\n"],"mappings":";;;;;;;AAAA;AACA,MAAMA,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,eAAe,CAAC;AAAC,eAE/BF,GAAG;AAAA"}
@@ -1,54 +1,45 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = exports.UiAutomator = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _events = _interopRequireDefault(require("events"));
13
-
14
10
  var _support = require("appium/support");
15
-
16
11
  const log = _support.logger.getLogger('UiAutomator');
17
-
18
12
  class UiAutomator extends _events.default.EventEmitter {
19
13
  constructor(adb) {
20
14
  if (!adb) {
21
15
  log.errorAndThrow('adb is required to instantiate UiAutomator');
22
16
  }
23
-
24
17
  super();
25
18
  this.adb = adb;
26
19
  this.tempPath = '/data/local/tmp/';
27
20
  }
28
-
29
21
  async start(uiAutomatorBinaryPath, className, startDetector, ...extraParams) {
30
22
  let processIsAlive;
31
-
32
23
  try {
33
24
  log.debug('Starting UiAutomator');
34
25
  this.changeState(UiAutomator.STATE_STARTING);
35
26
  log.debug('Parsing uiautomator jar');
36
27
  let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);
37
28
  await this.adb.push(uiAutomatorBinaryPath, this.tempPath);
29
+
38
30
  await this.killUiAutomatorOnDevice();
39
31
  log.debug('Starting UIAutomator');
40
32
  let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];
41
33
  this.proc = this.adb.createSubProcess(args);
34
+
42
35
  this.proc.on('exit', (code, signal) => {
43
36
  processIsAlive = false;
44
-
45
37
  if (this.state !== UiAutomator.STATE_STOPPED && this.state !== UiAutomator.STATE_STOPPING) {
46
38
  let msg = `UiAutomator exited unexpectedly with code ${code}, ` + `signal ${signal}`;
47
39
  log.error(msg);
48
40
  } else if (this.state === UiAutomator.STATE_STOPPING) {
49
41
  log.debug('UiAutomator shut down normally');
50
42
  }
51
-
52
43
  this.changeState(UiAutomator.STATE_STOPPED);
53
44
  });
54
45
  await this.proc.start(startDetector);
@@ -57,40 +48,31 @@ class UiAutomator extends _events.default.EventEmitter {
57
48
  return this.proc;
58
49
  } catch (e) {
59
50
  this.emit(UiAutomator.EVENT_ERROR, e);
60
-
61
51
  if (processIsAlive) {
62
52
  await this.killUiAutomatorOnDevice();
63
53
  await this.proc.stop();
64
54
  }
65
-
66
55
  log.errorAndThrow(e);
67
56
  }
68
57
  }
69
-
70
58
  async shutdown() {
71
59
  log.debug('Shutting down UiAutomator');
72
-
73
60
  if (this.state !== UiAutomator.STATE_STOPPED) {
74
61
  this.changeState(UiAutomator.STATE_STOPPING);
75
62
  await this.proc.stop();
76
63
  }
77
-
78
64
  await this.killUiAutomatorOnDevice();
79
65
  this.changeState(UiAutomator.STATE_STOPPED);
80
66
  }
81
-
82
67
  parseJarNameFromPath(binaryPath) {
83
68
  let reTest = /.*(\/|\\)(.*\.jar)/.exec(binaryPath);
84
-
85
69
  if (!reTest) {
86
70
  throw new Error(`Unable to parse jar name from ${binaryPath}`);
87
71
  }
88
-
89
72
  let jarName = reTest[2];
90
73
  log.debug(`Found jar name: '${jarName}'`);
91
74
  return jarName;
92
75
  }
93
-
94
76
  changeState(state) {
95
77
  log.debug(`Moving to state '${state}'`);
96
78
  this.state = state;
@@ -98,7 +80,6 @@ class UiAutomator extends _events.default.EventEmitter {
98
80
  state
99
81
  });
100
82
  }
101
-
102
83
  async killUiAutomatorOnDevice() {
103
84
  try {
104
85
  await this.adb.killProcessesByName('uiautomator');
@@ -106,9 +87,7 @@ class UiAutomator extends _events.default.EventEmitter {
106
87
  log.warn(`Error while killing uiAutomator: ${e}`);
107
88
  }
108
89
  }
109
-
110
90
  }
111
-
112
91
  exports.UiAutomator = UiAutomator;
113
92
  UiAutomator.EVENT_ERROR = 'uiautomator_error';
114
93
  UiAutomator.EVENT_CHANGED = 'stateChanged';
@@ -118,4 +97,4 @@ UiAutomator.STATE_STARTING = 'starting';
118
97
  UiAutomator.STATE_ONLINE = 'online';
119
98
  var _default = UiAutomator;
120
99
  exports.default = _default;
121
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJVaUF1dG9tYXRvciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRiIiwiZXJyb3JBbmRUaHJvdyIsInRlbXBQYXRoIiwic3RhcnQiLCJ1aUF1dG9tYXRvckJpbmFyeVBhdGgiLCJjbGFzc05hbWUiLCJzdGFydERldGVjdG9yIiwiZXh0cmFQYXJhbXMiLCJwcm9jZXNzSXNBbGl2ZSIsImRlYnVnIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImphck5hbWUiLCJwYXJzZUphck5hbWVGcm9tUGF0aCIsInB1c2giLCJraWxsVWlBdXRvbWF0b3JPbkRldmljZSIsImFyZ3MiLCJwcm9jIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIlNUQVRFX1NUT1BQSU5HIiwibXNnIiwiZXJyb3IiLCJTVEFURV9PTkxJTkUiLCJlIiwiZW1pdCIsIkVWRU5UX0VSUk9SIiwic3RvcCIsInNodXRkb3duIiwiYmluYXJ5UGF0aCIsInJlVGVzdCIsImV4ZWMiLCJFcnJvciIsIkVWRU5UX0NIQU5HRUQiLCJraWxsUHJvY2Vzc2VzQnlOYW1lIiwid2FybiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91aWF1dG9tYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignVWlBdXRvbWF0b3InKTtcblxuY2xhc3MgVWlBdXRvbWF0b3IgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFkYikge1xuICAgIGlmICghYWRiKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdygnYWRiIGlzIHJlcXVpcmVkIHRvIGluc3RhbnRpYXRlIFVpQXV0b21hdG9yJyk7XG4gICAgfVxuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gICAgdGhpcy50ZW1wUGF0aCA9ICcvZGF0YS9sb2NhbC90bXAvJztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICh1aUF1dG9tYXRvckJpbmFyeVBhdGgsIGNsYXNzTmFtZSwgc3RhcnREZXRlY3RvciwgLi4uZXh0cmFQYXJhbXMpIHtcbiAgICBsZXQgcHJvY2Vzc0lzQWxpdmU7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgVWlBdXRvbWF0b3InKTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RBUlRJTkcpO1xuXG4gICAgICBsb2cuZGVidWcoJ1BhcnNpbmcgdWlhdXRvbWF0b3IgamFyJyk7XG4gICAgICAvLyBleHBlY3RpbmcgYSBwYXRoIGxpa2UgL2Fkcy9hZHMvZm9vLmphciBvciBcXGFzZFxcYXNkXFxmb28uamFyXG4gICAgICBsZXQgamFyTmFtZSA9IHRoaXMucGFyc2VKYXJOYW1lRnJvbVBhdGgodWlBdXRvbWF0b3JCaW5hcnlQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnB1c2godWlBdXRvbWF0b3JCaW5hcnlQYXRoLCB0aGlzLnRlbXBQYXRoKTtcblxuICAgICAgLy8ga2lsbGluZyBhbnkgdWlhdXRvbWF0b3IgZXhpc3RpbmcgcHJvY2Vzc2VzXG4gICAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG5cbiAgICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgVUlBdXRvbWF0b3InKTtcbiAgICAgIGxldCBhcmdzID0gWydzaGVsbCcsICd1aWF1dG9tYXRvcicsICdydW50ZXN0JywgamFyTmFtZSwgJy1jJywgY2xhc3NOYW1lLCAuLi5leHRyYVBhcmFtc107XG4gICAgICB0aGlzLnByb2MgPSB0aGlzLmFkYi5jcmVhdGVTdWJQcm9jZXNzKGFyZ3MpO1xuXG4gICAgICAvLyBoYW5kbGUgb3V0LW9mLWJvdW5kIGV4aXQgYnkgc2ltcGx5IGVtaXR0aW5nIGEgc3RvcHBlZCBzdGF0ZVxuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgICAgICAvLyBjbGVhbnVwXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORykge1xuICAgICAgICAgIGxldCBtc2cgPSBgVWlBdXRvbWF0b3IgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aXRoIGNvZGUgJHtjb2RlfSwgYCArXG4gICAgICAgICAgICAgICAgICAgIGBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORykge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnVWlBdXRvbWF0b3Igc2h1dCBkb3duIG5vcm1hbGx5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoc3RhcnREZXRlY3Rvcik7XG4gICAgICBwcm9jZXNzSXNBbGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX09OTElORSk7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yQW5kVGhyb3coZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24gKCkge1xuICAgIGxvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biBVaUF1dG9tYXRvcicpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpO1xuICB9XG5cbiAgcGFyc2VKYXJOYW1lRnJvbVBhdGggKGJpbmFyeVBhdGgpIHtcbiAgICBsZXQgcmVUZXN0ID0gLy4qKFxcL3xcXFxcKSguKlxcLmphcikvLmV4ZWMoYmluYXJ5UGF0aCk7XG4gICAgaWYgKCFyZVRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIGphciBuYW1lIGZyb20gJHtiaW5hcnlQYXRofWApO1xuICAgIH1cbiAgICBsZXQgamFyTmFtZSA9IHJlVGVzdFsyXTtcbiAgICBsb2cuZGVidWcoYEZvdW5kIGphciBuYW1lOiAnJHtqYXJOYW1lfSdgKTtcbiAgICByZXR1cm4gamFyTmFtZTtcbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIGxvZy5kZWJ1ZyhgTW92aW5nIHRvIHN0YXRlICcke3N0YXRlfSdgKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5lbWl0KFVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQsIHtzdGF0ZX0pO1xuICB9XG5cbiAgYXN5bmMga2lsbFVpQXV0b21hdG9yT25EZXZpY2UgKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5raWxsUHJvY2Vzc2VzQnlOYW1lKCd1aWF1dG9tYXRvcicpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBFcnJvciB3aGlsZSBraWxsaW5nIHVpQXV0b21hdG9yOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbn1cblxuVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IgPSAndWlhdXRvbWF0b3JfZXJyb3InO1xuVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCA9ICdzdGF0ZUNoYW5nZWQnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcgPSAnc3RvcHBpbmcnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCA9ICdzdG9wcGVkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcblVpQXV0b21hdG9yLlNUQVRFX09OTElORSA9ICdvbmxpbmUnO1xuXG5cbmV4cG9ydCB7IFVpQXV0b21hdG9yIH07XG5leHBvcnQgZGVmYXVsdCBVaUF1dG9tYXRvcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQixhQUFqQixDQUFaOztBQUVBLE1BQU1DLFdBQU4sU0FBMEJDLGVBQUEsQ0FBT0MsWUFBakMsQ0FBOEM7RUFDNUNDLFdBQVcsQ0FBRUMsR0FBRixFQUFPO0lBQ2hCLElBQUksQ0FBQ0EsR0FBTCxFQUFVO01BQ1JQLEdBQUcsQ0FBQ1EsYUFBSixDQUFrQiw0Q0FBbEI7SUFDRDs7SUFDRDtJQUNBLEtBQUtELEdBQUwsR0FBV0EsR0FBWDtJQUNBLEtBQUtFLFFBQUwsR0FBZ0Isa0JBQWhCO0VBQ0Q7O0VBRVUsTUFBTEMsS0FBSyxDQUFFQyxxQkFBRixFQUF5QkMsU0FBekIsRUFBb0NDLGFBQXBDLEVBQW1ELEdBQUdDLFdBQXRELEVBQW1FO0lBQzVFLElBQUlDLGNBQUo7O0lBQ0EsSUFBSTtNQUNGZixHQUFHLENBQUNnQixL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
100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJVaUF1dG9tYXRvciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRiIiwiZXJyb3JBbmRUaHJvdyIsInRlbXBQYXRoIiwic3RhcnQiLCJ1aUF1dG9tYXRvckJpbmFyeVBhdGgiLCJjbGFzc05hbWUiLCJzdGFydERldGVjdG9yIiwiZXh0cmFQYXJhbXMiLCJwcm9jZXNzSXNBbGl2ZSIsImRlYnVnIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImphck5hbWUiLCJwYXJzZUphck5hbWVGcm9tUGF0aCIsInB1c2giLCJraWxsVWlBdXRvbWF0b3JPbkRldmljZSIsImFyZ3MiLCJwcm9jIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIlNUQVRFX1NUT1BQSU5HIiwibXNnIiwiZXJyb3IiLCJTVEFURV9PTkxJTkUiLCJlIiwiZW1pdCIsIkVWRU5UX0VSUk9SIiwic3RvcCIsInNodXRkb3duIiwiYmluYXJ5UGF0aCIsInJlVGVzdCIsImV4ZWMiLCJFcnJvciIsIkVWRU5UX0NIQU5HRUQiLCJraWxsUHJvY2Vzc2VzQnlOYW1lIiwid2FybiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91aWF1dG9tYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignVWlBdXRvbWF0b3InKTtcblxuY2xhc3MgVWlBdXRvbWF0b3IgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFkYikge1xuICAgIGlmICghYWRiKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdygnYWRiIGlzIHJlcXVpcmVkIHRvIGluc3RhbnRpYXRlIFVpQXV0b21hdG9yJyk7XG4gICAgfVxuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gICAgdGhpcy50ZW1wUGF0aCA9ICcvZGF0YS9sb2NhbC90bXAvJztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICh1aUF1dG9tYXRvckJpbmFyeVBhdGgsIGNsYXNzTmFtZSwgc3RhcnREZXRlY3RvciwgLi4uZXh0cmFQYXJhbXMpIHtcbiAgICBsZXQgcHJvY2Vzc0lzQWxpdmU7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgVWlBdXRvbWF0b3InKTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RBUlRJTkcpO1xuXG4gICAgICBsb2cuZGVidWcoJ1BhcnNpbmcgdWlhdXRvbWF0b3IgamFyJyk7XG4gICAgICAvLyBleHBlY3RpbmcgYSBwYXRoIGxpa2UgL2Fkcy9hZHMvZm9vLmphciBvciBcXGFzZFxcYXNkXFxmb28uamFyXG4gICAgICBsZXQgamFyTmFtZSA9IHRoaXMucGFyc2VKYXJOYW1lRnJvbVBhdGgodWlBdXRvbWF0b3JCaW5hcnlQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnB1c2godWlBdXRvbWF0b3JCaW5hcnlQYXRoLCB0aGlzLnRlbXBQYXRoKTtcblxuICAgICAgLy8ga2lsbGluZyBhbnkgdWlhdXRvbWF0b3IgZXhpc3RpbmcgcHJvY2Vzc2VzXG4gICAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG5cbiAgICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgVUlBdXRvbWF0b3InKTtcbiAgICAgIGxldCBhcmdzID0gWydzaGVsbCcsICd1aWF1dG9tYXRvcicsICdydW50ZXN0JywgamFyTmFtZSwgJy1jJywgY2xhc3NOYW1lLCAuLi5leHRyYVBhcmFtc107XG4gICAgICB0aGlzLnByb2MgPSB0aGlzLmFkYi5jcmVhdGVTdWJQcm9jZXNzKGFyZ3MpO1xuXG4gICAgICAvLyBoYW5kbGUgb3V0LW9mLWJvdW5kIGV4aXQgYnkgc2ltcGx5IGVtaXR0aW5nIGEgc3RvcHBlZCBzdGF0ZVxuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgICAgICAvLyBjbGVhbnVwXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORykge1xuICAgICAgICAgIGxldCBtc2cgPSBgVWlBdXRvbWF0b3IgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aXRoIGNvZGUgJHtjb2RlfSwgYCArXG4gICAgICAgICAgICAgICAgICAgIGBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORykge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnVWlBdXRvbWF0b3Igc2h1dCBkb3duIG5vcm1hbGx5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoc3RhcnREZXRlY3Rvcik7XG4gICAgICBwcm9jZXNzSXNBbGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX09OTElORSk7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yQW5kVGhyb3coZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24gKCkge1xuICAgIGxvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biBVaUF1dG9tYXRvcicpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpO1xuICB9XG5cbiAgcGFyc2VKYXJOYW1lRnJvbVBhdGggKGJpbmFyeVBhdGgpIHtcbiAgICBsZXQgcmVUZXN0ID0gLy4qKFxcL3xcXFxcKSguKlxcLmphcikvLmV4ZWMoYmluYXJ5UGF0aCk7XG4gICAgaWYgKCFyZVRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIGphciBuYW1lIGZyb20gJHtiaW5hcnlQYXRofWApO1xuICAgIH1cbiAgICBsZXQgamFyTmFtZSA9IHJlVGVzdFsyXTtcbiAgICBsb2cuZGVidWcoYEZvdW5kIGphciBuYW1lOiAnJHtqYXJOYW1lfSdgKTtcbiAgICByZXR1cm4gamFyTmFtZTtcbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIGxvZy5kZWJ1ZyhgTW92aW5nIHRvIHN0YXRlICcke3N0YXRlfSdgKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5lbWl0KFVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQsIHtzdGF0ZX0pO1xuICB9XG5cbiAgYXN5bmMga2lsbFVpQXV0b21hdG9yT25EZXZpY2UgKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5raWxsUHJvY2Vzc2VzQnlOYW1lKCd1aWF1dG9tYXRvcicpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBFcnJvciB3aGlsZSBraWxsaW5nIHVpQXV0b21hdG9yOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbn1cblxuVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IgPSAndWlhdXRvbWF0b3JfZXJyb3InO1xuVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCA9ICdzdGF0ZUNoYW5nZWQnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcgPSAnc3RvcHBpbmcnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCA9ICdzdG9wcGVkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcblVpQXV0b21hdG9yLlNUQVRFX09OTElORSA9ICdvbmxpbmUnO1xuXG5cbmV4cG9ydCB7IFVpQXV0b21hdG9yIH07XG5leHBvcnQgZGVmYXVsdCBVaUF1dG9tYXRvcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxhQUFhLENBQUM7QUFFM0MsTUFBTUMsV0FBVyxTQUFTQyxlQUFNLENBQUNDLFlBQVksQ0FBQztFQUM1Q0MsV0FBVyxDQUFFQyxHQUFHLEVBQUU7SUFDaEIsSUFBSSxDQUFDQSxHQUFHLEVBQUU7TUFDUlAsR0FBRyxDQUFDUSxhQUFhLENBQUMsNENBQTRDLENBQUM7SUFDakU7SUFDQSxLQUFLLEVBQUU7SUFDUCxJQUFJLENBQUNELEdBQUcsR0FBR0EsR0FBRztJQUNkLElBQUksQ0FBQ0UsUUFBUSxHQUFHLGtCQUFrQjtFQUNwQztFQUVBLE1BQU1DLEtBQUssQ0FBRUMscUJBQXFCLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxFQUFFLEdBQUdDLFdBQVcsRUFBRTtJQUM1RSxJQUFJQyxjQUFjO0lBQ2xCLElBQUk7TUFDRmYsR0FBRyxD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
@@ -1 +1 @@
1
- {"version":3,"file":"uiautomator.js","names":["log","logger","getLogger","UiAutomator","events","EventEmitter","constructor","adb","errorAndThrow","tempPath","start","uiAutomatorBinaryPath","className","startDetector","extraParams","processIsAlive","debug","changeState","STATE_STARTING","jarName","parseJarNameFromPath","push","killUiAutomatorOnDevice","args","proc","createSubProcess","on","code","signal","state","STATE_STOPPED","STATE_STOPPING","msg","error","STATE_ONLINE","e","emit","EVENT_ERROR","stop","shutdown","binaryPath","reTest","exec","Error","EVENT_CHANGED","killProcessesByName","warn"],"sources":["../../lib/uiautomator.js"],"sourcesContent":["import events from 'events';\nimport { logger } from 'appium/support';\n\n\nconst log = logger.getLogger('UiAutomator');\n\nclass UiAutomator extends events.EventEmitter {\n constructor (adb) {\n if (!adb) {\n log.errorAndThrow('adb is required to instantiate UiAutomator');\n }\n super();\n this.adb = adb;\n this.tempPath = '/data/local/tmp/';\n }\n\n async start (uiAutomatorBinaryPath, className, startDetector, ...extraParams) {\n let processIsAlive;\n try {\n log.debug('Starting UiAutomator');\n this.changeState(UiAutomator.STATE_STARTING);\n\n log.debug('Parsing uiautomator jar');\n // expecting a path like /ads/ads/foo.jar or \\asd\\asd\\foo.jar\n let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);\n await this.adb.push(uiAutomatorBinaryPath, this.tempPath);\n\n // killing any uiautomator existing processes\n await this.killUiAutomatorOnDevice();\n\n log.debug('Starting UIAutomator');\n let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];\n this.proc = this.adb.createSubProcess(args);\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n // cleanup\n if (this.state !== UiAutomator.STATE_STOPPED &&\n this.state !== UiAutomator.STATE_STOPPING) {\n let msg = `UiAutomator exited unexpectedly with code ${code}, ` +\n `signal ${signal}`;\n log.error(msg);\n } else if (this.state === UiAutomator.STATE_STOPPING) {\n log.debug('UiAutomator shut down normally');\n }\n this.changeState(UiAutomator.STATE_STOPPED);\n });\n\n await this.proc.start(startDetector);\n processIsAlive = true;\n this.changeState(UiAutomator.STATE_ONLINE);\n return this.proc;\n } catch (e) {\n this.emit(UiAutomator.EVENT_ERROR, e);\n if (processIsAlive) {\n await this.killUiAutomatorOnDevice();\n await this.proc.stop();\n }\n log.errorAndThrow(e);\n }\n }\n\n async shutdown () {\n log.debug('Shutting down UiAutomator');\n if (this.state !== UiAutomator.STATE_STOPPED) {\n this.changeState(UiAutomator.STATE_STOPPING);\n await this.proc.stop();\n }\n await this.killUiAutomatorOnDevice();\n this.changeState(UiAutomator.STATE_STOPPED);\n }\n\n parseJarNameFromPath (binaryPath) {\n let reTest = /.*(\\/|\\\\)(.*\\.jar)/.exec(binaryPath);\n if (!reTest) {\n throw new Error(`Unable to parse jar name from ${binaryPath}`);\n }\n let jarName = reTest[2];\n log.debug(`Found jar name: '${jarName}'`);\n return jarName;\n }\n\n changeState (state) {\n log.debug(`Moving to state '${state}'`);\n this.state = state;\n this.emit(UiAutomator.EVENT_CHANGED, {state});\n }\n\n async killUiAutomatorOnDevice () {\n try {\n await this.adb.killProcessesByName('uiautomator');\n } catch (e) {\n log.warn(`Error while killing uiAutomator: ${e}`);\n }\n }\n\n}\n\nUiAutomator.EVENT_ERROR = 'uiautomator_error';\nUiAutomator.EVENT_CHANGED = 'stateChanged';\nUiAutomator.STATE_STOPPING = 'stopping';\nUiAutomator.STATE_STOPPED = 'stopped';\nUiAutomator.STATE_STARTING = 'starting';\nUiAutomator.STATE_ONLINE = 'online';\n\n\nexport { UiAutomator };\nexport default UiAutomator;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAGA,MAAMA,GAAG,GAAGC,eAAA,CAAOC,SAAP,CAAiB,aAAjB,CAAZ;;AAEA,MAAMC,WAAN,SAA0BC,eAAA,CAAOC,YAAjC,CAA8C;EAC5CC,WAAW,CAAEC,GAAF,EAAO;IAChB,IAAI,CAACA,GAAL,EAAU;MACRP,GAAG,CAACQ,aAAJ,CAAkB,4CAAlB;IACD;;IACD;IACA,KAAKD,GAAL,GAAWA,GAAX;IACA,KAAKE,QAAL,GAAgB,kBAAhB;EACD;;EAEU,MAALC,KAAK,CAAEC,qBAAF,EAAyBC,SAAzB,EAAoCC,aAApC,EAAmD,GAAGC,WAAtD,EAAmE;IAC5E,IAAIC,cAAJ;;IACA,IAAI;MACFf,GAAG,CAACgB,KAAJ,CAAU,sBAAV;MACA,KAAKC,WAAL,CAAiBd,WAAW,CAACe,cAA7B;MAEAlB,GAAG,CAACgB,KAAJ,CAAU,yBAAV;MAEA,IAAIG,OAAO,GAAG,KAAKC,oBAAL,CAA0BT,qBAA1B,CAAd;MACA,MAAM,KAAKJ,GAAL,CAASc,IAAT,CAAcV,qBAAd,EAAqC,KAAKF,QAA1C,CAAN;MAGA,MAAM,KAAKa,uBAAL,EAAN;MAEAtB,GAAG,CAACgB,KAAJ,CAAU,sBAAV;MACA,IAAIO,IAAI,GAAG,CAAC,OAAD,EAAU,aAAV,EAAyB,SAAzB,EAAoCJ,OAApC,EAA6C,IAA7C,EAAmDP,SAAnD,EAA8D,GAAGE,WAAjE,CAAX;MACA,KAAKU,IAAL,GAAY,KAAKjB,GAAL,CAASkB,gBAAT,CAA0BF,IAA1B,CAAZ;MAGA,KAAKC,IAAL,CAAUE,EAAV,CAAa,MAAb,EAAqB,CAACC,IAAD,EAAOC,MAAP,KAAkB;QACrCb,cAAc,GAAG,KAAjB;;QAEA,IAAI,KAAKc,KAAL,KAAe1B,WAAW,CAAC2B,aAA3B,IACA,KAAKD,KAAL,KAAe1B,WAAW,CAAC4B,cAD/B,EAC+C;UAC7C,IAAIC,GAAG,GAAI,6CAA4CL,IAAK,IAAlD,GACC,UAASC,MAAO,EAD3B;UAEA5B,GAAG,CAACiC,KAAJ,CAAUD,GAAV;QACD,CALD,MAKO,IAAI,KAAKH,KAAL,KAAe1B,WAAW,CAAC4B,cAA/B,EAA+C;UACpD/B,GAAG,CAACgB,KAAJ,CAAU,gCAAV;QACD;;QACD,KAAKC,WAAL,CAAiBd,WAAW,CAAC2B,aAA7B;MACD,CAZD;MAcA,MAAM,KAAKN,IAAL,CAAUd,KAAV,CAAgBG,aAAhB,CAAN;MACAE,cAAc,GAAG,IAAjB;MACA,KAAKE,WAAL,CAAiBd,WAAW,CAAC+B,YAA7B;MACA,OAAO,KAAKV,IAAZ;IACD,CAnCD,CAmCE,OAAOW,CAAP,EAAU;MACV,KAAKC,IAAL,CAAUjC,WAAW,CAACkC,WAAtB,EAAmCF,CAAnC;;MACA,IAAIpB,cAAJ,EAAoB;QAClB,MAAM,KAAKO,uBAAL,EAAN;QACA,MAAM,KAAKE,IAAL,CAAUc,IAAV,EAAN;MACD;;MACDtC,GAAG,CAACQ,aAAJ,CAAkB2B,CAAlB;IACD;EACF;;EAEa,MAARI,QAAQ,GAAI;IAChBvC,GAAG,CAACgB,KAAJ,CAAU,2BAAV;;IACA,IAAI,KAAKa,KAAL,KAAe1B,WAAW,CAAC2B,aAA/B,EAA8C;MAC5C,KAAKb,WAAL,CAAiBd,WAAW,CAAC4B,cAA7B;MACA,MAAM,KAAKP,IAAL,CAAUc,IAAV,EAAN;IACD;;IACD,MAAM,KAAKhB,uBAAL,EAAN;IACA,KAAKL,WAAL,CAAiBd,WAAW,CAAC2B,aAA7B;EACD;;EAEDV,oBAAoB,CAAEoB,UAAF,EAAc;IAChC,IAAIC,MAAM,GAAG,qBAAqBC,IAArB,CAA0BF,UAA1B,CAAb;;IACA,IAAI,CAACC,MAAL,EAAa;MACX,MAAM,IAAIE,KAAJ,CAAW,iCAAgCH,UAAW,EAAtD,CAAN;IACD;;IACD,IAAIrB,OAAO,GAAGsB,MAAM,CAAC,CAAD,CAApB;IACAzC,GAAG,CAACgB,KAAJ,CAAW,oBAAmBG,OAAQ,GAAtC;IACA,OAAOA,OAAP;EACD;;EAEDF,WAAW,CAAEY,KAAF,EAAS;IAClB7B,GAAG,CAACgB,KAAJ,CAAW,oBAAmBa,KAAM,GAApC;IACA,KAAKA,KAAL,GAAaA,KAAb;IACA,KAAKO,IAAL,CAAUjC,WAAW,CAACyC,aAAtB,EAAqC;MAACf;IAAD,CAArC;EACD;;EAE4B,MAAvBP,uBAAuB,GAAI;IAC/B,IAAI;MACF,MAAM,KAAKf,GAAL,CAASsC,mBAAT,CAA6B,aAA7B,CAAN;IACD,CAFD,CAEE,OAAOV,CAAP,EAAU;MACVnC,GAAG,CAAC8C,IAAJ,CAAU,oCAAmCX,CAAE,EAA/C;IACD;EACF;;AAzF2C;;;AA6F9ChC,WAAW,CAACkC,WAAZ,GAA0B,mBAA1B;AACAlC,WAAW,CAACyC,aAAZ,GAA4B,cAA5B;AACAzC,WAAW,CAAC4B,cAAZ,GAA6B,UAA7B;AACA5B,WAAW,CAAC2B,aAAZ,GAA4B,SAA5B;AACA3B,WAAW,CAACe,cAAZ,GAA6B,UAA7B;AACAf,WAAW,CAAC+B,YAAZ,GAA2B,QAA3B;eAIe/B,W"}
1
+ {"version":3,"file":"uiautomator.js","names":["log","logger","getLogger","UiAutomator","events","EventEmitter","constructor","adb","errorAndThrow","tempPath","start","uiAutomatorBinaryPath","className","startDetector","extraParams","processIsAlive","debug","changeState","STATE_STARTING","jarName","parseJarNameFromPath","push","killUiAutomatorOnDevice","args","proc","createSubProcess","on","code","signal","state","STATE_STOPPED","STATE_STOPPING","msg","error","STATE_ONLINE","e","emit","EVENT_ERROR","stop","shutdown","binaryPath","reTest","exec","Error","EVENT_CHANGED","killProcessesByName","warn"],"sources":["../../lib/uiautomator.js"],"sourcesContent":["import events from 'events';\nimport { logger } from 'appium/support';\n\n\nconst log = logger.getLogger('UiAutomator');\n\nclass UiAutomator extends events.EventEmitter {\n constructor (adb) {\n if (!adb) {\n log.errorAndThrow('adb is required to instantiate UiAutomator');\n }\n super();\n this.adb = adb;\n this.tempPath = '/data/local/tmp/';\n }\n\n async start (uiAutomatorBinaryPath, className, startDetector, ...extraParams) {\n let processIsAlive;\n try {\n log.debug('Starting UiAutomator');\n this.changeState(UiAutomator.STATE_STARTING);\n\n log.debug('Parsing uiautomator jar');\n // expecting a path like /ads/ads/foo.jar or \\asd\\asd\\foo.jar\n let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);\n await this.adb.push(uiAutomatorBinaryPath, this.tempPath);\n\n // killing any uiautomator existing processes\n await this.killUiAutomatorOnDevice();\n\n log.debug('Starting UIAutomator');\n let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];\n this.proc = this.adb.createSubProcess(args);\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n // cleanup\n if (this.state !== UiAutomator.STATE_STOPPED &&\n this.state !== UiAutomator.STATE_STOPPING) {\n let msg = `UiAutomator exited unexpectedly with code ${code}, ` +\n `signal ${signal}`;\n log.error(msg);\n } else if (this.state === UiAutomator.STATE_STOPPING) {\n log.debug('UiAutomator shut down normally');\n }\n this.changeState(UiAutomator.STATE_STOPPED);\n });\n\n await this.proc.start(startDetector);\n processIsAlive = true;\n this.changeState(UiAutomator.STATE_ONLINE);\n return this.proc;\n } catch (e) {\n this.emit(UiAutomator.EVENT_ERROR, e);\n if (processIsAlive) {\n await this.killUiAutomatorOnDevice();\n await this.proc.stop();\n }\n log.errorAndThrow(e);\n }\n }\n\n async shutdown () {\n log.debug('Shutting down UiAutomator');\n if (this.state !== UiAutomator.STATE_STOPPED) {\n this.changeState(UiAutomator.STATE_STOPPING);\n await this.proc.stop();\n }\n await this.killUiAutomatorOnDevice();\n this.changeState(UiAutomator.STATE_STOPPED);\n }\n\n parseJarNameFromPath (binaryPath) {\n let reTest = /.*(\\/|\\\\)(.*\\.jar)/.exec(binaryPath);\n if (!reTest) {\n throw new Error(`Unable to parse jar name from ${binaryPath}`);\n }\n let jarName = reTest[2];\n log.debug(`Found jar name: '${jarName}'`);\n return jarName;\n }\n\n changeState (state) {\n log.debug(`Moving to state '${state}'`);\n this.state = state;\n this.emit(UiAutomator.EVENT_CHANGED, {state});\n }\n\n async killUiAutomatorOnDevice () {\n try {\n await this.adb.killProcessesByName('uiautomator');\n } catch (e) {\n log.warn(`Error while killing uiAutomator: ${e}`);\n }\n }\n\n}\n\nUiAutomator.EVENT_ERROR = 'uiautomator_error';\nUiAutomator.EVENT_CHANGED = 'stateChanged';\nUiAutomator.STATE_STOPPING = 'stopping';\nUiAutomator.STATE_STOPPED = 'stopped';\nUiAutomator.STATE_STARTING = 'starting';\nUiAutomator.STATE_ONLINE = 'online';\n\n\nexport { UiAutomator };\nexport default UiAutomator;\n"],"mappings":"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"}