@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
58 lines • 5.06 kB
JavaScript
import refetchElement from './utils/refetchElement.js';
import implicitWait from './utils/implicitWait.js';
import { getBrowserObject } from './utils/index.js';
import { ELEMENT_KEY } from './constants.js';
/**
* This method is an command wrapper for elements that checks if a command is called
* that wasn't found on the page and automatically waits for it
*
* @param {Function} fn command shim
*/
export const elementErrorHandler = (fn) => (commandName, commandFn) => {
return function elementErrorHandlerCallback(...args) {
return fn(commandName, async function elementErrorHandlerCallbackFn() {
const element = await implicitWait(this, commandName);
this.elementId = element.elementId;
this[ELEMENT_KEY] = element.elementId;
try {
const result = await fn(commandName, commandFn).apply(this, args);
/**
* assume Safari responses like { error: 'no such element', message: '', stacktrace: '' }
* as `stale element reference`
*/
const caps = getBrowserObject(this).capabilities;
if (caps && caps.browserName === 'safari' &&
result && result.error === 'no such element') {
const errorName = 'stale element reference';
const err = new Error(errorName);
err.name = errorName;
throw err;
}
return result;
}
catch (err) {
if (err.name === 'stale element reference') {
const element = await refetchElement(this, commandName);
this.elementId = element.elementId;
this.parent = element.parent;
return await fn(commandName, commandFn).apply(this, args);
}
throw err;
}
}).apply(this);
};
};
/**
* handle single command calls from multiremote instances
*/
export const multiremoteHandler = (wrapCommand) => (commandName) => {
return wrapCommand(commandName, function (...args) {
// @ts-ignore
const commandResults = this.instances.map((instanceName) => {
// @ts-ignore ToDo(Christian)
return this[instanceName][commandName](...args);
});
return Promise.all(commandResults);
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWlkZGxld2FyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFjLE1BQU0sMkJBQTJCLENBQUE7QUFDdEQsT0FBTyxZQUFZLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTVDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxFQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBbUIsRUFBRSxTQUFtQixFQUFFLEVBQUU7SUFDOUYsT0FBTyxTQUFTLDJCQUEyQixDQUE2QixHQUFHLElBQVc7UUFDbEYsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssVUFBVSw2QkFBNkI7WUFDL0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ3JELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQTtZQUVyQyxJQUFJLENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBRWpFOzs7bUJBR0c7Z0JBQ0gsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBd0MsQ0FBQTtnQkFDNUUsSUFDSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRO29CQUNyQyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxpQkFBaUIsRUFDOUMsQ0FBQztvQkFDQyxNQUFNLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQTtvQkFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7b0JBQ2hDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFBO29CQUNwQixNQUFNLEdBQUcsQ0FBQTtnQkFDYixDQUFDO2dCQUVELE9BQU8sTUFBTSxDQUFBO1lBQ2pCLENBQUM7WUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO2dCQUNoQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLEVBQUUsQ0FBQztvQkFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO29CQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUE7b0JBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQTtvQkFFNUIsT0FBTyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDN0QsQ0FBQztnQkFDRCxNQUFNLEdBQUcsQ0FBQTtZQUNiLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFbEIsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUM5QixXQUFxQixFQUN2QixFQUFFLENBQUMsQ0FBQyxXQUFzQyxFQUFFLEVBQUU7SUFDNUMsT0FBTyxXQUFXLENBQUMsV0FBVyxFQUFFLFVBQWdELEdBQUcsSUFBVztRQUMxRixhQUFhO1FBQ2IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFvQixFQUFFLEVBQUU7WUFDL0QsNkJBQTZCO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDbkQsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDdEMsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ==