@qavajs/steps-playwright
Version:
qavajs steps to interact with playwright
66 lines • 3.29 kB
JavaScript
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
;