all files / DEV/lib/protocol/ elements.js

86.96% Statements 20/23
62.5% Branches 10/16
33.33% Functions 1/3
40% Lines 2/5
12 statements, 7 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                                                                                                                                       
/**
 *
 * Search for multiple elements on the page, starting from the document root. The located
 * elements will be returned as a WebElement JSON objects. The table below lists the
 * locator strategies that each server should support. Elements should be returned in
 * the order located in the DOM.
 *
 * The array of elements can be retrieved  using the 'response.value' which is a
 * collection of element ID's and can be accessed in the subsequent commands
 * using the '.ELEMENT' method.
 *
 * @param {String} selector selector to query the elements
 * @returns {Object[]} A list of WebElement JSON objects for the located elements.
 *
 * @see  https://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/elements
 * @type protocol
 *
 */
 
'use strict';
 
Object.defineProperty(exports, '__esModule', {
    value: true
});
// istanbul ignore next
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _helpersFindElementStrategy = require('../helpers/findElementStrategy');
 
var _helpersFindElementStrategy2 = _interopRequireDefault(_helpersFindElementStrategy);
 
var elements = function elements(selector) {
    var requestPath = '/session/:sessionId/elements';
    var lastPromise = this.lastPromise.inspect();

    if (lastPromise.state === 'fulfilled' && lastPromise.value && lastPromise.value.value && lastPromise.value.value.ELEMENT) {
        if (!selector) {
            lastPromise.value.value = [lastPromise.value.value];
            return lastPromise.value;
        }
 
        /**
         * format xpath selector (global -> relative)
         */
        if (selector.slice(0, 2) === '//') {
            selector = '.' + selector.slice(1);
        }
 
        var elem = lastPromise.value.value.ELEMENT;
        requestPath = '/session/:sessionId/element/' + elem + '/elements';
    }
 
    var found = (0, _helpersFindElementStrategy2['default'])(selector);
    return this.requestHandler.create(requestPath, {
        using: found.using,
        value: found.value
    })['catch'](function (err) {
        if (err.message === 'no such element') {
            return [];
        }
 
        throw err;
    });
};
 
