@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
67 lines • 4.4 kB
JavaScript
import { ELEMENT_KEY } from '../../constants.js';
let actionIds = 0;
export default class BaseAction {
instance;
#id;
#type;
#parameters;
#instance;
sequence = [];
constructor(instance, type, params) {
this.instance = instance;
this.#instance = instance;
this.#id = params?.id || `action${++actionIds}`;
this.#type = type;
this.#parameters = params?.parameters || {};
}
toJSON() {
return {
id: this.#id,
type: this.#type,
parameters: this.#parameters,
actions: this.sequence
};
}
/**
* Inserts a pause action for the specified device, ensuring it idles for a tick.
* @param duration idle time of tick
*/
pause(duration) {
this.sequence.push({ type: 'pause', duration });
return this;
}
/**
* Perform action sequence
* @param skipRelease set to true if `releaseActions` command should not be invoked
*/
async perform(skipRelease = false) {
/**
* transform chainable / not resolved elements into WDIO elements
*/
for (const seq of this.sequence) {
/**
* continue if we don't deal with origin or elements within
* origin at all
*/
if (!seq.origin || typeof seq.origin === 'string') {
continue;
}
/**
* resolve promise element
*/
if (typeof seq.origin.then === 'function') {
await seq.origin.waitForExist();
seq.origin = await seq.origin;
}
if (!seq.origin[ELEMENT_KEY]) {
throw new Error(`Couldn't find element for "${seq.type}" action sequence`);
}
seq.origin = { [ELEMENT_KEY]: seq.origin[ELEMENT_KEY] };
}
await this.#instance.performActions([this.toJSON()]);
if (!skipRelease) {
await this.#instance.releaseActions();
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9hY3Rpb25zL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBWWhELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQTtBQUVqQixNQUFNLENBQUMsT0FBTyxPQUFPLFVBQVU7SUFRYjtJQVBkLEdBQUcsQ0FBUTtJQUNYLEtBQUssQ0FBWTtJQUNqQixXQUFXLENBQWtCO0lBQzdCLFNBQVMsQ0FBcUI7SUFDcEIsUUFBUSxHQUFVLEVBQUUsQ0FBQTtJQUU5QixZQUNjLFFBQTZCLEVBQ3ZDLElBQWdCLEVBQ2hCLE1BQXlCO1FBRmYsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFJdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUE7UUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEVBQUUsRUFBRSxJQUFJLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQTtRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFBO0lBQy9DLENBQUM7SUFFRCxNQUFNO1FBQ0YsT0FBTztZQUNILEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNaLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3pCLENBQUE7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFFLFFBQWdCO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQy9DLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUUsV0FBVyxHQUFHLEtBQUs7UUFDOUI7O1dBRUc7UUFDSCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5Qjs7O2VBR0c7WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hELFNBQVE7WUFDWixDQUFDO1lBRUQ7O2VBRUc7WUFDSCxJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQTtnQkFDL0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUE7WUFDakMsQ0FBQztZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLENBQUE7WUFDOUUsQ0FBQztZQUVELEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQTtRQUMzRCxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDcEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3pDLENBQUM7SUFDTCxDQUFDO0NBQ0oifQ==