/**
*
* Wait for an element (selected by css selector) for the provided amount of
* milliseconds to be (in)visible. If multiple elements get queryied by given
* selector, it returns true (or false if reverse flag is set) if at least one
* element is visible.
*
* This function checks for visibility using window.getComputedStyle. An
* element will be considered invisible if its visibility is 'hidden', its
* display is 'none', its opacity is 0 or its x/y coordinates are not
* within the viewport.
*
* @param {String} selector element to wait for
* @param {Number=} ms time in ms (default: 500)
* @param {Boolean=} reverse if true it waits for the opposite (default: false)
*
* @uses protocol/selectorExecuteAsync, protocol/timeoutsAsyncScript
* @type utility
*
*/
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _utilsErrorHandler = require('../utils/ErrorHandler');
var waitForVisible = function waitForVisible(selector, ms) {
// istanbul ignore next
var _this = this;
var reverse = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
/*!
* ensure that ms is set properly
*/
if (typeof ms !== 'number') {
ms = this.options.waitforTimeout;
}
return this.waitUntil(function () {
return _this.isVisible(selector).then(function (isVisible) {
if (!Array.isArray(isVisible)) {
return isVisible !== reverse;
}
var result = reverse;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = isVisible[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var val = _step.value;
if (!reverse) {
result = result || val;
} else {
result = result && val;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator['return']) {
_iterator['return']();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return result !== reverse;
});
}, ms)['catch'](function (e) {
if (e.message === 'Promise never resolved with an truthy value') {
var isReversed = reverse ? '' : 'not';
throw new _utilsErrorHandler.CommandError('element (' + selector + ') still ' + isReversed + ' visible after ' + ms + 'ms');
}
throw e;
});
};
exports['default'] = waitForVisible;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvd2FpdEZvclZpc2libGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lDQXFCNkIsdUJBQXVCOztBQUVwRCxJQUFJLGNBQWMsR0FBRyxTQUFqQixjQUFjLENBQWEsUUFBUSxFQUFFLEVBQUUsRUFBbUI7Ozs7O1FBQWpCLE9BQU8seURBQUcsS0FBSzs7Ozs7QUFJeEQsUUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQUU7QUFDeEIsVUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFBO0tBQ25DOztBQUVELFdBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFNO0FBQ3hCLGVBQU8sTUFBSyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsU0FBUyxFQUFLO0FBQ2hELGdCQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUMzQix1QkFBTyxTQUFTLEtBQUssT0FBTyxDQUFBO2FBQy9COztBQUVELGdCQUFJLE1BQU0sR0FBRyxPQUFPLENBQUE7Ozs7OztBQUNwQixxQ0FBZ0IsU0FBUyw4SEFBRTt3QkFBbEIsR0FBRzs7QUFDUix3QkFBSSxDQUFDLE9BQU8sRUFBRTtBQUNWLDhCQUFNLEdBQUcsTUFBTSxJQUFJLEdBQUcsQ0FBQTtxQkFDekIsTUFBTTtBQUNILDhCQUFNLEdBQUcsTUFBTSxJQUFJLEdBQUcsQ0FBQTtxQkFDekI7aUJBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFRCxtQkFBTyxNQUFNLEtBQUssT0FBTyxDQUFBO1NBQzVCLENBQUMsQ0FBQTtLQUNMLEVBQUUsRUFBRSxDQUFDLFNBQU0sQ0FBQyxVQUFDLENBQUMsRUFBSztBQUNoQixZQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssNkNBQTZDLEVBQUU7QUFDN0QsZ0JBQUksVUFBVSxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFBO0FBQ3JDLGtCQUFNLGtEQUE2QixRQUFRLGdCQUFXLFVBQVUsdUJBQWtCLEVBQUUsUUFBSyxDQUFBO1NBQzVGO0FBQ0QsY0FBTSxDQUFDLENBQUE7S0FDVixDQUFDLENBQUE7Q0FDTCxDQUFBOztxQkFFYyxjQUFjIiwiZmlsZSI6Ii9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvd2FpdEZvclZpc2libGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBXYWl0IGZvciBhbiBlbGVtZW50IChzZWxlY3RlZCBieSBjc3Mgc2VsZWN0b3IpIGZvciB0aGUgcHJvdmlkZWQgYW1vdW50IG9mXG4gKiBtaWxsaXNlY29uZHMgdG8gYmUgKGluKXZpc2libGUuIElmIG11bHRpcGxlIGVsZW1lbnRzIGdldCBxdWVyeWllZCBieSBnaXZlblxuICogc2VsZWN0b3IsIGl0IHJldHVybnMgdHJ1ZSAob3IgZmFsc2UgaWYgcmV2ZXJzZSBmbGFnIGlzIHNldCkgaWYgYXQgbGVhc3Qgb25lXG4gKiBlbGVtZW50IGlzIHZpc2libGUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHZpc2liaWxpdHkgdXNpbmcgd2luZG93LmdldENvbXB1dGVkU3R5bGUuIEFuXG4gKiBlbGVtZW50IHdpbGwgYmUgY29uc2lkZXJlZCBpbnZpc2libGUgaWYgaXRzIHZpc2liaWxpdHkgaXMgJ2hpZGRlbicsIGl0c1xuICogZGlzcGxheSBpcyAnbm9uZScsIGl0cyBvcGFjaXR5IGlzIDAgb3IgaXRzIHgveSBjb29yZGluYXRlcyBhcmUgbm90XG4gKiB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIHNlbGVjdG9yIGVsZW1lbnQgdG8gd2FpdCBmb3JcbiAqIEBwYXJhbSB7TnVtYmVyPX0gIG1zICAgICAgIHRpbWUgaW4gbXMgKGRlZmF1bHQ6IDUwMClcbiAqIEBwYXJhbSB7Qm9vbGVhbj19IHJldmVyc2UgIGlmIHRydWUgaXQgd2FpdHMgZm9yIHRoZSBvcHBvc2l0ZSAoZGVmYXVsdDogZmFsc2UpXG4gKlxuICogQHVzZXMgcHJvdG9jb2wvc2VsZWN0b3JFeGVjdXRlQXN5bmMsIHByb3RvY29sL3RpbWVvdXRzQXN5bmNTY3JpcHRcbiAqIEB0eXBlIHV0aWxpdHlcbiAqXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyJ1xuXG5sZXQgd2FpdEZvclZpc2libGUgPSBmdW5jdGlvbiAoc2VsZWN0b3IsIG1zLCByZXZlcnNlID0gZmFsc2UpIHtcbiAgICAvKiFcbiAgICAgKiBlbnN1cmUgdGhhdCBtcyBpcyBzZXQgcHJvcGVybHlcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIG1zICE9PSAnbnVtYmVyJykge1xuICAgICAgICBtcyA9IHRoaXMub3B0aW9ucy53YWl0Zm9yVGltZW91dFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLndhaXRVbnRpbCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZShzZWxlY3RvcikudGhlbigoaXNWaXNpYmxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXNWaXNpYmxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1Zpc2libGUgIT09IHJldmVyc2VcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHJldmVyc2VcbiAgICAgICAgICAgIGZvciAobGV0IHZhbCBvZiBpc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJldmVyc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHZhbFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB2YWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IHJldmVyc2VcbiAgICAgICAgfSlcbiAgICB9LCBtcykuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgaWYgKGUubWVzc2FnZSA9PT0gJ1Byb21pc2UgbmV2ZXIgcmVzb2x2ZWQgd2l0aCBhbiB0cnV0aHkgdmFsdWUnKSB7XG4gICAgICAgICAgICBsZXQgaXNSZXZlcnNlZCA9IHJldmVyc2UgPyAnJyA6ICdub3QnXG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKGBlbGVtZW50ICgke3NlbGVjdG9yfSkgc3RpbGwgJHtpc1JldmVyc2VkfSB2aXNpYmxlIGFmdGVyICR7bXN9bXNgKVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVcbiAgICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCB3YWl0Rm9yVmlzaWJsZVxuIl19 |