webdriverio-automation
Version:
WebdriverIO-Automation android ios project
55 lines (43 loc) • 1.78 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.multiremoteHandler = exports.elementErrorHandler = void 0;
var _refetchElement = _interopRequireDefault(require("./utils/refetchElement"));
var _implicitWait = _interopRequireDefault(require("./utils/implicitWait"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const elementErrorHandler = fn => (commandName, commandFn) => {
return function elementErrorHandlerCallback(...args) {
return fn(commandName, async function elementErrorHandlerCallbackFn() {
const element = await (0, _implicitWait.default)(this, commandName);
this.elementId = element.elementId;
try {
const result = await fn(commandName, commandFn).apply(this, args);
if (result && result.error === 'no such element') {
const err = new Error();
err.name = 'stale element reference';
throw err;
}
return result;
} catch (error) {
if (error.name === 'stale element reference') {
const element = await (0, _refetchElement.default)(this, commandName);
this.elementId = element.elementId;
this.parent = element.parent;
return await fn(commandName, commandFn).apply(this, args);
}
throw error;
}
}).apply(this);
};
};
exports.elementErrorHandler = elementErrorHandler;
const multiremoteHandler = wrapCommand => commandName => {
return wrapCommand(commandName, function (...args) {
const commandResults = this.instances.map(instanceName => {
return this[instanceName][commandName](...args);
});
return Promise.all(commandResults);
});
};
exports.multiremoteHandler = multiremoteHandler;
;