UNPKG

@qavajs/steps-playwright

Version:

qavajs steps to interact with playwright

66 lines 3.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.conditionWaitExtractRegexp = exports.conditionValidations = void 0; exports.conditionWait = conditionWait; exports.getConditionWait = getConditionWait; const test_1 = require("@playwright/test"); class SoftAssertionError extends Error { name = 'SoftAssertionError'; } exports.conditionValidations = { PRESENT: 'present', CLICKABLE: 'clickable', VISIBLE: 'visible', INVISIBLE: 'invisible', IN_VIEWPORT: 'in viewport', ENABLED: 'enabled', DISABLED: 'disabled' }; 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 makeExpect = (element, reverse, message) => { const eMessage = (0, test_1.expect)(element, message); return reverse ? eMessage.not : eMessage; }; const waits = { [exports.conditionValidations.PRESENT]: (element, reverse, timeout, timeoutMsg) => makeExpect(element, reverse, timeoutMsg).toBeAttached({ timeout }), [exports.conditionValidations.VISIBLE]: (element, reverse, timeout, timeoutMsg) => makeExpect(element, reverse, timeoutMsg).toBeVisible({ timeout }), [exports.conditionValidations.INVISIBLE]: (element, reverse, timeout, timeoutMsg) => makeExpect(element, reverse, timeoutMsg).toBeHidden({ timeout }), [exports.conditionValidations.IN_VIEWPORT]: (element, reverse, timeout, timeoutMsg) => makeExpect(element, reverse, timeoutMsg).toBeInViewport({ timeout }), [exports.conditionValidations.ENABLED]: (element, reverse, timeout, timeoutMsg) => makeExpect(element, reverse, timeoutMsg).toBeEnabled({ timeout }), [exports.conditionValidations.DISABLED]: (element, reverse, timeout, timeoutMsg) => makeExpect(element, reverse, timeoutMsg).toBeDisabled({ timeout }), [exports.conditionValidations.CLICKABLE]: (element, reverse, timeout, timeoutMsg) => makeExpect(element, reverse, timeoutMsg).toBeEnabled({ timeout }), }; /** * Wait for condition * @param {Locator} element - 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 timeoutMsg = `Element is${reverse ? '' : ' not'} ${validationType}`; const waitFn = waits[validationType]; await waitFn(element, reverse, timeout, timeoutMsg); } function getConditionWait(condition) { const match = condition.match(exports.conditionWaitExtractRegexp); if (!match) throw new Error(`${condition} wait is not implemented`); const [_, reverse, soft, validation] = match; return 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; } }; } //# sourceMappingURL=conditionWait.js.map