all files / DEV/lib/commands/ waitForText.js

91.43% Statements 32/35
50% Branches 12/24
0% Functions 0/4
40% Lines 2/5
27 statements, 12 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88                                                                                                                                                                             
/**
 *
 * Wait for an element (selected by css selector) for the provided amount of
 * milliseconds to have text/content. If multiple elements get queryied by given
 * selector, it returns true (or false if reverse flag is set) if at least one
 * element has text/content.
 *
 * @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 action/selectorExecuteAsync, protocol/timeoutsAsyncScript
 * @type utility
 *
 */
 
'use strict';
 
Object.defineProperty(exports, '__esModule', {
    value: true
});
 
var _utilsErrorHandler = require('../utils/ErrorHandler');

var waitForText = function waitForText(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.getText(selector).then(function (text) {
            if (!Array.isArray(text)) {
                return text !== '' !== reverse;
            }

            var result = reverse;
            var _iteratorNormalCompletion = true;
            var _didIteratorError = false;
            var _iteratorError = undefined;
 
            try {
                for (var _iterator = text[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 ? 'with' : 'without';
            throw new _utilsErrorHandler.CommandError('element (' + selector + ') still ' + isReversed + ' text after ' + ms + 'ms');
        }
        throw e;
    });
};
 
exports['default'] = waitForText;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvd2FpdEZvclRleHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0FnQjZCLHVCQUF1Qjs7QUFFcEQsSUFBSSxXQUFXLEdBQUcsU0FBZCxXQUFXLENBQWEsUUFBUSxFQUFFLEVBQUUsRUFBbUI7Ozs7O1FBQWpCLE9BQU8seURBQUcsS0FBSzs7Ozs7QUFJckQsUUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQUU7QUFDeEIsVUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFBO0tBQ25DOztBQUVELFdBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFNO0FBQ3hCLGVBQU8sTUFBSyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSSxFQUFLO0FBQ3pDLGdCQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0Qix1QkFBTyxBQUFDLElBQUksS0FBSyxFQUFFLEtBQU0sT0FBTyxDQUFBO2FBQ25DOztBQUVELGdCQUFJLE1BQU0sR0FBRyxPQUFPLENBQUE7Ozs7OztBQUNwQixxQ0FBZ0IsSUFBSSw4SEFBRTt3QkFBYixHQUFHOztBQUNSLHdCQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1YsOEJBQU0sR0FBRyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQTtxQkFDaEMsTUFBTTtBQUNILDhCQUFNLEdBQUcsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUE7cUJBQ2hDO2lCQUNKOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsbUJBQU8sTUFBTSxLQUFLLE9BQU8sQ0FBQTtTQUM1QixDQUFDLENBQUE7S0FDTCxFQUFFLEVBQUUsQ0FBQyxTQUFNLENBQUMsVUFBQyxDQUFDLEVBQUs7QUFDaEIsWUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLDZDQUE2QyxFQUFFO0FBQzdELGdCQUFJLFVBQVUsR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQTtBQUM3QyxrQkFBTSxrREFBNkIsUUFBUSxnQkFBVyxVQUFVLG9CQUFlLEVBQUUsUUFBSyxDQUFBO1NBQ3pGO0FBQ0QsY0FBTSxDQUFDLENBQUE7S0FDVixDQUFDLENBQUE7Q0FDTCxDQUFBOztxQkFFYyxXQUFXIiwiZmlsZSI6Ii9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvd2FpdEZvclRleHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBXYWl0IGZvciBhbiBlbGVtZW50IChzZWxlY3RlZCBieSBjc3Mgc2VsZWN0b3IpIGZvciB0aGUgcHJvdmlkZWQgYW1vdW50IG9mXG4gKiBtaWxsaXNlY29uZHMgdG8gaGF2ZSB0ZXh0L2NvbnRlbnQuIElmIG11bHRpcGxlIGVsZW1lbnRzIGdldCBxdWVyeWllZCBieSBnaXZlblxuICogc2VsZWN0b3IsIGl0IHJldHVybnMgdHJ1ZSAob3IgZmFsc2UgaWYgcmV2ZXJzZSBmbGFnIGlzIHNldCkgaWYgYXQgbGVhc3Qgb25lXG4gKiBlbGVtZW50IGhhcyB0ZXh0L2NvbnRlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9ICAgc2VsZWN0b3IgZWxlbWVudCB0byB3YWl0IGZvclxuICogQHBhcmFtIHtOdW1iZXI9fSAgbXMgICAgICAgdGltZSBpbiBtcyAoZGVmYXVsdDogNTAwKVxuICogQHBhcmFtIHtCb29sZWFuPX0gcmV2ZXJzZSAgaWYgdHJ1ZSBpdCB3YWl0cyBmb3IgdGhlIG9wcG9zaXRlIChkZWZhdWx0OiBmYWxzZSlcbiAqXG4gKiBAdXNlcyBhY3Rpb24vc2VsZWN0b3JFeGVjdXRlQXN5bmMsIHByb3RvY29sL3RpbWVvdXRzQXN5bmNTY3JpcHRcbiAqIEB0eXBlIHV0aWxpdHlcbiAqXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyJ1xuXG5sZXQgd2FpdEZvclRleHQgPSBmdW5jdGlvbiAoc2VsZWN0b3IsIG1zLCByZXZlcnNlID0gZmFsc2UpIHtcbiAgICAvKiFcbiAgICAgKiBlbnN1cmUgdGhhdCBtcyBpcyBzZXQgcHJvcGVybHlcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIG1zICE9PSAnbnVtYmVyJykge1xuICAgICAgICBtcyA9IHRoaXMub3B0aW9ucy53YWl0Zm9yVGltZW91dFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLndhaXRVbnRpbCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRleHQoc2VsZWN0b3IpLnRoZW4oKHRleHQpID0+IHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGV4dCAhPT0gJycpICE9PSByZXZlcnNlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSByZXZlcnNlXG4gICAgICAgICAgICBmb3IgKGxldCB2YWwgb2YgdGV4dCkge1xuICAgICAgICAgICAgICAgIGlmICghcmV2ZXJzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwgdmFsICE9PSAnJ1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB2YWwgPT09ICcnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSByZXZlcnNlXG4gICAgICAgIH0pXG4gICAgfSwgbXMpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09ICdQcm9taXNlIG5ldmVyIHJlc29sdmVkIHdpdGggYW4gdHJ1dGh5IHZhbHVlJykge1xuICAgICAgICAgICAgbGV0IGlzUmV2ZXJzZWQgPSByZXZlcnNlID8gJ3dpdGgnIDogJ3dpdGhvdXQnXG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKGBlbGVtZW50ICgke3NlbGVjdG9yfSkgc3RpbGwgJHtpc1JldmVyc2VkfSB0ZXh0IGFmdGVyICR7bXN9bXNgKVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVcbiAgICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCB3YWl0Rm9yVGV4dFxuIl19