appium-xcuitest-driver-conan
Version:
Appium driver for iOS using XCUITest for backend
233 lines (179 loc) • 13.5 kB
JavaScript
;
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==