UNPKG

webdriverio

Version:

Next-gen browser and mobile automation test framework for Node.js

113 lines (85 loc) 4.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getElements = exports.getElement = void 0; var _utils = require("@wdio/utils"); var _lodash = _interopRequireDefault(require("lodash.clonedeep")); var _utils2 = require("../utils"); var _middlewares = require("../middlewares"); var _constants = require("../constants"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const getElement = function findElement(selector, res, isReactElement = false) { const browser = (0, _utils2.getBrowserObject)(this); const propertiesObject = _objectSpread(_objectSpread(_objectSpread({}, (0, _lodash.default)(browser.__propertiesObject__)), (0, _utils2.getPrototype)('element')), {}, { scope: 'element' }); const element = (0, _utils.webdriverMonad)(this.options, client => { const elementId = (0, _utils2.getElementFromResponse)(res); if (elementId) { client.elementId = elementId; if (this.isW3C) { client[_constants.ELEMENT_KEY] = elementId; } else { client.ELEMENT = elementId; } } else { client.error = res; } client.selector = selector; client.parent = this; client.emit = this.emit.bind(this); client.isReactElement = isReactElement; return client; }, propertiesObject); const elementInstance = element(this.sessionId, (0, _middlewares.elementErrorHandler)(_utils.wrapCommand)); const origAddCommand = elementInstance.addCommand.bind(elementInstance); elementInstance.addCommand = (name, fn) => { browser.__propertiesObject__[name] = { value: fn }; origAddCommand(name, (0, _utils.runFnInFiberContext)(fn)); }; return elementInstance; }; exports.getElement = getElement; const getElements = function getElements(selector, elemResponse, isReactElement = false) { const browser = (0, _utils2.getBrowserObject)(this); const propertiesObject = _objectSpread(_objectSpread({}, (0, _lodash.default)(browser.__propertiesObject__)), (0, _utils2.getPrototype)('element')); const elements = elemResponse.map((res, i) => { propertiesObject.scope = 'element'; const element = (0, _utils.webdriverMonad)(this.options, client => { const elementId = (0, _utils2.getElementFromResponse)(res); if (elementId) { client.elementId = elementId; if (this.isW3C) { client[_constants.ELEMENT_KEY] = elementId; } else { client.ELEMENT = elementId; } } else { client.error = res; } client.selector = selector; client.parent = this; client.index = i; client.emit = this.emit.bind(this); client.isReactElement = isReactElement; return client; }, propertiesObject); const elementInstance = element(this.sessionId, (0, _middlewares.elementErrorHandler)(_utils.wrapCommand)); const origAddCommand = elementInstance.addCommand.bind(elementInstance); elementInstance.addCommand = (name, fn) => { browser.__propertiesObject__[name] = { value: fn }; origAddCommand(name, (0, _utils.runFnInFiberContext)(fn)); }; return elementInstance; }); return elements; }; exports.getElements = getElements;