@theintern/leadfoot
Version:
Leadfoot. A JavaScript client library that brings cross-platform consistency to the Selenium WebDriver API.
95 lines • 3.68 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
var util = __importStar(require("../lib/util"));
function pollUntil(poller, argsOrTimeout, timeout, pollInterval) {
var args;
if (typeof argsOrTimeout === 'number') {
pollInterval = timeout;
timeout = argsOrTimeout;
}
else {
args = argsOrTimeout;
}
args = args || [];
pollInterval = pollInterval || 67;
return function () {
var session = this.session;
var originalTimeout;
return session.getExecuteAsyncTimeout().then(function (currentTimeout) {
var resultOrError;
function storeResult(result) {
resultOrError = result;
}
function finish() {
if (resultOrError instanceof Error) {
throw resultOrError;
}
if (resultOrError == null) {
var error = new Error('Polling timed out with no result');
error.name = 'ScriptTimeout';
throw error;
}
return resultOrError;
}
function cleanup() {
if (!isNaN(originalTimeout)) {
return session.setExecuteAsyncTimeout(originalTimeout).then(finish);
}
return finish();
}
if (!isNaN(timeout)) {
originalTimeout = currentTimeout;
}
else {
timeout = currentTimeout;
}
return session
.setExecuteAsyncTimeout(timeout)
.then(function () {
/* jshint maxlen:140 */
return session.executeAsync(
/* istanbul ignore next */ function (poller, args, timeout, pollInterval, done) {
/* jshint evil:true */
poller = new Function(poller);
var endTime = Number(new Date()) + timeout;
(function poll() {
var result = poller.apply(this, args);
/*jshint evil:true */
if (result != null) {
done(result);
}
else if (Number(new Date()) < endTime) {
setTimeout(poll, pollInterval);
}
else {
done(null);
}
})();
}, [util.toExecuteString(poller), args, timeout, pollInterval]);
})
.then(storeResult, storeResult)
.then(cleanup, cleanup);
});
};
}
exports.default = pollUntil;
//# sourceMappingURL=pollUntil.js.map