playwright-fluent
Version:
Fluent API around playwright
57 lines (56 loc) • 2.83 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.selectOptionsInHandle = exports.defaultSelectOptions = void 0;
const hover_on_handle_1 = require("../hover-on-handle");
const are_options_already_selected_in_handle_1 = require("../are-options-already-selected-in-handle");
const utils_1 = require("../../../utils");
const is_handle_enabled_1 = require("../is-handle-enabled");
const are_options_available_in_handle_1 = require("../are-options-available-in-handle");
const get_all_options_of_handle_1 = require("../get-all-options-of-handle");
exports.defaultSelectOptions = {
stabilityInMilliseconds: 300,
timeoutInMilliseconds: 30000,
verbose: false,
};
async function selectOptionsInHandle(selector, name, labels, page, options) {
if (!page) {
throw new Error(`Cannot select options '${labels}' because no browser has been launched`);
}
if (!selector) {
throw new Error(`Cannot select options '${labels}' in '${name}' because selector was not found in DOM`);
}
const hoverOptions = {
...hover_on_handle_1.defaultHoverOptions,
verbose: options.verbose,
stabilityInMilliseconds: options.stabilityInMilliseconds,
timeoutInMilliseconds: options.timeoutInMilliseconds,
};
await (0, hover_on_handle_1.hoverOnHandle)(selector, name, page, hoverOptions);
const areOptionsAlreadySelected = await (0, are_options_already_selected_in_handle_1.areOptionsAlreadySelectedInHandle)(selector, name, labels);
if (areOptionsAlreadySelected) {
return;
}
(0, utils_1.report)('waiting for the selector to be enabled ...', options.verbose);
await (0, utils_1.waitUntil)(() => (0, is_handle_enabled_1.isHandleEnabled)(selector, { verbose: false }), `Cannot select options '${labels}' in '${name}' because this selector is disabled`, {
...options,
throwOnTimeout: true,
wrapPredicateExecutionInsideTryCatch: true,
});
(0, utils_1.report)('waiting for the options to be available ...', options.verbose);
await (0, utils_1.waitUntil)(() => (0, are_options_available_in_handle_1.areOptionsAvailableInHandle)(selector, name, labels), async () => {
const existingOptions = await (0, get_all_options_of_handle_1.getAllOptionsOfHandle)(selector, name);
const existingLabels = existingOptions.map((o) => o.label);
return `Cannot select options '${labels}' in '${name}' because this selector has only options '${existingLabels}'`;
}, {
...options,
throwOnTimeout: true,
wrapPredicateExecutionInsideTryCatch: true,
});
const values = labels.map((label) => {
return {
label,
};
});
await selector.selectOption(values);
}
exports.selectOptionsInHandle = selectOptionsInHandle;
;