UNPKG

@qavajs/steps-wdio

Version:

qavajs steps to interact with webdriverio

70 lines 3.14 kB
"use strict"; 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