@qavajs/steps-wdio
Version:
qavajs steps to interact with webdriverio
70 lines • 3.14 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.conditionWaitExtractRegexp = exports.conditionValidations = void 0;
exports.conditionWait = conditionWait;
exports.getConditionWait = getConditionWait;
class SoftAssertionError extends Error {
constructor(...args) {
super(...args);
this.name = 'SoftAssertionError';
}
}
exports.conditionValidations = {
PRESENT: 'present',
CLICKABLE: 'clickable',
VISIBLE: 'visible',
INVISIBLE: 'invisible',
ENABLED: 'enabled',
DISABLED: 'disabled',
IN_VIEWPORT: 'in viewport'
};
const notClause = '(not )?';
const toBeClause = 'to (?:be )?';
const softClause = '(softly )?';
const validationClause = `(${Object.values(exports.conditionValidations).join('|')})`;
exports.conditionWaitExtractRegexp = new RegExp(`^${notClause}${toBeClause}${softClause}${validationClause}$`);
const waits = {
[exports.conditionValidations.PRESENT]: (element, reverse, timeout, timeoutMsg) => element.waitForExist({ reverse, timeout, timeoutMsg }),
[exports.conditionValidations.CLICKABLE]: (element, reverse, timeout, timeoutMsg) => element.waitForClickable({ reverse, timeout, timeoutMsg }),
[exports.conditionValidations.VISIBLE]: (element, reverse, timeout, timeoutMsg) => element.waitForDisplayed({ reverse, timeout, timeoutMsg }),
[exports.conditionValidations.INVISIBLE]: (element, reverse, timeout, timeoutMsg) => element.waitForDisplayed({ reverse: !reverse, timeout, timeoutMsg }),
[exports.conditionValidations.ENABLED]: (element, reverse, timeout, timeoutMsg) => element.waitForEnabled({ reverse, timeout, timeoutMsg }),
[exports.conditionValidations.DISABLED]: (element, reverse, timeout, timeoutMsg) => element.waitForEnabled({ reverse: !reverse, timeout, timeoutMsg }),
[exports.conditionValidations.IN_VIEWPORT]: (element, reverse, timeout, timeoutMsg) => element.waitForDisplayed({
withinViewport: true,
reverse,
timeout,
timeoutMsg
})
};
/**
* Wait for condition
* @param {WebdriverIO.Element} element - wdio element
* @param {string} validationType - validation to perform
* @param {number} [timeout] - timeout to wait
* @param {boolean} [reverse] - negate flag
* @return {Promise<void>}
*/
async function conditionWait(element, validationType, timeout = 10000, reverse = false) {
const waitFn = waits[validationType];
await waitFn(element, reverse, timeout);
}
function getConditionWait(condition) {
const match = condition.match(exports.conditionWaitExtractRegexp);
if (!match)
throw new Error(`${condition} wait is not implemented`);
const [_, reverse, soft, validation] = match;
const fn = async function (element, timeout) {
try {
await conditionWait(element, validation, timeout, Boolean(reverse));
}
catch (error) {
if (soft && error instanceof Error)
throw new SoftAssertionError(error.message, { cause: error });
throw error;
}
};
fn.validation = validation;
return fn;
}
//# sourceMappingURL=conditionWait.js.map
;