UNPKG

appium-xcuitest-driver-conan

Version:

Appium driver for iOS using XCUITest for backend

233 lines (179 loc) 13.5 kB
'use strict'; var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; Object.defineProperty(exports, '__esModule', { value: true }); var _teen_process = require('teen_process'); var _iosDeploy = require('./ios-deploy'); var _iosDeploy2 = _interopRequireDefault(_iosDeploy); var _logger = require('./logger'); var _logger2 = _interopRequireDefault(_logger); function getConnectedDevices() { var _ref, stdout, msg; return _regeneratorRuntime.async(function getConnectedDevices$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: context$1$0.prev = 0; context$1$0.next = 3; return _regeneratorRuntime.awrap((0, _teen_process.exec)('idevice_id', ['-l'])); case 3: _ref = context$1$0.sent; stdout = _ref.stdout; return context$1$0.abrupt('return', stdout.trim().split('\n')); case 8: context$1$0.prev = 8; context$1$0.t0 = context$1$0['catch'](0); if (!(context$1$0.t0.message.indexOf('Command \'idevice_id\' not found') === -1)) { context$1$0.next = 12; break; } throw context$1$0.t0; case 12: msg = 'The \'idevice_id\' program is not installed. If you are running ' + 'a real device test it is necessary. Install with \'brew install ' + 'libimobiledevice --HEAD\''; _logger2['default'].warn(msg); return context$1$0.abrupt('return', []); case 15: case 'end': return context$1$0.stop(); } }, null, this, [[0, 8]]); } function resetRealDevice(device, opts) { var bundleId; return _regeneratorRuntime.async(function resetRealDevice$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: if (!(!opts.bundleId || !opts.fullReset)) { context$1$0.next = 2; break; } return context$1$0.abrupt('return'); case 2: bundleId = opts.bundleId; _logger2['default'].debug('Reset: fullReset requested. Will try to uninstall the app \'' + bundleId + '\'.'); context$1$0.next = 6; return _regeneratorRuntime.awrap(device.isAppInstalled(bundleId)); case 6: if (context$1$0.sent) { context$1$0.next = 9; break; } _logger2['default'].debug('Reset: app not installed. No need to uninstall'); return context$1$0.abrupt('return'); case 9: context$1$0.prev = 9; context$1$0.next = 12; return _regeneratorRuntime.awrap(device.remove(bundleId)); case 12: context$1$0.next = 18; break; case 14: context$1$0.prev = 14; context$1$0.t0 = context$1$0['catch'](9); _logger2['default'].error('Reset: could not remove \'' + bundleId + '\' from device: ' + context$1$0.t0.message); throw context$1$0.t0; case 18: _logger2['default'].debug('Reset: removed \'' + bundleId + '\''); case 19: case 'end': return context$1$0.stop(); } }, null, this, [[9, 14]]); } function runRealDeviceReset(device, opts) { return _regeneratorRuntime.async(function runRealDeviceReset$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: if (!(!opts.noReset || opts.fullReset)) { context$1$0.next = 7; break; } _logger2['default'].debug('Reset: running ios real device reset flow'); if (opts.noReset) { context$1$0.next = 5; break; } context$1$0.next = 5; return _regeneratorRuntime.awrap(resetRealDevice(device, opts)); case 5: context$1$0.next = 8; break; case 7: _logger2['default'].debug('Reset: fullReset not set. Leaving as is'); case 8: case 'end': return context$1$0.stop(); } }, null, this); } function installToRealDevice(device, app, bundleId) { var noReset = arguments.length <= 3 || arguments[3] === undefined ? true : arguments[3]; return _regeneratorRuntime.async(function installToRealDevice$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: if (!(!device.udid || !app)) { context$1$0.next = 3; break; } _logger2['default'].debug('No device id or app, not installing to real device.'); return context$1$0.abrupt('return'); case 3: context$1$0.next = 5; return _regeneratorRuntime.awrap(device.isAppInstalled(bundleId)); case 5: if (!context$1$0.sent) { context$1$0.next = 12; break; } if (!noReset) { context$1$0.next = 9; break; } _logger2['default'].debug('App \'' + bundleId + '\' is already installed. No need to reinstall.'); return context$1$0.abrupt('return'); case 9: _logger2['default'].debug('Reset requested. Removing app with id \'' + bundleId + '\' from the device'); context$1$0.next = 12; return _regeneratorRuntime.awrap(device.remove(bundleId)); case 12: _logger2['default'].debug('Installing \'' + app + '\' on device with UUID \'' + device.udid + '\'...'); context$1$0.next = 15; return _regeneratorRuntime.awrap(device.install(app)); case 15: _logger2['default'].debug('The app has been installed successfully.'); case 16: case 'end': return context$1$0.stop(); } }, null, this); } function getRealDeviceObj(udid) { var device, msg; return _regeneratorRuntime.async(function getRealDeviceObj$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: _logger2['default'].debug('Creating iDevice object with udid \'' + udid + '\''); context$1$0.prev = 1; device = new _iosDeploy2['default'](udid); context$1$0.next = 5; return _regeneratorRuntime.awrap(device.checkStatus()); case 5: return context$1$0.abrupt('return', device); case 8: context$1$0.prev = 8; context$1$0.t0 = context$1$0['catch'](1); msg = 'Could not initialize ios-deploy make sure it is installed ' + '(npm install -g ios-deploy) and works on your system.'; _logger2['default'].errorAndThrow(msg); case 12: case 'end': return context$1$0.stop(); } }, null, this, [[1, 8]]); } exports.getConnectedDevices = getConnectedDevices; exports.runRealDeviceReset = runRealDeviceReset; exports.installToRealDevice = installToRealDevice; exports.getRealDeviceObj = getRealDeviceObj; //This iDevice object could be ideviceinstaller (node-idevice) for future once we have ideviceinstaller working for ios 10 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9yZWFsLWRldmljZS1tYW5hZ2VtZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7NEJBQXFCLGNBQWM7O3lCQUNiLGNBQWM7Ozs7c0JBQ3BCLFVBQVU7Ozs7QUFHMUIsU0FBZSxtQkFBbUI7WUFFekIsTUFBTSxFQU1QLEdBQUc7Ozs7Ozs7eUNBTmMsd0JBQUssWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7QUFBMUMsY0FBTSxRQUFOLE1BQU07NENBQ0osTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Ozs7OztjQUU1QixlQUFJLE9BQU8sQ0FBQyxPQUFPLG9DQUFrQyxLQUFLLENBQUMsQ0FBQyxDQUFBOzs7Ozs7OztBQUc1RCxXQUFHLEdBQUcsdUlBQ2lFLDhCQUN2Qzs7QUFDcEMsNEJBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRDQUNQLEVBQUU7Ozs7Ozs7Q0FFWjs7QUFFRCxTQUFlLGVBQWUsQ0FBRSxNQUFNLEVBQUUsSUFBSTtNQUt0QyxRQUFROzs7O2NBSlIsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQTs7Ozs7Ozs7QUFJakMsZ0JBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTs7QUFDNUIsNEJBQUksS0FBSyxrRUFBK0QsUUFBUSxTQUFLLENBQUM7O3lDQUMzRSxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7QUFDeEMsNEJBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7Ozs7Ozt5Q0FJdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFFN0IsNEJBQUksS0FBSyxnQ0FBNkIsUUFBUSx3QkFBa0IsZUFBSSxPQUFPLENBQUcsQ0FBQzs7OztBQUdqRiw0QkFBSSxLQUFLLHVCQUFvQixRQUFRLFFBQUksQ0FBQzs7Ozs7OztDQUMzQzs7QUFFRCxTQUFlLGtCQUFrQixDQUFFLE1BQU0sRUFBRSxJQUFJOzs7O2NBQ3pDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFBOzs7OztBQUNqQyw0QkFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQzs7WUFDbEQsSUFBSSxDQUFDLE9BQU87Ozs7Ozt5Q0FDVCxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQzs7Ozs7OztBQUdyQyw0QkFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQzs7Ozs7OztDQUV4RDs7QUFFRCxTQUFlLG1CQUFtQixDQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUTtNQUFFLE9BQU8seURBQUcsSUFBSTs7OztjQUNuRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUE7Ozs7O0FBQ3RCLDRCQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDOzs7Ozt5Q0FJekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7O2FBQ25DLE9BQU87Ozs7O0FBQ1QsNEJBQUksS0FBSyxZQUFTLFFBQVEsb0RBQWdELENBQUM7Ozs7QUFHN0UsNEJBQUksS0FBSyw4Q0FBMkMsUUFBUSx3QkFBb0IsQ0FBQzs7eUNBQzNFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDOzs7QUFFL0IsNEJBQUksS0FBSyxtQkFBZ0IsR0FBRyxpQ0FBMEIsTUFBTSxDQUFDLElBQUksV0FBTyxDQUFDOzt5Q0FDbkUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7OztBQUN6Qiw0QkFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQzs7Ozs7OztDQUN2RDs7QUFFRCxTQUFlLGdCQUFnQixDQUFFLElBQUk7TUFJN0IsTUFBTSxFQUlOLEdBQUc7Ozs7QUFQVCw0QkFBSSxLQUFLLDBDQUF1QyxJQUFJLFFBQUksQ0FBQzs7QUFHbkQsY0FBTSxHQUFHLDJCQUFjLElBQUksQ0FBQzs7eUNBQzFCLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Ozs0Q0FDbkIsTUFBTTs7Ozs7QUFFVCxXQUFHLEdBQUcsNERBQTRELEdBQzVELHVEQUF1RDs7QUFDakUsNEJBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7Ozs7O0NBRTFCOztRQUVRLG1CQUFtQixHQUFuQixtQkFBbUI7UUFBRSxrQkFBa0IsR0FBbEIsa0JBQWtCO1FBQUUsbUJBQW1CLEdBQW5CLG1CQUFtQjtRQUM1RCxnQkFBZ0IsR0FBaEIsZ0JBQWdCIiwiZmlsZSI6ImxpYi9yZWFsLWRldmljZS1tYW5hZ2VtZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgSU9TRGVwbG95IGZyb20gJy4vaW9zLWRlcGxveSc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb25uZWN0ZWREZXZpY2VzICgpIHtcbiAgdHJ5IHtcbiAgICBsZXQge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdpZGV2aWNlX2lkJywgWyctbCddKTtcbiAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZS5pbmRleE9mKGBDb21tYW5kICdpZGV2aWNlX2lkJyBub3QgZm91bmRgKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgbGV0IG1zZyA9IGBUaGUgJ2lkZXZpY2VfaWQnIHByb2dyYW0gaXMgbm90IGluc3RhbGxlZC4gSWYgeW91IGFyZSBydW5uaW5nIGAgK1xuICAgICAgICAgICAgICBgYSByZWFsIGRldmljZSB0ZXN0IGl0IGlzIG5lY2Vzc2FyeS4gSW5zdGFsbCB3aXRoICdicmV3IGluc3RhbGwgYCArXG4gICAgICAgICAgICAgIGBsaWJpbW9iaWxlZGV2aWNlIC0tSEVBRCdgO1xuICAgIGxvZy53YXJuKG1zZyk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0UmVhbERldmljZSAoZGV2aWNlLCBvcHRzKSB7XG4gIGlmICghb3B0cy5idW5kbGVJZCB8fCAhb3B0cy5mdWxsUmVzZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgYnVuZGxlSWQgPSBvcHRzLmJ1bmRsZUlkO1xuICBsb2cuZGVidWcoYFJlc2V0OiBmdWxsUmVzZXQgcmVxdWVzdGVkLiBXaWxsIHRyeSB0byB1bmluc3RhbGwgdGhlIGFwcCAnJHtidW5kbGVJZH0nLmApO1xuICBpZiAoIWF3YWl0IGRldmljZS5pc0FwcEluc3RhbGxlZChidW5kbGVJZCkpIHtcbiAgICBsb2cuZGVidWcoJ1Jlc2V0OiBhcHAgbm90IGluc3RhbGxlZC4gTm8gbmVlZCB0byB1bmluc3RhbGwnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCBkZXZpY2UucmVtb3ZlKGJ1bmRsZUlkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKGBSZXNldDogY291bGQgbm90IHJlbW92ZSAnJHtidW5kbGVJZH0nIGZyb20gZGV2aWNlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHRocm93IGVycjtcbiAgfVxuICBsb2cuZGVidWcoYFJlc2V0OiByZW1vdmVkICcke2J1bmRsZUlkfSdgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuUmVhbERldmljZVJlc2V0IChkZXZpY2UsIG9wdHMpIHtcbiAgaWYgKCFvcHRzLm5vUmVzZXQgfHwgb3B0cy5mdWxsUmVzZXQpIHtcbiAgICBsb2cuZGVidWcoJ1Jlc2V0OiBydW5uaW5nIGlvcyByZWFsIGRldmljZSByZXNldCBmbG93Jyk7XG4gICAgaWYgKCFvcHRzLm5vUmVzZXQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UmVhbERldmljZShkZXZpY2UsIG9wdHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoJ1Jlc2V0OiBmdWxsUmVzZXQgbm90IHNldC4gTGVhdmluZyBhcyBpcycpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxUb1JlYWxEZXZpY2UgKGRldmljZSwgYXBwLCBidW5kbGVJZCwgbm9SZXNldCA9IHRydWUpIHtcbiAgaWYgKCFkZXZpY2UudWRpZCB8fCAhYXBwKSB7XG4gICAgbG9nLmRlYnVnKCdObyBkZXZpY2UgaWQgb3IgYXBwLCBub3QgaW5zdGFsbGluZyB0byByZWFsIGRldmljZS4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXdhaXQgZGV2aWNlLmlzQXBwSW5zdGFsbGVkKGJ1bmRsZUlkKSkge1xuICAgIGlmIChub1Jlc2V0KSB7XG4gICAgICBsb2cuZGVidWcoYEFwcCAnJHtidW5kbGVJZH0nIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBObyBuZWVkIHRvIHJlaW5zdGFsbC5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBSZXNldCByZXF1ZXN0ZWQuIFJlbW92aW5nIGFwcCB3aXRoIGlkICcke2J1bmRsZUlkfScgZnJvbSB0aGUgZGV2aWNlYCk7XG4gICAgYXdhaXQgZGV2aWNlLnJlbW92ZShidW5kbGVJZCk7XG4gIH1cbiAgbG9nLmRlYnVnKGBJbnN0YWxsaW5nICcke2FwcH0nIG9uIGRldmljZSB3aXRoIFVVSUQgJyR7ZGV2aWNlLnVkaWR9Jy4uLmApO1xuICBhd2FpdCBkZXZpY2UuaW5zdGFsbChhcHApO1xuICBsb2cuZGVidWcoJ1RoZSBhcHAgaGFzIGJlZW4gaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseS4nKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVhbERldmljZU9iaiAodWRpZCkge1xuICBsb2cuZGVidWcoYENyZWF0aW5nIGlEZXZpY2Ugb2JqZWN0IHdpdGggdWRpZCAnJHt1ZGlkfSdgKTtcbiAgdHJ5IHtcbiAgICAvL1RoaXMgaURldmljZSBvYmplY3QgY291bGQgYmUgaWRldmljZWluc3RhbGxlciAobm9kZS1pZGV2aWNlKSBmb3IgZnV0dXJlIG9uY2Ugd2UgaGF2ZSBpZGV2aWNlaW5zdGFsbGVyIHdvcmtpbmcgZm9yIGlvcyAxMFxuICAgIGxldCBkZXZpY2UgPSBuZXcgSU9TRGVwbG95KHVkaWQpO1xuICAgIGF3YWl0IGRldmljZS5jaGVja1N0YXR1cygpO1xuICAgIHJldHVybiBkZXZpY2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsZXQgbXNnID0gJ0NvdWxkIG5vdCBpbml0aWFsaXplIGlvcy1kZXBsb3kgbWFrZSBzdXJlIGl0IGlzIGluc3RhbGxlZCAnICtcbiAgICAgICAgICAgICAgJyhucG0gaW5zdGFsbCAtZyBpb3MtZGVwbG95KSBhbmQgd29ya3Mgb24geW91ciBzeXN0ZW0uJztcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhtc2cpO1xuICB9XG59XG5cbmV4cG9ydCB7IGdldENvbm5lY3RlZERldmljZXMsIHJ1blJlYWxEZXZpY2VSZXNldCwgaW5zdGFsbFRvUmVhbERldmljZSxcbiAgICAgICAgIGdldFJlYWxEZXZpY2VPYmogfTtcbiJdLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==