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

93.33% Statements 28/30
62.5% Branches 10/16
0% Functions 0/4
50% Lines 2/4
23 statements, 10 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 89 90 91 92 93 94 95                                                                                                                                                                                           
/**
 *
 * Determine an element’s location on the page. The point (0, 0) refers to
 * the upper-left corner of the page.
 *
 * <example>
    :getLocation.js
    client
        .url('http://github.com')
        .getLocation('.header-logo-wordmark').then(function (location) {
            console.log(location); // outputs: { x: 100, y: 200 }
        })
        .getLocation('.header-logo-wordmark', 'x').then(function (location) {
            console.log(location); // outputs: 100
        })
        .getLocation('.header-logo-wordmark', 'y').then(function (location) {
            console.log(location); // outputs: 200
        });
 * </example>
 *
 * @param {String} selector    element with requested position offset
 * @returns {Object|Object[]}  The X and Y coordinates for the element on the page (`{x:number, y:number}`)
 *
 * @uses protocol/elements, protocol/elementIdLocation
 * @type property
 *
 */
 
'use strict';
 
Object.defineProperty(exports, '__esModule', {
    value: true
});
 
var _utilsErrorHandler = require('../utils/ErrorHandler');
 
var getLocation = function getLocation(selector, prop) {
    // istanbul ignore next
 
    var _this = this;
 
    return this.elements(selector).then(function (res) {
        /**
         * throw NoSuchElement error if no element was found
         */
        if (!res.value || res.value.length === 0) {
            throw new _utilsErrorHandler.CommandError(7);
        }
 
        var elementIdLocationCommands = [];
        var _iteratorNormalCompletion = true;
        var _didIteratorError = false;
        var _iteratorError = undefined;
 
        try {
            for (var _iterator = res.value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
                var elem = _step.value;
 
                elementIdLocationCommands.push(_this.elementIdLocation(elem.ELEMENT));
            }
        } catch (err) {
            _didIteratorError = true;
            _iteratorError = err;
        } finally {
            try {
                if (!_iteratorNormalCompletion && _iterator['return']) {
                    _iterator['return']();
                }
            } finally {
                if (_didIteratorError) {
                    throw _iteratorError;
                }
            }
        }
 
        return Promise.all(elementIdLocationCommands);
    }).then(function (locations) {
        locations = locations.map(function (location) {
            if (typeof prop === 'string' && prop.match(/(x|y)/)) {
                return location.value[prop];
            }
 
            return {
                x: location.value.x,
                y: location.value.y
            };
        });
 
        return locations.length === 1 ? locations[0] : locations;
    });
};
 
