UNPKG

appium-xcuitest-driver-conan

Version:

Appium driver for iOS using XCUITest for backend

192 lines (146 loc) 13.4 kB
'use strict'; var _Object$assign = require('babel-runtime/core-js/object/assign')['default']; var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; Object.defineProperty(exports, '__esModule', { value: true }); var _appiumIosDriver = require('appium-ios-driver'); var _asyncbox = require('asyncbox'); var _logger = require('../logger'); var _logger2 = _interopRequireDefault(_logger); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var extensions = {}; _Object$assign(extensions, _appiumIosDriver.iosCommands.web); extensions.clickCoords = function callee$0$0(coords) { var x, y; return _regeneratorRuntime.async(function callee$0$0$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: x = coords.x; y = coords.y; context$1$0.next = 4; return _regeneratorRuntime.awrap(this.proxyCommand('/wda/tap/nil', 'POST', { x: x, y: y })); case 4: case 'end': return context$1$0.stop(); } }, null, this); }; extensions.translateWebCoords = function callee$0$0(coords) { var webviewIndex, yOffset, webviews, wvId, rect, wvPos, realDims, cmd, _ref, w, h, wvDims, urlBarHeight, realDimensionHeight, xRatio, yRatio, newCoords; return _regeneratorRuntime.async(function callee$0$0$(context$1$0) { var _this = this; while (1) switch (context$1$0.prev = context$1$0.next) { case 0: _logger2['default'].debug('Translating coordinates (' + JSON.stringify(coords) + ') to web coordinates'); webviewIndex = this.webContextIndex(); yOffset = this.opts.curOrientation === 'LANDSCAPE' ? this.landscapeWebCoordsOffset : 0; webviews = undefined; context$1$0.next = 6; return _regeneratorRuntime.awrap((0, _asyncbox.retryInterval)(5, 100, function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(this.proxyCommand('/elements', 'POST', { using: 'class name', value: 'XCUIElementTypeWebView' })); case 2: webviews = context$2$0.sent; if (!(!webviews || webviews.length < 1)) { context$2$0.next = 5; break; } throw new Error('Could not find any webviews to click inside!'); case 5: case 'end': return context$2$0.stop(); } }, null, _this); })); case 6: if (_lodash2['default'].isUndefined(webviews[webviewIndex])) { _logger2['default'].warn('Could not find webview at index ' + webviewIndex + ', taking ' + 'last available one for clicking purposes'); webviewIndex = webviews.length - 1; } wvId = webviews[webviewIndex].ELEMENT; context$1$0.next = 10; return _regeneratorRuntime.awrap(this.proxyCommand('/element/' + wvId + '/rect', 'GET')); case 10: rect = context$1$0.sent; wvPos = { x: rect.x, y: rect.y }; realDims = { w: rect.width, h: rect.height }; cmd = '(function () { return {w: document.documentElement.clientWidth, h: document.documentElement.clientHeight}; })()'; context$1$0.next = 16; return _regeneratorRuntime.awrap(this.remote.execute(cmd)); case 16: _ref = context$1$0.sent; w = _ref.w; h = _ref.h; wvDims = { w: w, h: h }; urlBarHeight = 64; wvPos.y += urlBarHeight; realDimensionHeight = 108; realDims.h -= realDimensionHeight; if (!(wvDims && realDims && wvPos)) { context$1$0.next = 30; break; } xRatio = realDims.w / wvDims.w; yRatio = realDims.h / wvDims.h; newCoords = { x: wvPos.x + Math.round(xRatio * coords.x), y: wvPos.y + yOffset + Math.round(yRatio * coords.y) }; _logger2['default'].debug('Converted web coords ' + JSON.stringify(coords) + ' ' + ('into real coords ' + JSON.stringify(newCoords))); return context$1$0.abrupt('return', newCoords); case 30: case 'end': return context$1$0.stop(); } }, null, this); }; extensions.checkForAlert = function callee$0$0() { return _regeneratorRuntime.async(function callee$0$0$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: return context$1$0.abrupt('return', false); case 1: case 'end': return context$1$0.stop(); } }, null, this); }; extensions.waitForAtom = function callee$0$0(promise) { var res; return _regeneratorRuntime.async(function callee$0$0$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: res = null; context$1$0.prev = 1; context$1$0.next = 4; return _regeneratorRuntime.awrap(promise); case 4: res = context$1$0.sent; context$1$0.next = 10; break; case 7: context$1$0.prev = 7; context$1$0.t0 = context$1$0['catch'](1); throw new Error('Error while executing atom: ' + context$1$0.t0.message); case 10: return context$1$0.abrupt('return', this.parseExecuteResponse(res)); case 11: case 'end': return context$1$0.stop(); } }, null, this, [[1, 7]]); }; exports['default'] = extensions; module.exports = exports['default']; // tap on absolute coordinates // add static offset for safari in landscape mode // absolutize web coords // TODO: investigate where these come from. They appear to be constants in my tests //TODO: Add check for alert and accept/dismiss it as per autoAcceptAlert capability //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy93ZWIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OytCQUE0QixtQkFBbUI7O3dCQUNqQixVQUFVOztzQkFDeEIsV0FBVzs7OztzQkFDYixRQUFROzs7O0FBR3RCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQzs7QUFFcEIsZUFBYyxVQUFVLEVBQUUsNkJBQVksR0FBRyxDQUFDLENBQUM7O0FBRTNDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsb0JBQWdCLE1BQU07TUFDeEMsQ0FBQyxFQUFFLENBQUM7Ozs7QUFBSixTQUFDLEdBQU8sTUFBTSxDQUFkLENBQUM7QUFBRSxTQUFDLEdBQUksTUFBTSxDQUFYLENBQUM7O3lDQUdILElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRCxDQUFDLEVBQUUsQ0FBQyxFQUFELENBQUMsRUFBQyxDQUFDOzs7Ozs7O0NBQ3hELENBQUM7O0FBRUYsVUFBVSxDQUFDLGtCQUFrQixHQUFHLG9CQUFnQixNQUFNO01BRWhELFlBQVksRUFHWixPQUFPLEVBR1AsUUFBUSxFQWFSLElBQUksRUFDSixJQUFJLEVBQ0osS0FBSyxFQUNMLFFBQVEsRUFFUixHQUFHLFFBQ0YsQ0FBQyxFQUFFLENBQUMsRUFDTCxNQUFNLEVBR04sWUFBWSxFQUdaLG1CQUFtQixFQUlqQixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVM7Ozs7Ozs7QUF2Q2YsNEJBQUksS0FBSywrQkFBNkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsMEJBQXVCLENBQUM7QUFDaEYsb0JBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFO0FBR3JDLGVBQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUM7QUFHdEYsZ0JBQVE7O3lDQUNOLDZCQUFjLENBQUMsRUFBRSxHQUFHLEVBQUU7Ozs7O2lEQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFDLENBQUM7OztBQUEvRyx3QkFBUTs7c0JBQ0osQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7Ozs7O3NCQUM1QixJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQzs7Ozs7OztTQUVsRSxDQUFDOzs7QUFDRixZQUFJLG9CQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRTtBQUN6Qyw4QkFBSSxJQUFJLENBQUMscUNBQW1DLFlBQVksMkRBQ0YsQ0FBQyxDQUFDO0FBQ3hELHNCQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDcEM7O0FBRUcsWUFBSSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPOzt5Q0FDeEIsSUFBSSxDQUFDLFlBQVksZUFBYSxJQUFJLFlBQVMsS0FBSyxDQUFDOzs7QUFBOUQsWUFBSTtBQUNKLGFBQUssR0FBRyxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQzlCLGdCQUFRLEdBQUcsRUFBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBQztBQUUxQyxXQUFHLEdBQUcsaUhBQWlIOzt5Q0FDeEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDOzs7O0FBQXRDLFNBQUMsUUFBRCxDQUFDO0FBQUUsU0FBQyxRQUFELENBQUM7QUFDTCxjQUFNLEdBQUcsRUFBQyxDQUFDLEVBQUQsQ0FBQyxFQUFFLENBQUMsRUFBRCxDQUFDLEVBQUM7QUFHZixvQkFBWSxHQUFHLEVBQUU7O0FBQ3JCLGFBQUssQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDOztBQUVwQiwyQkFBbUIsR0FBRyxHQUFHOztBQUM3QixnQkFBUSxDQUFDLENBQUMsSUFBSSxtQkFBbUIsQ0FBQzs7Y0FFOUIsTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUE7Ozs7O0FBQ3pCLGNBQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLGNBQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLGlCQUFTLEdBQUc7QUFDZCxXQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFdBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JEOztBQUNELDRCQUFJLEtBQUssQ0FBQywwQkFBd0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0NBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUUsQ0FBQyxDQUFDOzRDQUN0RCxTQUFTOzs7Ozs7O0NBRW5CLENBQUM7O0FBRUYsVUFBVSxDQUFDLGFBQWEsR0FBRzs7Ozs0Q0FDbEIsS0FBSzs7Ozs7OztDQUNiLENBQUM7O0FBRUYsVUFBVSxDQUFDLFdBQVcsR0FBRyxvQkFBZ0IsT0FBTztNQUUxQyxHQUFHOzs7O0FBQUgsV0FBRyxHQUFHLElBQUk7Ozt5Q0FFQSxPQUFPOzs7QUFBbkIsV0FBRzs7Ozs7OztjQUVHLElBQUksS0FBSyxrQ0FBZ0MsZUFBSSxPQUFPLENBQUc7Ozs0Q0FFeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQzs7Ozs7OztDQUN0QyxDQUFDOztxQkFFYSxVQUFVIiwiZmlsZSI6ImxpYi9jb21tYW5kcy93ZWIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpb3NDb21tYW5kcyB9IGZyb20gJ2FwcGl1bS1pb3MtZHJpdmVyJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5cbmxldCBleHRlbnNpb25zID0ge307XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgaW9zQ29tbWFuZHMud2ViKTtcblxuZXh0ZW5zaW9ucy5jbGlja0Nvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgbGV0IHt4LCB5fSA9IGNvb3JkcztcblxuICAvLyB0YXAgb24gYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdGFwL25pbCcsICdQT1NUJywge3gsIHl9KTtcbn07XG5cbmV4dGVuc2lvbnMudHJhbnNsYXRlV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gKGNvb3Jkcykge1xuICBsb2cuZGVidWcoYFRyYW5zbGF0aW5nIGNvb3JkaW5hdGVzICgke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9KSB0byB3ZWIgY29vcmRpbmF0ZXNgKTtcbiAgbGV0IHdlYnZpZXdJbmRleCA9IHRoaXMud2ViQ29udGV4dEluZGV4KCk7XG5cbiAgLy8gYWRkIHN0YXRpYyBvZmZzZXQgZm9yIHNhZmFyaSBpbiBsYW5kc2NhcGUgbW9kZVxuICBsZXQgeU9mZnNldCA9IHRoaXMub3B0cy5jdXJPcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgPyB0aGlzLmxhbmRzY2FwZVdlYkNvb3Jkc09mZnNldCA6IDA7XG5cbiAgLy8gYWJzb2x1dGl6ZSB3ZWIgY29vcmRzXG4gIGxldCB3ZWJ2aWV3cztcbiAgYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCAxMDAsIGFzeW5jICgpID0+IHtcbiAgICB3ZWJ2aWV3cyA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvZWxlbWVudHMnLCAnUE9TVCcsIHt1c2luZzogJ2NsYXNzIG5hbWUnLCB2YWx1ZTogJ1hDVUlFbGVtZW50VHlwZVdlYlZpZXcnfSk7XG4gICAgaWYgKCF3ZWJ2aWV3cyB8fCB3ZWJ2aWV3cy5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGFueSB3ZWJ2aWV3cyB0byBjbGljayBpbnNpZGUhJyk7XG4gICAgfVxuICB9KTtcbiAgaWYgKF8uaXNVbmRlZmluZWQod2Vidmlld3Nbd2Vidmlld0luZGV4XSkpIHtcbiAgICBsb2cud2FybihgQ291bGQgbm90IGZpbmQgd2VidmlldyBhdCBpbmRleCAke3dlYnZpZXdJbmRleH0sIHRha2luZyBgICtcbiAgICAgICAgICAgICAgICBgbGFzdCBhdmFpbGFibGUgb25lIGZvciBjbGlja2luZyBwdXJwb3Nlc2ApO1xuICAgIHdlYnZpZXdJbmRleCA9IHdlYnZpZXdzLmxlbmd0aCAtIDE7XG4gIH1cblxuICBsZXQgd3ZJZCA9IHdlYnZpZXdzW3dlYnZpZXdJbmRleF0uRUxFTUVOVDtcbiAgbGV0IHJlY3QgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt3dklkfS9yZWN0YCwgJ0dFVCcpO1xuICBsZXQgd3ZQb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICBsZXQgcmVhbERpbXMgPSB7dzogcmVjdC53aWR0aCwgaDogcmVjdC5oZWlnaHR9O1xuXG4gIGxldCBjbWQgPSAnKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHt3OiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIGg6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9OyB9KSgpJztcbiAgbGV0IHt3LCBofSA9IGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoY21kKTtcbiAgbGV0IHd2RGltcyA9IHt3LCBofTtcblxuICAvLyBUT0RPOiBpbnZlc3RpZ2F0ZSB3aGVyZSB0aGVzZSBjb21lIGZyb20uIFRoZXkgYXBwZWFyIHRvIGJlIGNvbnN0YW50cyBpbiBteSB0ZXN0c1xuICBsZXQgdXJsQmFySGVpZ2h0ID0gNjQ7XG4gIHd2UG9zLnkgKz0gdXJsQmFySGVpZ2h0O1xuXG4gIGxldCByZWFsRGltZW5zaW9uSGVpZ2h0ID0gMTA4O1xuICByZWFsRGltcy5oIC09IHJlYWxEaW1lbnNpb25IZWlnaHQ7XG5cbiAgaWYgKHd2RGltcyAmJiByZWFsRGltcyAmJiB3dlBvcykge1xuICAgIGxldCB4UmF0aW8gPSByZWFsRGltcy53IC8gd3ZEaW1zLnc7XG4gICAgbGV0IHlSYXRpbyA9IHJlYWxEaW1zLmggLyB3dkRpbXMuaDtcbiAgICBsZXQgbmV3Q29vcmRzID0ge1xuICAgICAgeDogd3ZQb3MueCArIE1hdGgucm91bmQoeFJhdGlvICogY29vcmRzLngpLFxuICAgICAgeTogd3ZQb3MueSArIHlPZmZzZXQgKyBNYXRoLnJvdW5kKHlSYXRpbyAqIGNvb3Jkcy55KSxcbiAgICB9O1xuICAgIGxvZy5kZWJ1ZyhgQ29udmVydGVkIHdlYiBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShjb29yZHMpfSBgICtcbiAgICAgICAgICAgICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHRlbnNpb25zLndhaXRGb3JBdG9tID0gYXN5bmMgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgLy9UT0RPOiBBZGQgY2hlY2sgZm9yIGFsZXJ0IGFuZCBhY2NlcHQvZGlzbWlzcyBpdCBhcyBwZXIgYXV0b0FjY2VwdEFsZXJ0IGNhcGFiaWxpdHlcbiAgbGV0IHJlcyA9IG51bGw7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgcHJvbWlzZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBleGVjdXRpbmcgYXRvbTogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGhpcy5wYXJzZUV4ZWN1dGVSZXNwb25zZShyZXMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==