UNPKG

gst-atom-xcuitest-driver

Version:

ATOM driver for iOS using XCUITest for backend

130 lines (103 loc) 14.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.helpers = exports.commands = void 0; require("source-map-support/register"); var _lodash = _interopRequireDefault(require("lodash")); var _xmldom = _interopRequireDefault(require("xmldom")); var _js2xmlparser = _interopRequireDefault(require("js2xmlparser2")); let commands = {}, helpers = {}, extensions = {}; exports.helpers = helpers; exports.commands = commands; const APPIUM_SRC_XML = '<?xml version="1.0" encoding="UTF-8"?><AppiumAUT/>'; commands.getPageSource = async function getPageSource() { if (this.isWebContext()) { const script = 'return document.documentElement.outerHTML'; return await this.executeAtom('execute_script', [script, []]); } if ((await this.settings.getSettings()).useJSONSource) { let srcTree = await this.mobileGetSource({ format: 'json' }); return getSourceXml(getTreeForXML(srcTree)); } return await this.getNativePageSource(); }; helpers.getNativePageSource = async function getNativePageSource() { let srcTree = await this.proxyCommand('/source', 'GET'); let parser = new _xmldom.default.DOMParser(); let tree = parser.parseFromString(srcTree); let doc = parser.parseFromString(APPIUM_SRC_XML); doc.documentElement.appendChild(tree.documentElement); return new _xmldom.default.XMLSerializer().serializeToString(doc); }; helpers.mobileGetSource = async function mobileGetSource(opts = {}) { if (!_lodash.default.isString(opts.format)) { return await this.getNativePageSource(); } const paramsMap = { format: opts.format }; if (opts.excludedAttributes) { paramsMap.excluded_attributes = opts.excludedAttributes; } const query = Object.entries(paramsMap).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join('&'); return await this.proxyCommand(`/source?${query}`, 'GET'); }; function getTreeForXML(srcTree) { function getTree(element, elementIndex, parentPath) { let curPath = `${parentPath}/${elementIndex}`; let rect = element.rect || {}; let subtree = { '@': { type: `XCUIElementType${element.type}`, enabled: parseInt(element.isEnabled, 10) === 1, visible: parseInt(element.isVisible, 10) === 1, x: rect.x, y: rect.y, width: rect.width, height: rect.height }, '>': [] }; if (element.name !== null) { subtree['@'].name = element.name; } if (element.label !== null) { subtree['@'].label = element.label; } if (element.value !== null) { subtree['@'].value = element.value; } for (let i = 0; i < (element.children || []).length; i++) { subtree['>'].push(getTree(element.children[i], i, curPath)); } return { [`XCUIElementType${element.type}`]: subtree }; } let tree = getTree(srcTree, 0, ''); return tree; } function getSourceXml(jsonSource) { return (0, _js2xmlparser.default)('AppiumAUT', jsonSource, { wrapArray: { enabled: false, elementName: 'element' }, declaration: { include: true }, prettyPrinting: { indentString: ' ' } }); } Object.assign(extensions, commands, helpers); var _default = extensions; exports.default = _default;require('source-map-support').install(); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zb3VyY2UuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIkFQUElVTV9TUkNfWE1MIiwiZ2V0UGFnZVNvdXJjZSIsImlzV2ViQ29udGV4dCIsInNjcmlwdCIsImV4ZWN1dGVBdG9tIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInVzZUpTT05Tb3VyY2UiLCJzcmNUcmVlIiwibW9iaWxlR2V0U291cmNlIiwiZm9ybWF0IiwiZ2V0U291cmNlWG1sIiwiZ2V0VHJlZUZvclhNTCIsImdldE5hdGl2ZVBhZ2VTb3VyY2UiLCJwcm94eUNvbW1hbmQiLCJwYXJzZXIiLCJ4bWxkb20iLCJET01QYXJzZXIiLCJ0cmVlIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jIiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJvcHRzIiwiXyIsImlzU3RyaW5nIiwicGFyYW1zTWFwIiwiZXhjbHVkZWRBdHRyaWJ1dGVzIiwiZXhjbHVkZWRfYXR0cmlidXRlcyIsInF1ZXJ5IiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsImdldFRyZWUiLCJlbGVtZW50IiwiZWxlbWVudEluZGV4IiwicGFyZW50UGF0aCIsImN1clBhdGgiLCJyZWN0Iiwic3VidHJlZSIsInR5cGUiLCJlbmFibGVkIiwicGFyc2VJbnQiLCJpc0VuYWJsZWQiLCJ2aXNpYmxlIiwiaXNWaXNpYmxlIiwieCIsInkiLCJ3aWR0aCIsImhlaWdodCIsIm5hbWUiLCJsYWJlbCIsInZhbHVlIiwiaSIsImNoaWxkcmVuIiwibGVuZ3RoIiwicHVzaCIsImpzb25Tb3VyY2UiLCJ3cmFwQXJyYXkiLCJlbGVtZW50TmFtZSIsImRlY2xhcmF0aW9uIiwiaW5jbHVkZSIsInByZXR0eVByaW50aW5nIiwiaW5kZW50U3RyaW5nIiwiYXNz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RUFBcURGLENBQUMsRUFBdEQsRUFBMEQ7QUFDeERkLE1BQUFBLE9BQU8sQ0FBQyxHQUFELENBQVAsQ0FBYWlCLElBQWIsQ0FBa0J2QixPQUFPLENBQUNDLE9BQU8sQ0FBQ29CLFFBQVIsQ0FBaUJELENBQWpCLENBQUQsRUFBc0JBLENBQXRCLEVBQXlCaEIsT0FBekIsQ0FBekI7QUFDRDs7QUFDRCxXQUFPO0FBQ0wsT0FBRSxrQkFBaUJILE9BQU8sQ0FBQ00sSUFBSyxFQUFoQyxHQUFvQ0Q7QUFEL0IsS0FBUDtBQUdEOztBQUNELE1BQUkzQixJQUFJLEdBQUdxQixPQUFPLENBQUMvQixPQUFELEVBQVUsQ0FBVixFQUFhLEVBQWIsQ0FBbEI7QUFDQSxTQUFPVSxJQUFQO0FBQ0Q7O0FBRUQsU0FBU1AsWUFBVCxDQUF1Qm9ELFVBQXZCLEVBQW1DO0FBQ2pDLFNBQU8sMkJBQU8sV0FBUCxFQUFvQkEsVUFBcEIsRUFBZ0M7QUFDckNDLElBQUFBLFNBQVMsRUFBRTtBQUFDakIsTUFBQUEsT0FBTyxFQUFFLEtBQVY7QUFBaUJrQixNQUFBQSxXQUFXLEVBQUU7QUFBOUIsS0FEMEI7QUFFckNDLElBQUFBLFdBQVcsRUFBRTtBQUFDQyxNQUFBQSxPQUFPLEVBQUU7QUFBVixLQUZ3QjtBQUdyQ0MsSUFBQUEsY0FBYyxFQUFFO0FBQUNDLE1BQUFBLFlBQVksRUFBRTtBQUFmO0FBSHFCLEdBQWhDLENBQVA7QUFLRDs7QUFHRHJDLE1BQU0sQ0FBQ3NDLE1BQVAsQ0FBY3ZFLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB4bWxkb20gZnJvbSAneG1sZG9tJztcbmltcG9ydCBqczJ4bWwgZnJvbSAnanMyeG1scGFyc2VyMic7XG5cblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb25zdCBBUFBJVU1fU1JDX1hNTCA9ICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz48QXBwaXVtQVVULz4nO1xuXG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBnZXRQYWdlU291cmNlICgpIHtcbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwnO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG4gIH1cblxuICBpZiAoKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkudXNlSlNPTlNvdXJjZSkge1xuICAgIGxldCBzcmNUcmVlID0gYXdhaXQgdGhpcy5tb2JpbGVHZXRTb3VyY2Uoe2Zvcm1hdDogJ2pzb24nfSk7XG4gICAgcmV0dXJuIGdldFNvdXJjZVhtbChnZXRUcmVlRm9yWE1MKHNyY1RyZWUpKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5nZXROYXRpdmVQYWdlU291cmNlKCk7XG59O1xuXG5oZWxwZXJzLmdldE5hdGl2ZVBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBnZXROYXRpdmVQYWdlU291cmNlICgpIHtcbiAgbGV0IHNyY1RyZWUgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3NvdXJjZScsICdHRVQnKTtcblxuICBsZXQgcGFyc2VyID0gbmV3IHhtbGRvbS5ET01QYXJzZXIoKTtcblxuICBsZXQgdHJlZSA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3JjVHJlZSk7XG5cbiAgbGV0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoQVBQSVVNX1NSQ19YTUwpO1xuICBkb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRyZWUuZG9jdW1lbnRFbGVtZW50KTtcblxuICByZXR1cm4gbmV3IHhtbGRvbS5YTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZG9jKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlR2V0U291cmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0U291cmNlIChvcHRzID0ge30pIHtcbiAgaWYgKCFfLmlzU3RyaW5nKG9wdHMuZm9ybWF0KSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldE5hdGl2ZVBhZ2VTb3VyY2UoKTtcbiAgfVxuICBjb25zdCBwYXJhbXNNYXAgPSB7XG4gICAgZm9ybWF0OiBvcHRzLmZvcm1hdCxcbiAgfTtcbiAgaWYgKG9wdHMuZXhjbHVkZWRBdHRyaWJ1dGVzKSB7XG4gICAgcGFyYW1zTWFwLmV4Y2x1ZGVkX2F0dHJpYnV0ZXMgPSBvcHRzLmV4Y2x1ZGVkQXR0cmlidXRlcztcbiAgfVxuICBjb25zdCBxdWVyeSA9IE9iamVjdC5lbnRyaWVzKHBhcmFtc01hcClcbiAgICAubWFwKChbaywgdl0pID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YClcbiAgICAuam9pbignJicpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9zb3VyY2U/JHtxdWVyeX1gLCAnR0VUJyk7XG59O1xuXG4vKiBXaWxsIGdldCBKU09OIG9mIHRoZSBmb3JtOlxuICogICB7IGlzRW5hYmxlZDogJzEnLFxuICogICAgIGlzVmlzaWJsZTogJzEnLFxuICogICAgIGZyYW1lOiAne3swLCAwfSwgezM3NSwgNjY3fX0nLFxuICogICAgIGNoaWxkcmVuOlxuICogICAgICBbIHsgaXNFbmFibGVkOiAnMScsXG4gKiAgICAgICAgICBpc1Zpc2libGU6ICcxJyxcbiAqICAgICAgICAgIGZyYW1lOiAne3swLCAwfSwgezM3NSwgNjY3fX0nLFxuICogICAgICAgICAgY2hpbGRyZW46IFtdLFxuICogICAgICAgICAgcmVjdDogeyB4OiAwLCB5OiAwLCB3aWR0aDogMzc1LCBoZWlnaHQ6IDY2NyB9LFxuICogICAgICAgICAgdmFsdWU6IG51bGwsXG4gKiAgICAgICAgICBsYWJlbDogbnVsbCxcbiAqICAgICAgICAgIHR5cGU6ICdPdGhlcicsXG4gKiAgICAgICAgICBuYW1lOiBudWxsLFxuICogICAgICAgICAgcmF3SWRlbnRpZmllcjogbnVsbCB9LFxuICogICAgIHJlY3Q6IHsgb3JpZ2luOiB7IHg6IDAsIHk6IDAgfSwgc2l6ZTogeyB3aWR0aDogMzc1LCBoZWlnaHQ6IDY2NyB9IH0sXG4gKiAgICAgdmFsdWU6IG51bGwsXG4gKiAgICAgbGFiZWw6ICdVSUNhdGFsb2cnLFxuICogICAgIHR5cGU6ICdBcHBsaWNhdGlvbicsXG4gKiAgICAgbmFtZTogJ1VJQ2F0YWxvZycsXG4gKiAgICAgcmF3SWRlbnRpZmllcjogbnVsbCB9XG4gKi9cbmZ1bmN0aW9uIGdldFRyZWVGb3JYTUwgKHNyY1RyZWUpIHtcbiAgZnVuY3Rpb24gZ2V0VHJlZSAoZWxlbWVudCwgZWxlbWVudEluZGV4LCBwYXJlbnRQYXRoKSB7XG4gICAgbGV0IGN1clBhdGggPSBgJHtwYXJlbnRQYXRofS8ke2VsZW1lbnRJbmRleH1gO1xuICAgIGxldCByZWN0ID0gZWxlbWVudC5yZWN0IHx8IHt9O1xuICAgIGxldCBzdWJ0cmVlID0ge1xuICAgICAgJ0AnOiB7XG4gICAgICAgIHR5cGU6IGBYQ1VJRWxlbWVudFR5cGUke2VsZW1lbnQudHlwZX1gLFxuICAgICAgICBlbmFibGVkOiBwYXJzZUludChlbGVtZW50LmlzRW5hYmxlZCwgMTApID09PSAxLFxuICAgICAgICB2aXNpYmxlOiBwYXJzZUludChlbGVtZW50LmlzVmlzaWJsZSwgMTApID09PSAxLFxuICAgICAgICB4OiByZWN0LngsXG4gICAgICAgIHk6IHJlY3QueSxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICB9LFxuICAgICAgJz4nOiBbXVxuICAgIH07XG4gICAgaWYgKGVsZW1lbnQubmFtZSAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLm5hbWUgPSBlbGVtZW50Lm5hbWU7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmxhYmVsICE9PSBudWxsKSB7XG4gICAgICBzdWJ0cmVlWydAJ10ubGFiZWwgPSBlbGVtZW50LmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLnZhbHVlID0gZWxlbWVudC52YWx1ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoZWxlbWVudC5jaGlsZHJlbiB8fCBbXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN1YnRyZWVbJz4nXS5wdXNoKGdldFRyZWUoZWxlbWVudC5jaGlsZHJlbltpXSwgaSwgY3VyUGF0aCkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgW2BYQ1VJRWxlbWVudFR5cGUke2VsZW1lbnQudHlwZX1gXTogc3VidHJlZVxuICAgIH07XG4gIH1cbiAgbGV0IHRyZWUgPSBnZXRUcmVlKHNyY1RyZWUsIDAsICcnKTtcbiAgcmV0dXJuIHRyZWU7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZVhtbCAoanNvblNvdXJjZSkge1xuICByZXR1cm4ganMyeG1sKCdBcHBpdW1BVVQnLCBqc29uU291cmNlLCB7XG4gICAgd3JhcEFycmF5OiB7ZW5hYmxlZDogZmFsc2UsIGVsZW1lbnROYW1lOiAnZWxlbWVudCd9LFxuICAgIGRlY2xhcmF0aW9uOiB7aW5jbHVkZTogdHJ1ZX0sXG4gICAgcHJldHR5UHJpbnRpbmc6IHtpbmRlbnRTdHJpbmc6ICcgICd9XG4gIH0pO1xufVxuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==