exports['default'] = getLocation;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvZ2V0TG9jYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0E0QjZCLHVCQUF1Qjs7QUFFcEQsSUFBSSxXQUFXLEdBQUcsU0FBZCxXQUFXLENBQWEsUUFBUSxFQUFFLElBQUksRUFBRTs7Ozs7QUFDeEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSzs7OztBQUl6QyxZQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdEMsa0JBQU0sb0NBQWlCLENBQUMsQ0FBQyxDQUFBO1NBQzVCOztBQUVELFlBQUkseUJBQXlCLEdBQUcsRUFBRSxDQUFBOzs7Ozs7QUFDbEMsaUNBQWlCLEdBQUcsQ0FBQyxLQUFLLDhIQUFFO29CQUFuQixJQUFJOztBQUNULHlDQUF5QixDQUFDLElBQUksQ0FBQyxNQUFLLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2FBQ3ZFOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsZUFBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUE7S0FDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLFNBQVMsRUFBSztBQUNuQixpQkFBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBQyxRQUFRLEVBQUs7QUFDcEMsZ0JBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDakQsdUJBQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUM5Qjs7QUFFRCxtQkFBTztBQUNILGlCQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25CLGlCQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RCLENBQUE7U0FDSixDQUFDLENBQUE7O0FBRUYsZUFBTyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFBO0tBQzNELENBQUMsQ0FBQTtDQUNMLENBQUE7O3FCQUVjLFdBQVciLCJmaWxlIjoiL1VzZXJzL2NocmlzdGlhbmJyb21hbm4vU2l0ZXMvV2VicHJvamVrdGUvd2ViZHJpdmVyanMvREVWL2xpYi9jb21tYW5kcy9nZXRMb2NhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIERldGVybWluZSBhbiBlbGVtZW504oCZcyBsb2NhdGlvbiBvbiB0aGUgcGFnZS4gVGhlIHBvaW50ICgwLCAwKSByZWZlcnMgdG9cbiAqIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcGFnZS5cbiAqXG4gKiA8ZXhhbXBsZT5cbiAgICA6Z2V0TG9jYXRpb24uanNcbiAgICBjbGllbnRcbiAgICAgICAgLnVybCgnaHR0cDovL2dpdGh1Yi5jb20nKVxuICAgICAgICAuZ2V0TG9jYXRpb24oJy5oZWFkZXItbG9nby13b3JkbWFyaycpLnRoZW4oZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhdGlvbik7IC8vIG91dHB1dHM6IHsgeDogMTAwLCB5OiAyMDAgfVxuICAgICAgICB9KVxuICAgICAgICAuZ2V0TG9jYXRpb24oJy5oZWFkZXItbG9nby13b3JkbWFyaycsICd4JykudGhlbihmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvY2F0aW9uKTsgLy8gb3V0cHV0czogMTAwXG4gICAgICAgIH0pXG4gICAgICAgIC5nZXRMb2NhdGlvbignLmhlYWRlci1sb2dvLXdvcmRtYXJrJywgJ3knKS50aGVuKGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobG9jYXRpb24pOyAvLyBvdXRwdXRzOiAyMDBcbiAgICAgICAgfSk7XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yICAgIGVsZW1lbnQgd2l0aCByZXF1ZXN0ZWQgcG9zaXRpb24gb2Zmc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fE9iamVjdFtdfSAgVGhlIFggYW5kIFkgY29vcmRpbmF0ZXMgZm9yIHRoZSBlbGVtZW50IG9uIHRoZSBwYWdlIChge3g6bnVtYmVyLCB5Om51bWJlcn1gKVxuICpcbiAqIEB1c2VzIHByb3RvY29sL2VsZW1lbnRzLCBwcm90b2NvbC9lbGVtZW50SWRMb2NhdGlvblxuICogQHR5cGUgcHJvcGVydHlcbiAqXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyJ1xuXG5sZXQgZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoc2VsZWN0b3IsIHByb3ApIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cyhzZWxlY3RvcikudGhlbigocmVzKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0aHJvdyBOb1N1Y2hFbGVtZW50IGVycm9yIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoIXJlcy52YWx1ZSB8fCByZXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKDcpXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWxlbWVudElkTG9jYXRpb25Db21tYW5kcyA9IFtdXG4gICAgICAgIGZvciAobGV0IGVsZW0gb2YgcmVzLnZhbHVlKSB7XG4gICAgICAgICAgICBlbGVtZW50SWRMb2NhdGlvbkNvbW1hbmRzLnB1c2godGhpcy5lbGVtZW50SWRMb2NhdGlvbihlbGVtLkVMRU1FTlQpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGVsZW1lbnRJZExvY2F0aW9uQ29tbWFuZHMpXG4gICAgfSkudGhlbigobG9jYXRpb25zKSA9PiB7XG4gICAgICAgIGxvY2F0aW9ucyA9IGxvY2F0aW9ucy5tYXAoKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnICYmIHByb3AubWF0Y2goLyh4fHkpLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24udmFsdWVbcHJvcF1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiBsb2NhdGlvbi52YWx1ZS54LFxuICAgICAgICAgICAgICAgIHk6IGxvY2F0aW9uLnZhbHVlLnlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gbG9jYXRpb25zLmxlbmd0aCA9PT0gMSA/IGxvY2F0aW9uc1swXSA6IGxvY2F0aW9uc1xuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldExvY2F0aW9uXG4iXX0=