@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
46 lines • 3.73 kB
JavaScript
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=