@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
89 lines • 7.88 kB
JavaScript
/**
* Constants around commands
*/
const TOUCH_ACTIONS = ['press', 'longPress', 'tap', 'moveTo', 'wait', 'release'];
const POS_ACTIONS = TOUCH_ACTIONS.slice(0, 4);
const ACCEPTED_OPTIONS = ['x', 'y', 'element'];
export const formatArgs = function (scope, actions) {
return actions.map((action) => {
if (Array.isArray(action)) {
return formatArgs(scope, action);
}
if (typeof action === 'string') {
action = { action };
}
const formattedAction = {
action: action.action,
options: {}
};
/**
* don't propagate for actions that don't require element options
*/
const actionElement = action.element && typeof action.element.elementId === 'string'
? action.element.elementId
: scope.elementId;
if (POS_ACTIONS.includes(action.action) && formattedAction.options && actionElement) {
formattedAction.options.element = actionElement;
}
if (formattedAction.options && typeof action.x === 'number' && isFinite(action.x)) {
formattedAction.options.x = action.x;
}
if (formattedAction.options && typeof action.y === 'number' && isFinite(action.y)) {
formattedAction.options.y = action.y;
}
if (formattedAction.options && action.ms) {
formattedAction.options.ms = action.ms;
}
/**
* remove options property if empty
*/
if (formattedAction.options && Object.keys(formattedAction.options).length === 0) {
delete formattedAction.options;
}
return formattedAction;
});
};
/**
* Make sure action has proper options before sending command to Appium.
*
* @param {Object} params touchAction parameters
* @return null
*/
export const validateParameters = (params) => {
const options = Object.keys(params.options || {});
if (params.action === 'release' && options.length !== 0) {
throw new Error('action "release" doesn\'t accept any options ' +
`("${options.join('", "')}" found)`);
}
if (params.action === 'wait' &&
(options.includes('x') || options.includes('y'))) {
throw new Error('action "wait" doesn\'t accept x or y options');
}
if (POS_ACTIONS.includes(params.action)) {
for (const option in params.options) {
if (!ACCEPTED_OPTIONS.includes(option)) {
throw new Error(`action "${params.action}" doesn't accept "${option}" as option`);
}
}
if (options.length === 0) {
throw new Error(`Touch actions like "${params.action}" need at least some kind of ` +
'position information like "element", "x" or "y" options, you\'ve none given.');
}
}
};
export const touchAction = function (actions) {
if (!this.multiTouchPerform || !this.touchPerform) {
throw new Error('touchAction can be used with Appium only.');
}
if (!Array.isArray(actions)) {
actions = [actions];
}
const formattedAction = formatArgs(this, actions);
const protocolCommand = Array.isArray(actions[0])
// cast old JSONWP
? this.multiTouchPerform.bind(this)
: this.touchPerform.bind(this);
formattedAction.forEach((params) => validateParameters(params));
return protocolCommand(formattedAction);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7QUFDaEYsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUE7QUFXOUMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFVBQ3RCLEtBQWdELEVBQ2hELE9BQXVCO0lBRXZCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQW1CLEVBQUUsRUFBRTtRQUN2QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFRLENBQUE7UUFDM0MsQ0FBQztRQUVELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUE7UUFDdkIsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFxQjtZQUN0QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsT0FBTyxFQUFFLEVBQTBCO1NBQ3RDLENBQUE7UUFFRDs7V0FFRztRQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksT0FBUSxNQUFNLENBQUMsT0FBc0MsQ0FBQyxTQUFTLEtBQUssUUFBUTtZQUNoSCxDQUFDLENBQUUsTUFBTSxDQUFDLE9BQXNDLENBQUMsU0FBUztZQUMxRCxDQUFDLENBQUUsS0FBNkIsQ0FBQyxTQUFTLENBQUE7UUFDOUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xGLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQTtRQUNuRCxDQUFDO1FBRUQsSUFBSSxlQUFlLENBQUMsT0FBTyxJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hGLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDeEMsQ0FBQztRQUNELElBQUksZUFBZSxDQUFDLE9BQU8sSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ3hDLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUE7UUFDMUMsQ0FBQztRQUVEOztXQUVHO1FBQ0gsSUFBSSxlQUFlLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUE7UUFDbEMsQ0FBQztRQUVELE9BQU8sZUFBZSxDQUFBO0lBQzFCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtJQUMzRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7SUFDakQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxLQUFLLENBQ1gsK0NBQStDO1lBQy9DLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUN0QyxDQUFBO0lBQ0wsQ0FBQztJQUVELElBQ0ksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNO1FBQ3hCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2xELENBQUM7UUFDQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsTUFBTSxhQUFhLENBQUMsQ0FBQTtZQUNyRixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUNYLHVCQUF1QixNQUFNLENBQUMsTUFBTSwrQkFBK0I7Z0JBQ25FLDhFQUE4RSxDQUNqRixDQUFBO1FBQ0wsQ0FBQztJQUNMLENBQUM7QUFDTCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFFdkIsT0FBcUI7SUFFckIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUMsT0FBc0IsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2pELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLGtCQUFrQjtRQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQW9EO1FBQ3RGLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNsQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQy9ELE9BQU8sZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBQzNDLENBQUMsQ0FBQSJ9