UNPKG

@luminati-io/webdriverio8

Version:

Next-gen browser and mobile automation test framework for Node.js

46 lines 3.73 kB
import Timer from '../../utils/Timer.js'; /** * This wait command is your universal weapon if you want to wait on something. It expects a condition * and waits until that condition is fulfilled with a truthy value to be returned. * * A common example is to wait until a certain element contains a certain text (see example). * * @alias browser.waitUntil * @param {Function} condition condition to wait on until returning a truthy value * @param {WaitUntilOptions=} options command options * @param {Number=} options.timeout timeout in ms (default: 5000) * @param {String=} options.timeoutMsg error message to throw when waitUntil times out * @param {Number=} options.interval interval between condition checks (default: 500) * @return {Boolean} true if condition is fulfilled * @uses utility/pause * @example https://github.com/webdriverio/example-recipes/blob/0bfb2b8d212b627a2659b10f4449184b657e1d59/waitUntil/index.html#L3-L8 * @example https://github.com/webdriverio/example-recipes/blob/0c9252b0a4f7e18a34cece74e5798c1fe464c120/waitUntil/waitUntilExample.js#L16-L24 * @type utility * */ export function waitUntil(condition, { timeout = this.options.waitforTimeout, interval = this.options.waitforInterval, timeoutMsg } = {}) { if (typeof condition !== 'function') { throw new Error('Condition is not a function'); } /** * ensure that timeout and interval are set properly */ if (typeof timeout !== 'number') { timeout = this.options.waitforTimeout; } if (typeof interval !== 'number') { interval = this.options.waitforInterval; } const fn = condition.bind(this); const timer = new Timer(interval, timeout, fn, true); return timer.catch((e) => { if (e.message === 'timeout') { if (typeof timeoutMsg === 'string') { throw new Error(timeoutMsg); } throw new Error(`waitUntil condition timed out after ${timeout}ms`); } throw new Error(`waitUntil condition failed with the following reason: ${(e && e.message) || e}`); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdFVudGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Jyb3dzZXIvd2FpdFVudGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLHNCQUFzQixDQUFBO0FBR3hDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUVyQixTQUFtRCxFQUNuRCxFQUNJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFDckMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUN2QyxVQUFVLEtBQ2lCLEVBQUU7SUFFakMsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUF3QixDQUFBO0lBQ25ELENBQUM7SUFFRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQXlCLENBQUE7SUFDckQsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBa0IsRUFBRSxPQUFpQixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUN4RSxPQUFRLEtBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRTtRQUNyQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUIsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUMvQixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsT0FBTyxJQUFJLENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDckcsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDIn0=