/**
*
* 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 an truthy value. A condition can be either a promise
* or a command that returns a promise.
*
* A common example is to wait until a certain element contains a certain
* text.
*
* <example>
:example.html
<div id="someText">I am some text</div>
<script>
setTimeout(function() {
$('#someText').html('I am now different');
}, 1000);
</script>
:waitUntil.js
client.waitUntil(function() {
return this.getText('#someText').then(function(text) {
return text === 'I am now different'
});
});
* </example>
*
*
* @param {Function|Promise} condition condition to wait on
* @param {Number=} ms timeout in ms (default: 500)
* @param {Number=} interval interval between condition checks (default: 250)
*
* @uses utility/pause
* @type utility
*
*/
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _utilsErrorHandler = require('../utils/ErrorHandler');
var REJECT_MESSAGE = 'Promise never resolved with an truthy value';
function waitUntilPrivate(condition, timeout, interval, starttime) {
// istanbul ignore next
var _this = this;
var promise = undefined;
var now = new Date().getTime();
var timeLeft = timeout - (now - starttime);
timeLeft = timeLeft < 0 ? 0 : timeLeft;
if (!timeLeft) {
return Promise.reject(new _utilsErrorHandler.CommandError(REJECT_MESSAGE));
}
if (typeof condition === 'function') {
promise = condition.call(this);
} else {
promise = Promise.resolve(condition);
}
return new Promise(function (resolve, reject) {
var timeoutId = setTimeout(function () {
reject(new _utilsErrorHandler.CommandError(REJECT_MESSAGE));
}, timeLeft);
promise.then(function (res) {
clearTimeout(timeoutId);
if (!res) {
return resolve(_this.pause(interval).then(waitUntilPrivate.bind(_this, condition, timeout, interval, starttime)));
}
resolve(res);
}, function (err) {
clearTimeout(timeoutId);
reject(new _utilsErrorHandler.CommandError('Promise was fulfilled but got rejected with the following reason: ' + err));
});
});
}
exports['default'] = function (condition, timeout, interval) {
/*!
* ensure that timeout and interval are set properly
*/
if (typeof timeout !== 'number') {
timeout = this.options.waitforTimeout;
}
if (typeof interval !== 'number') {
interval = this.options.waitforInterval;
}
var starttime = new Date().getTime();
return waitUntilPrivate.call(this, condition, timeout, interval, starttime);
};
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvd2FpdFVudGlsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBcUM2Qix1QkFBdUI7O0FBRXBELElBQU0sY0FBYyxHQUFHLDZDQUE2QyxDQUFBOztBQUVwRSxTQUFTLGdCQUFnQixDQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTs7Ozs7QUFDaEUsUUFBSSxPQUFPLFlBQUEsQ0FBQTs7QUFFWCxRQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO0FBQzlCLFFBQUksUUFBUSxHQUFHLE9BQU8sSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFBLEFBQUMsQ0FBQTtBQUMxQyxZQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFBOztBQUV0QyxRQUFJLENBQUMsUUFBUSxFQUFFO0FBQ1gsZUFBTyxPQUFPLENBQUMsTUFBTSxDQUFDLG9DQUFpQixjQUFjLENBQUMsQ0FBQyxDQUFBO0tBQzFEOztBQUVELFFBQUksT0FBTyxTQUFTLEtBQUssVUFBVSxFQUFFO0FBQ2pDLGVBQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0tBQ2pDLE1BQU07QUFDSCxlQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtLQUN2Qzs7QUFFRCxXQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBSztBQUNwQyxZQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBTTtBQUM3QixrQkFBTSxDQUFDLG9DQUFpQixjQUFjLENBQUMsQ0FBQyxDQUFBO1NBQzNDLEVBQUUsUUFBUSxDQUFDLENBQUE7O0FBRVosZUFBTyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSztBQUNsQix3QkFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFBOztBQUV2QixnQkFBSSxDQUFDLEdBQUcsRUFBRTtBQUNOLHVCQUFPLE9BQU8sQ0FBQyxNQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3BDLGdCQUFnQixDQUFDLElBQUksUUFBTyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FDdkUsQ0FBQyxDQUFBO2FBQ0w7O0FBRUQsbUJBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUNmLEVBQUUsVUFBQyxHQUFHLEVBQUs7QUFDUix3QkFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQ3ZCLGtCQUFNLENBQUMsMkdBQXNGLEdBQUcsQ0FBRyxDQUFDLENBQUE7U0FDdkcsQ0FBQyxDQUFBO0tBQ0wsQ0FBQyxDQUFBO0NBQ0w7O3FCQUVjLFVBQVUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7Ozs7QUFJbkQsUUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDN0IsZUFBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFBO0tBQ3hDOztBQUVELFFBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO0FBQzlCLGdCQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUE7S0FDMUM7O0FBRUQsUUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUNwQyxXQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUE7Q0FDOUUiLCJmaWxlIjoiL1VzZXJzL2NocmlzdGlhbmJyb21hbm4vU2l0ZXMvV2VicHJvamVrdGUvd2ViZHJpdmVyanMvREVWL2xpYi9jb21tYW5kcy93YWl0VW50aWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBUaGlzIHdhaXQgY29tbWFuZCBpcyB5b3VyIHVuaXZlcnNhbCB3ZWFwb24gaWYgeW91IHdhbnQgdG8gd2FpdCBvblxuICogc29tZXRoaW5nLiBJdCBleHBlY3RzIGEgY29uZGl0aW9uIGFuZCB3YWl0cyB1bnRpbCB0aGF0IGNvbmRpdGlvblxuICogaXMgZnVsZmlsbGVkIHdpdGggYW4gdHJ1dGh5IHZhbHVlLiBBIGNvbmRpdGlvbiBjYW4gYmUgZWl0aGVyIGEgcHJvbWlzZVxuICogb3IgYSBjb21tYW5kIHRoYXQgcmV0dXJucyBhIHByb21pc2UuXG4gKlxuICogQSBjb21tb24gZXhhbXBsZSBpcyB0byB3YWl0IHVudGlsIGEgY2VydGFpbiBlbGVtZW50IGNvbnRhaW5zIGEgY2VydGFpblxuICogdGV4dC5cbiAqXG4gKiA8ZXhhbXBsZT5cbiAgICA6ZXhhbXBsZS5odG1sXG4gICAgPGRpdiBpZD1cInNvbWVUZXh0XCI+SSBhbSBzb21lIHRleHQ8L2Rpdj5cbiAgICA8c2NyaXB0PlxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgJCgnI3NvbWVUZXh0JykuaHRtbCgnSSBhbSBub3cgZGlmZmVyZW50Jyk7XG4gICAgICB9LCAxMDAwKTtcbiAgICA8L3NjcmlwdD5cblxuICAgIDp3YWl0VW50aWwuanNcbiAgICBjbGllbnQud2FpdFVudGlsKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGV4dCgnI3NvbWVUZXh0JykudGhlbihmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0ID09PSAnSSBhbSBub3cgZGlmZmVyZW50J1xuICAgICAgfSk7XG4gICAgfSk7XG4gKiA8L2V4YW1wbGU+XG4gKlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb258UHJvbWlzZX0gY29uZGl0aW9uICBjb25kaXRpb24gdG8gd2FpdCBvblxuICogQHBhcmFtIHtOdW1iZXI9fSAgICAgICAgICBtcyAgICAgICAgIHRpbWVvdXQgaW4gbXMgKGRlZmF1bHQ6IDUwMClcbiAqIEBwYXJhbSB7TnVtYmVyPX0gICAgICAgICAgaW50ZXJ2YWwgICBpbnRlcnZhbCBiZXR3ZWVuIGNvbmRpdGlvbiBjaGVja3MgKGRlZmF1bHQ6IDI1MClcbiAqXG4gKiBAdXNlcyB1dGlsaXR5L3BhdXNlXG4gKiBAdHlwZSB1dGlsaXR5XG4gKlxuICovXG5cbmltcG9ydCB7IENvbW1hbmRFcnJvciB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlcidcblxuY29uc3QgUkVKRUNUX01FU1NBR0UgPSAnUHJvbWlzZSBuZXZlciByZXNvbHZlZCB3aXRoIGFuIHRydXRoeSB2YWx1ZSdcblxuZnVuY3Rpb24gd2FpdFVudGlsUHJpdmF0ZSAoY29uZGl0aW9uLCB0aW1lb3V0LCBpbnRlcnZhbCwgc3RhcnR0aW1lKSB7XG4gICAgbGV0IHByb21pc2VcblxuICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgIHZhciB0aW1lTGVmdCA9IHRpbWVvdXQgLSAobm93IC0gc3RhcnR0aW1lKVxuICAgIHRpbWVMZWZ0ID0gdGltZUxlZnQgPCAwID8gMCA6IHRpbWVMZWZ0XG5cbiAgICBpZiAoIXRpbWVMZWZ0KSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQ29tbWFuZEVycm9yKFJFSkVDVF9NRVNTQUdFKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlID0gY29uZGl0aW9uLmNhbGwodGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmRpdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QobmV3IENvbW1hbmRFcnJvcihSRUpFQ1RfTUVTU0FHRSkpXG4gICAgICAgIH0sIHRpbWVMZWZ0KVxuXG4gICAgICAgIHByb21pc2UudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuXG4gICAgICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMucGF1c2UoaW50ZXJ2YWwpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFByaXZhdGUuYmluZCh0aGlzLCBjb25kaXRpb24sIHRpbWVvdXQsIGludGVydmFsLCBzdGFydHRpbWUpXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZShyZXMpXG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgICAgICAgICByZWplY3QobmV3IENvbW1hbmRFcnJvcihgUHJvbWlzZSB3YXMgZnVsZmlsbGVkIGJ1dCBnb3QgcmVqZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHJlYXNvbjogJHtlcnJ9YCkpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGNvbmRpdGlvbiwgdGltZW91dCwgaW50ZXJ2YWwpIHtcbiAgICAvKiFcbiAgICAgKiBlbnN1cmUgdGhhdCB0aW1lb3V0IGFuZCBpbnRlcnZhbCBhcmUgc2V0IHByb3Blcmx5XG4gICAgICovXG4gICAgaWYgKHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aW1lb3V0ID0gdGhpcy5vcHRpb25zLndhaXRmb3JUaW1lb3V0XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnRlcnZhbCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgaW50ZXJ2YWwgPSB0aGlzLm9wdGlvbnMud2FpdGZvckludGVydmFsXG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0dGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgcmV0dXJuIHdhaXRVbnRpbFByaXZhdGUuY2FsbCh0aGlzLCBjb25kaXRpb24sIHRpbWVvdXQsIGludGVydmFsLCBzdGFydHRpbWUpXG59XG4iXX0= |