UNPKG

gst-atom-xcuitest-driver

Version:

ATOM driver for iOS using XCUITest for backend

146 lines (104 loc) 15.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("source-map-support/register"); var _lodash = _interopRequireDefault(require("lodash")); var _appiumSupport = require("appium-support"); var _logger = _interopRequireDefault(require("../logger")); let commands = {}; function extractMandatoryOptions(opts = {}, keys) { const result = {}; for (const key of keys) { const value = opts[key]; if (!_lodash.default.isString(value) || _lodash.default.isEmpty(value)) { _logger.default.errorAndThrow(`'${key}' is expected to be a valid string. '${value}' is given instead`); } result[key] = value; } return result; } commands.mobileInstallApp = async function mobileInstallApp(opts = {}) { const { app } = extractMandatoryOptions(opts, ['app']); this.opts.appUrl = app; const dstPath = await this.helpers.configureApp(app, '.app'); _logger.default.info(`Installing '${dstPath}' to the ${this.isRealDevice() ? 'real device' : 'Simulator'} ` + `with UDID '${this.opts.device.udid}'`); if (!(await _appiumSupport.fs.exists(dstPath))) { _logger.default.errorAndThrow(`The application at '${dstPath}' does not exist or is not accessible`); } await this.opts.device.installApp(dstPath, this.opts.appPushTimeout); _logger.default.info(`Installation of '${dstPath}' succeeded`); }; commands.mobileIsAppInstalled = async function mobileIsAppInstalled(opts = {}) { const { bundleId } = extractMandatoryOptions(opts, ['bundleId']); const installed = await this.opts.device.isAppInstalled(bundleId); _logger.default.info(`App '${bundleId}' is${installed ? '' : ' not'} installed`); return installed; }; commands.mobileRemoveApp = async function mobileRemoveApp(opts = {}) { const { bundleId } = extractMandatoryOptions(opts, ['bundleId']); _logger.default.info(`Uninstalling the application with bundle identifier '${bundleId}' ` + `from the ${this.isRealDevice() ? 'real device' : 'Simulator'} with UDID '${this.opts.device.udid}'`); try { await this.opts.device.removeApp(bundleId); _logger.default.info(`Removal of '${bundleId}' succeeded`); return true; } catch (err) { _logger.default.warn(`Cannot remove '${bundleId}'. Original error: ${err.message}`); return false; } }; commands.mobileLaunchApp = async function mobileLaunchApp(opts = {}) { const wdaOpts = extractMandatoryOptions(opts, ['bundleId']); if (opts.arguments) { wdaOpts.arguments = _lodash.default.isArray(opts.arguments) ? opts.arguments : [opts.arguments]; } if (opts.environment) { wdaOpts.environment = opts.environment; } return await this.proxyCommand('/wda/apps/launch', 'POST', wdaOpts); }; commands.mobileTerminateApp = async function mobileTerminateApp(opts = {}) { return await this.proxyCommand('/wda/apps/terminate', 'POST', extractMandatoryOptions(opts, ['bundleId'])); }; commands.mobileActivateApp = async function mobileActivateApp(opts = {}) { return await this.proxyCommand('/wda/apps/activate', 'POST', extractMandatoryOptions(opts, ['bundleId'])); }; commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) { return await this.proxyCommand('/wda/apps/state', 'POST', extractMandatoryOptions(opts, ['bundleId'])); }; commands.installApp = async function installApp(appPath) { await this.mobileInstallApp({ app: appPath }); }; commands.activateApp = async function activateApp(bundleId, opts = {}) { return await this.mobileLaunchApp(Object.assign({}, opts, { bundleId })); }; commands.isAppInstalled = async function isAppInstalled(bundleId) { return await this.mobileIsAppInstalled({ bundleId }); }; commands.terminateApp = async function terminateApp(bundleId) { return await this.mobileTerminateApp({ bundleId }); }; commands.queryAppState = async function queryAppState(bundleId) { return await this.mobileQueryAppState({ bundleId }); }; var _default = commands; exports.default = _default;require('source-map-support').install(); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImV4dHJhY3RNYW5kYXRvcnlPcHRpb25zIiwib3B0cyIsImtleXMiLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsIl8iLCJpc1N0cmluZyIsImlzRW1wdHkiLCJsb2ciLCJlcnJvckFuZFRocm93IiwibW9iaWxlSW5zdGFsbEFwcCIsImFwcCIsImFwcFVybCIsImRzdFBhdGgiLCJoZWxwZXJzIiwiY29uZmlndXJlQXBwIiwiaW5mbyIsImlzUmVhbERldmljZSIsImRldmljZSIsInVkaWQiLCJmcyIsImV4aXN0cyIsImluc3RhbGxBcHAiLCJhcHBQdXNoVGltZW91dCIsIm1vYmlsZUlzQXBwSW5zdGFsbGVkIiwiYnVuZGxlSWQiLCJpbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsIm1vYmlsZVJlbW92ZUFwcCIsInJlbW92ZUFwcCIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwibW9iaWxlTGF1bmNoQXBwIiwid2RhT3B0cyIsImFyZ3VtZW50cyIsImlzQXJyYXkiLCJlbnZpcm9ubWVudCIsInByb3h5Q29tbWFuZCIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsIm1vYmlsZUFjdGl2YXRlQXBwIiwibW9iaWxlUXVlcnlBcHBTdGF0ZSIsImFwcFBhdGgiLCJhY3RpdmF0ZUFwcCIsIk9iamVjdCIsImFzc2lnbiIsInRlcm1pbmF0ZUFwcCIsInF1ZXJ5QXBwU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLEVBQWY7O0FBRUEsU0FBU0MsdUJBQVQsQ0FBa0NDLElBQUksR0FBRyxFQUF6QyxFQUE2Q0MsSUFBN0MsRUFBbUQ7QUFDakQsUUFBTUMsTUFBTSxHQUFHLEVBQWY7O0FBQ0EsT0FBSyxNQUFNQyxHQUFYLElBQWtCRixJQUFsQixFQUF3QjtBQUN0QixVQUFNRyxLQUFLLEdBQUdKLElBQUksQ0FBQ0cs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Q0FGRDs7ZUFJZTNCLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cbmxldCBjb21tYW5kcyA9IHt9O1xuXG5mdW5jdGlvbiBleHRyYWN0TWFuZGF0b3J5T3B0aW9ucyAob3B0cyA9IHt9LCBrZXlzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRzW2tleV07XG4gICAgaWYgKCFfLmlzU3RyaW5nKHZhbHVlKSB8fCBfLmlzRW1wdHkodmFsdWUpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBzdHJpbmcuICcke3ZhbHVlfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJbnN0YWxsQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2FwcH0gPSBleHRyYWN0TWFuZGF0b3J5T3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgdGhpcy5vcHRzLmFwcFVybCA9IGFwcFxuICBcbiAgY29uc3QgZHN0UGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtkc3RQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7ZHN0UGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKGRzdFBhdGgsIHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCk7XG4gIGxvZy5pbmZvKGBJbnN0YWxsYXRpb24gb2YgJyR7ZHN0UGF0aH0nIHN1Y2NlZWRlZGApO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc0FwcEluc3RhbGxlZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSBleHRyYWN0TWFuZGF0b3J5T3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBjb25zdCBpbnN0YWxsZWQgPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKGJ1bmRsZUlkKTtcbiAgbG9nLmluZm8oYEFwcCAnJHtidW5kbGVJZH0nIGlzJHtpbnN0YWxsZWQgPyAnJyA6ICcgbm90J30gaW5zdGFsbGVkYCk7XG4gIHJldHVybiBpbnN0YWxsZWQ7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVSZW1vdmVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSZW1vdmVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YnVuZGxlSWR9ID0gZXh0cmFjdE1hbmRhdG9yeU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgbG9nLmluZm8oYFVuaW5zdGFsbGluZyB0aGUgYXBwbGljYXRpb24gd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHtidW5kbGVJZH0nIGAgK1xuICAgIGBmcm9tIHRoZSAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ1NpbXVsYXRvcid9IHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICBsb2cuaW5mbyhgUmVtb3ZhbCBvZiAnJHtidW5kbGVJZH0nIHN1Y2NlZWRlZGApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IHJlbW92ZSAnJHtidW5kbGVJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbW1hbmRzLm1vYmlsZUxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUxhdW5jaEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHdkYU9wdHMgPSBleHRyYWN0TWFuZGF0b3J5T3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBpZiAob3B0cy5hcmd1bWVudHMpIHtcbiAgICB3ZGFPcHRzLmFyZ3VtZW50cyA9IF8uaXNBcnJheShvcHRzLmFyZ3VtZW50cykgPyBvcHRzLmFyZ3VtZW50cyA6IFtvcHRzLmFyZ3VtZW50c107XG4gIH1cbiAgaWYgKG9wdHMuZW52aXJvbm1lbnQpIHtcbiAgICB3ZGFPcHRzLmVudmlyb25tZW50ID0gb3B0cy5lbnZpcm9ubWVudDtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy9sYXVuY2gnLCAnUE9TVCcsIHdkYU9wdHMpO1xufTtcblxuY29tbWFuZHMubW9iaWxlVGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVGVybWluYXRlQXBwIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvdGVybWluYXRlJywgJ1BPU1QnLCBleHRyYWN0TWFuZGF0b3J5T3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQWN0aXZhdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy9hY3RpdmF0ZScsICdQT1NUJywgZXh0cmFjdE1hbmRhdG9yeU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gc3RhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgc2V0LCB3aGljaCBtdXN0IGNvbnRhaW4gYGJ1bmRsZUlkYCBwcm9wZXJ0eVxuICogQHJldHVybnMge251bWJlcn0gVGhlIGFjdHVhbCBhcHBsaWNhdGlvbiBzdGF0ZSBjb2RlLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpYXBwbGljYXRpb25zdGF0ZT9sYW5ndWFnZT1vYmpjXG4gKiB0byBnZXQgdGhlIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVRdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUXVlcnlBcHBTdGF0ZSAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL3N0YXRlJywgJ1BPU1QnLCBleHRyYWN0TWFuZGF0b3J5T3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbmNvbW1hbmRzLmluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBwIChhcHBQYXRoKSB7XG4gIGF3YWl0IHRoaXMubW9iaWxlSW5zdGFsbEFwcCh7YXBwOiBhcHBQYXRofSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=