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

89.47% Statements 17/19
57.14% Branches 8/14
50% Functions 1/2
50% Lines 2/4
9 statements, 5 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                                                                                                           
/**
 * Search for an element on the page, starting from the document root.
 * The located element will be returned as a WebElement JSON object.
 * The table below lists the locator strategies that each server should support.
 * Each locator must return the first matching element located in the DOM.
 *
 * @see  https://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element
 *
 * @param {String} selector selector to query the element
 * @returns {String} A WebElement JSON object for the located element.
 *
 * @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 element = function element(selector) {
    var requestPath = '/session/:sessionId/element';
    var lastPromise = this.lastPromise.inspect();
 
    if (lastPromise.state === 'fulfilled' && lastPromise.value && lastPromise.value.value && lastPromise.value.value.ELEMENT) {
        if (!selector) {
            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 + '/element';
    }
 
    var found = (0, _helpersFindElementStrategy2['default'])(selector);
    return this.requestHandler.create(requestPath, { using: found.using, value: found.value });
};
 
exports['default'] = element;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvcHJvdG9jb2wvZWxlbWVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MENBZXlCLGdDQUFnQzs7OztBQUV6RCxJQUFJLE9BQU8sR0FBRyxTQUFWLE9BQU8sQ0FBYSxRQUFRLEVBQUU7QUFDOUIsUUFBSSxXQUFXLEdBQUcsNkJBQTZCLENBQUE7QUFDL0MsUUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQTs7QUFFNUMsUUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLFdBQVcsSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUN0SCxZQUFJLENBQUMsUUFBUSxFQUFFO0FBQ1gsbUJBQU8sV0FBVyxDQUFDLEtBQUssQ0FBQTtTQUMzQjs7Ozs7QUFLRCxZQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMvQixvQkFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3JDOztBQUVELFlBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQTtBQUMxQyxtQkFBVyxvQ0FBa0MsSUFBSSxhQUFVLENBQUE7S0FDOUQ7O0FBRUQsUUFBSSxLQUFLLEdBQUcsNkNBQWEsUUFBUSxDQUFDLENBQUE7QUFDbEMsV0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDN0IsV0FBVyxFQUNYLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FDN0MsQ0FBQTtDQUNKLENBQUE7O3FCQUVjLE9BQU8iLCJmaWxlIjoiL1VzZXJzL2NocmlzdGlhbmJyb21hbm4vU2l0ZXMvV2VicHJvamVrdGUvd2ViZHJpdmVyanMvREVWL2xpYi9wcm90b2NvbC9lbGVtZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWFyY2ggZm9yIGFuIGVsZW1lbnQgb24gdGhlIHBhZ2UsIHN0YXJ0aW5nIGZyb20gdGhlIGRvY3VtZW50IHJvb3QuXG4gKiBUaGUgbG9jYXRlZCBlbGVtZW50IHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBXZWJFbGVtZW50IEpTT04gb2JqZWN0LlxuICogVGhlIHRhYmxlIGJlbG93IGxpc3RzIHRoZSBsb2NhdG9yIHN0cmF0ZWdpZXMgdGhhdCBlYWNoIHNlcnZlciBzaG91bGQgc3VwcG9ydC5cbiAqIEVhY2ggbG9jYXRvciBtdXN0IHJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBsb2NhdGVkIGluIHRoZSBET00uXG4gKlxuICogQHNlZSAgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9zZWxlbml1bS93aWtpL0pzb25XaXJlUHJvdG9jb2wjL3Nlc3Npb24vOnNlc3Npb25JZC9lbGVtZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIHNlbGVjdG9yIHRvIHF1ZXJ5IHRoZSBlbGVtZW50XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBIFdlYkVsZW1lbnQgSlNPTiBvYmplY3QgZm9yIHRoZSBsb2NhdGVkIGVsZW1lbnQuXG4gKlxuICogQHR5cGUgcHJvdG9jb2xcbiAqXG4gKi9cblxuaW1wb3J0IGZpbmRTdHJhdGVneSBmcm9tICcuLi9oZWxwZXJzL2ZpbmRFbGVtZW50U3RyYXRlZ3knXG5cbmxldCBlbGVtZW50ID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgbGV0IHJlcXVlc3RQYXRoID0gJy9zZXNzaW9uLzpzZXNzaW9uSWQvZWxlbWVudCdcbiAgICBsZXQgbGFzdFByb21pc2UgPSB0aGlzLmxhc3RQcm9taXNlLmluc3BlY3QoKVxuXG4gICAgaWYgKGxhc3RQcm9taXNlLnN0YXRlID09PSAnZnVsZmlsbGVkJyAmJiBsYXN0UHJvbWlzZS52YWx1ZSAmJiBsYXN0UHJvbWlzZS52YWx1ZS52YWx1ZSAmJiBsYXN0UHJvbWlzZS52YWx1ZS52YWx1ZS5FTEVNRU5UKSB7XG4gICAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0UHJvbWlzZS52YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZvcm1hdCB4cGF0aCBzZWxlY3RvciAoZ2xvYmFsIC0+IHJlbGF0aXZlKVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNlbGVjdG9yLnNsaWNlKDAsIDIpID09PSAnLy8nKSB7XG4gICAgICAgICAgICBzZWxlY3RvciA9ICcuJyArIHNlbGVjdG9yLnNsaWNlKDEpXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWxlbSA9IGxhc3RQcm9taXNlLnZhbHVlLnZhbHVlLkVMRU1FTlRcbiAgICAgICAgcmVxdWVzdFBhdGggPSBgL3Nlc3Npb24vOnNlc3Npb25JZC9lbGVtZW50LyR7ZWxlbX0vZWxlbWVudGBcbiAgICB9XG5cbiAgICBsZXQgZm91bmQgPSBmaW5kU3RyYXRlZ3koc2VsZWN0b3IpXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdEhhbmRsZXIuY3JlYXRlKFxuICAgICAgICByZXF1ZXN0UGF0aCxcbiAgICAgICAgeyB1c2luZzogZm91bmQudXNpbmcsIHZhbHVlOiBmb3VuZC52YWx1ZSB9XG4gICAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBlbGVtZW50XG4iXX0=