exports['default'] = elements;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvcHJvdG9jb2wvZWxlbWVudHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0FtQnlCLGdDQUFnQzs7OztBQUV6RCxJQUFJLFFBQVEsR0FBRyxTQUFYLFFBQVEsQ0FBYSxRQUFRLEVBQUU7QUFDL0IsUUFBSSxXQUFXLEdBQUcsOEJBQThCLENBQUE7QUFDaEQsUUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQTs7QUFFNUMsUUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLFdBQVcsSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUN0SCxZQUFJLENBQUMsUUFBUSxFQUFFO0FBQ1gsdUJBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNuRCxtQkFBTyxXQUFXLENBQUMsS0FBSyxDQUFBO1NBQzNCOzs7OztBQUtELFlBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQy9CLG9CQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDckM7O0FBRUQsWUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFBO0FBQzFDLG1CQUFXLG9DQUFrQyxJQUFJLGNBQVcsQ0FBQTtLQUMvRDs7QUFFRCxRQUFJLEtBQUssR0FBRyw2Q0FBYSxRQUFRLENBQUMsQ0FBQTtBQUNsQyxXQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtBQUMzQyxhQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7QUFDbEIsYUFBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO0tBQ3JCLENBQUMsU0FBTSxDQUFDLFVBQUMsR0FBRyxFQUFLO0FBQ2QsWUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLGlCQUFpQixFQUFFO0FBQ25DLG1CQUFPLEVBQUUsQ0FBQTtTQUNaOztBQUVELGNBQU0sR0FBRyxDQUFBO0tBQ1osQ0FBQyxDQUFBO0NBQ0wsQ0FBQTs7cUJBRWMsUUFBUSIsImZpbGUiOiIvVXNlcnMvY2hyaXN0aWFuYnJvbWFubi9TaXRlcy9XZWJwcm9qZWt0ZS93ZWJkcml2ZXJqcy9ERVYvbGliL3Byb3RvY29sL2VsZW1lbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogU2VhcmNoIGZvciBtdWx0aXBsZSBlbGVtZW50cyBvbiB0aGUgcGFnZSwgc3RhcnRpbmcgZnJvbSB0aGUgZG9jdW1lbnQgcm9vdC4gVGhlIGxvY2F0ZWRcbiAqIGVsZW1lbnRzIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBXZWJFbGVtZW50IEpTT04gb2JqZWN0cy4gVGhlIHRhYmxlIGJlbG93IGxpc3RzIHRoZVxuICogbG9jYXRvciBzdHJhdGVnaWVzIHRoYXQgZWFjaCBzZXJ2ZXIgc2hvdWxkIHN1cHBvcnQuIEVsZW1lbnRzIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICogdGhlIG9yZGVyIGxvY2F0ZWQgaW4gdGhlIERPTS5cbiAqXG4gKiBUaGUgYXJyYXkgb2YgZWxlbWVudHMgY2FuIGJlIHJldHJpZXZlZCAgdXNpbmcgdGhlICdyZXNwb25zZS52YWx1ZScgd2hpY2ggaXMgYVxuICogY29sbGVjdGlvbiBvZiBlbGVtZW50IElEJ3MgYW5kIGNhbiBiZSBhY2Nlc3NlZCBpbiB0aGUgc3Vic2VxdWVudCBjb21tYW5kc1xuICogdXNpbmcgdGhlICcuRUxFTUVOVCcgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBzZWxlY3RvciB0byBxdWVyeSB0aGUgZWxlbWVudHNcbiAqIEByZXR1cm5zIHtPYmplY3RbXX0gQSBsaXN0IG9mIFdlYkVsZW1lbnQgSlNPTiBvYmplY3RzIGZvciB0aGUgbG9jYXRlZCBlbGVtZW50cy5cbiAqXG4gKiBAc2VlICBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3NlbGVuaXVtL3dpa2kvSnNvbldpcmVQcm90b2NvbCMvc2Vzc2lvbi86c2Vzc2lvbklkL2VsZW1lbnRzXG4gKiBAdHlwZSBwcm90b2NvbFxuICpcbiAqL1xuXG5pbXBvcnQgZmluZFN0cmF0ZWd5IGZyb20gJy4uL2hlbHBlcnMvZmluZEVsZW1lbnRTdHJhdGVneSdcblxubGV0IGVsZW1lbnRzID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgbGV0IHJlcXVlc3RQYXRoID0gJy9zZXNzaW9uLzpzZXNzaW9uSWQvZWxlbWVudHMnXG4gICAgbGV0IGxhc3RQcm9taXNlID0gdGhpcy5sYXN0UHJvbWlzZS5pbnNwZWN0KClcblxuICAgIGlmIChsYXN0UHJvbWlzZS5zdGF0ZSA9PT0gJ2Z1bGZpbGxlZCcgJiYgbGFzdFByb21pc2UudmFsdWUgJiYgbGFzdFByb21pc2UudmFsdWUudmFsdWUgJiYgbGFzdFByb21pc2UudmFsdWUudmFsdWUuRUxFTUVOVCkge1xuICAgICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgICAgICBsYXN0UHJvbWlzZS52YWx1ZS52YWx1ZSA9IFtsYXN0UHJvbWlzZS52YWx1ZS52YWx1ZV1cbiAgICAgICAgICAgIHJldHVybiBsYXN0UHJvbWlzZS52YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZvcm1hdCB4cGF0aCBzZWxlY3RvciAoZ2xvYmFsIC0+IHJlbGF0aXZlKVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNlbGVjdG9yLnNsaWNlKDAsIDIpID09PSAnLy8nKSB7XG4gICAgICAgICAgICBzZWxlY3RvciA9ICcuJyArIHNlbGVjdG9yLnNsaWNlKDEpXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWxlbSA9IGxhc3RQcm9taXNlLnZhbHVlLnZhbHVlLkVMRU1FTlRcbiAgICAgICAgcmVxdWVzdFBhdGggPSBgL3Nlc3Npb24vOnNlc3Npb25JZC9lbGVtZW50LyR7ZWxlbX0vZWxlbWVudHNgXG4gICAgfVxuXG4gICAgbGV0IGZvdW5kID0gZmluZFN0cmF0ZWd5KHNlbGVjdG9yKVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RIYW5kbGVyLmNyZWF0ZShyZXF1ZXN0UGF0aCwge1xuICAgICAgICB1c2luZzogZm91bmQudXNpbmcsXG4gICAgICAgIHZhbHVlOiBmb3VuZC52YWx1ZVxuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSAnbm8gc3VjaCBlbGVtZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJcbiAgICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBlbGVtZW50c1xuIl19