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

96.88% Statements 31/32
75% Branches 12/16
25% Functions 1/4
66.67% Lines 2/3
22 statements, 9 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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133                                                                                                                                                                                                                                                                       
/**
 *
 * Get a css property from a DOM-element selected by given selector. The return value
 * is formatted to be testable. Colors gets parsed via [rgb2hex](https://www.npmjs.org/package/rgb2hex)
 * and all other properties gets parsed via [css-value](https://www.npmjs.org/package/css-value).
 *
 * Note that shorthand CSS properties (e.g. background, font, border, margin, padding, list-style, outline,
 * pause, cue) are not returned, in accordance with the DOM CSS2 specification- you should directly access
 * the longhand properties (e.g. background-color) to access the desired values.
 *
 * <example>
    :getCssProperty.js
    client.getCssProperty('#someElement', 'color').then(function(color) {
        console.log(color);
        // outputs the following:
        // {
        //     property: 'color',
        //     value: 'rgba(0, 136, 204, 1)',
        //     parsed: {
        //         hex: '#0088cc',
        //         alpha: 1,
        //         type: 'color',
        //         rgba: 'rgba(0, 136, 204, 1)'
        //     }
        // }
    });
 
    client.getCssProperty('#someElement', 'width').then(function(width) {
        console.log(width);
        // outputs the following:
        // {
        //     property: 'width',
        //     value: '100px',
        //     parsed: {
        //         type: 'number',
        //         string: '100px',
        //         unit: 'px',
        //         value: 100
        //     }
        // }
    });
 
    client.getCssProperty('body', 'font-family').then(function(font) {
        console.log(font);
        // outputs the following:
        // {
        //      property: 'font-family',
        //      value: 'helvetica',
        //      parsed: {
        //          value: [ 'helvetica', 'arial', 'freesans', 'clean', 'sans-serif' ],
        //          type: 'font',
        //          string: 'helvetica, arial, freesans, clean, sans-serif'
        //      }
        //  }
    })
 * </example>
 *
 * @param {String} selector    element with requested style attribute
 * @param {String} cssProperty css property name
 *
 * @uses protocol/elements, protocol/elementIdCssProperty
 * @type property
 *
 */
 
'use strict';
 
Object.defineProperty(exports, '__esModule', {
    value: true
});
// istanbul ignore next
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 
var _helpersParseCSSJs = require('../helpers/parseCSS.js');
 
var _helpersParseCSSJs2 = _interopRequireDefault(_helpersParseCSSJs);
 
var _utilsErrorHandler = require('../utils/ErrorHandler');
 
var getCssProperty = function getCssProperty(selector, cssProperty) {
    // istanbul ignore next
 
    var _this = this;

    /*!
     * parameter check
     */
    if (typeof cssProperty !== 'string') {
        throw new _utilsErrorHandler.CommandError('number or type of arguments don\'t agree with getCssProperty command');
    }
 
    return this.elements(selector).then(function (res) {
        if (!res.value || res.value.length === 0) {
            // throw NoSuchElement error if no element was found
            throw new _utilsErrorHandler.CommandError(7);
        }
 
        var elementIdCssPropertyCommands = [];
        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;
 
                elementIdCssPropertyCommands.push(_this.elementIdCssProperty(elem.ELEMENT, cssProperty));
            }
        } catch (err) {
            _didIteratorError = true;
            _iteratorError = err;
        } finally {
            try {
                if (!_iteratorNormalCompletion && _iterator['return']) {
                    _iterator['return']();
                }
            } finally {
                if (_didIteratorError) {
                    throw _iteratorError;
                }
            }
        }
 
        return Promise.all(elementIdCssPropertyCommands);
    }).then(function (result) {
        return (0, _helpersParseCSSJs2['default'])(result, cssProperty);
    });
};
 
exports['default'] = getCssProperty;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvZ2V0Q3NzUHJvcGVydHkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBaUVxQix3QkFBd0I7Ozs7aUNBQ2hCLHVCQUF1Qjs7QUFFcEQsSUFBSSxjQUFjLEdBQUcsU0FBakIsY0FBYyxDQUFhLFFBQVEsRUFBRSxXQUFXLEVBQUU7Ozs7Ozs7O0FBSWxELFFBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO0FBQ2pDLGNBQU0sb0NBQWlCLHNFQUFzRSxDQUFDLENBQUE7S0FDakc7O0FBRUQsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSztBQUN6QyxZQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRXRDLGtCQUFNLG9DQUFpQixDQUFDLENBQUMsQ0FBQTtTQUM1Qjs7QUFFRCxZQUFJLDRCQUE0QixHQUFHLEVBQUUsQ0FBQTs7Ozs7O0FBQ3JDLGlDQUFpQixHQUFHLENBQUMsS0FBSyw4SEFBRTtvQkFBbkIsSUFBSTs7QUFDVCw0Q0FBNEIsQ0FBQyxJQUFJLENBQUMsTUFBSyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUE7YUFDMUY7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFRCxlQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtLQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBTTtlQUFLLG9DQUFTLE1BQU0sRUFBRSxXQUFXLENBQUM7S0FBQSxDQUFDLENBQUE7Q0FDckQsQ0FBQTs7cUJBRWMsY0FBYyIsImZpbGUiOiIvVXNlcnMvY2hyaXN0aWFuYnJvbWFubi9TaXRlcy9XZWJwcm9qZWt0ZS93ZWJkcml2ZXJqcy9ERVYvbGliL2NvbW1hbmRzL2dldENzc1Byb3BlcnR5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogR2V0IGEgY3NzIHByb3BlcnR5IGZyb20gYSBET00tZWxlbWVudCBzZWxlY3RlZCBieSBnaXZlbiBzZWxlY3Rvci4gVGhlIHJldHVybiB2YWx1ZVxuICogaXMgZm9ybWF0dGVkIHRvIGJlIHRlc3RhYmxlLiBDb2xvcnMgZ2V0cyBwYXJzZWQgdmlhIFtyZ2IyaGV4XShodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9yZ2IyaGV4KVxuICogYW5kIGFsbCBvdGhlciBwcm9wZXJ0aWVzIGdldHMgcGFyc2VkIHZpYSBbY3NzLXZhbHVlXShodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9jc3MtdmFsdWUpLlxuICpcbiAqIE5vdGUgdGhhdCBzaG9ydGhhbmQgQ1NTIHByb3BlcnRpZXMgKGUuZy4gYmFja2dyb3VuZCwgZm9udCwgYm9yZGVyLCBtYXJnaW4sIHBhZGRpbmcsIGxpc3Qtc3R5bGUsIG91dGxpbmUsXG4gKiBwYXVzZSwgY3VlKSBhcmUgbm90IHJldHVybmVkLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIERPTSBDU1MyIHNwZWNpZmljYXRpb24tIHlvdSBzaG91bGQgZGlyZWN0bHkgYWNjZXNzXG4gKiB0aGUgbG9uZ2hhbmQgcHJvcGVydGllcyAoZS5nLiBiYWNrZ3JvdW5kLWNvbG9yKSB0byBhY2Nlc3MgdGhlIGRlc2lyZWQgdmFsdWVzLlxuICpcbiAqIDxleGFtcGxlPlxuICAgIDpnZXRDc3NQcm9wZXJ0eS5qc1xuICAgIGNsaWVudC5nZXRDc3NQcm9wZXJ0eSgnI3NvbWVFbGVtZW50JywgJ2NvbG9yJykudGhlbihmdW5jdGlvbihjb2xvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcik7XG4gICAgICAgIC8vIG91dHB1dHMgdGhlIGZvbGxvd2luZzpcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIC8vICAgICB2YWx1ZTogJ3JnYmEoMCwgMTM2LCAyMDQsIDEpJyxcbiAgICAgICAgLy8gICAgIHBhcnNlZDoge1xuICAgICAgICAvLyAgICAgICAgIGhleDogJyMwMDg4Y2MnLFxuICAgICAgICAvLyAgICAgICAgIGFscGhhOiAxLFxuICAgICAgICAvLyAgICAgICAgIHR5cGU6ICdjb2xvcicsXG4gICAgICAgIC8vICAgICAgICAgcmdiYTogJ3JnYmEoMCwgMTM2LCAyMDQsIDEpJ1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgfSk7XG5cbiAgICBjbGllbnQuZ2V0Q3NzUHJvcGVydHkoJyNzb21lRWxlbWVudCcsICd3aWR0aCcpLnRoZW4oZnVuY3Rpb24od2lkdGgpIHtcbiAgICAgICAgY29uc29sZS5sb2cod2lkdGgpO1xuICAgICAgICAvLyBvdXRwdXRzIHRoZSBmb2xsb3dpbmc6XG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIHByb3BlcnR5OiAnd2lkdGgnLFxuICAgICAgICAvLyAgICAgdmFsdWU6ICcxMDBweCcsXG4gICAgICAgIC8vICAgICBwYXJzZWQ6IHtcbiAgICAgICAgLy8gICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgLy8gICAgICAgICBzdHJpbmc6ICcxMDBweCcsXG4gICAgICAgIC8vICAgICAgICAgdW5pdDogJ3B4JyxcbiAgICAgICAgLy8gICAgICAgICB2YWx1ZTogMTAwXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICB9KTtcblxuICAgIGNsaWVudC5nZXRDc3NQcm9wZXJ0eSgnYm9keScsICdmb250LWZhbWlseScpLnRoZW4oZnVuY3Rpb24oZm9udCkge1xuICAgICAgICBjb25zb2xlLmxvZyhmb250KTtcbiAgICAgICAgLy8gb3V0cHV0cyB0aGUgZm9sbG93aW5nOlxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICAgcHJvcGVydHk6ICdmb250LWZhbWlseScsXG4gICAgICAgIC8vICAgICAgdmFsdWU6ICdoZWx2ZXRpY2EnLFxuICAgICAgICAvLyAgICAgIHBhcnNlZDoge1xuICAgICAgICAvLyAgICAgICAgICB2YWx1ZTogWyAnaGVsdmV0aWNhJywgJ2FyaWFsJywgJ2ZyZWVzYW5zJywgJ2NsZWFuJywgJ3NhbnMtc2VyaWYnIF0sXG4gICAgICAgIC8vICAgICAgICAgIHR5cGU6ICdmb250JyxcbiAgICAgICAgLy8gICAgICAgICAgc3RyaW5nOiAnaGVsdmV0aWNhLCBhcmlhbCwgZnJlZXNhbnMsIGNsZWFuLCBzYW5zLXNlcmlmJ1xuICAgICAgICAvLyAgICAgIH1cbiAgICAgICAgLy8gIH1cbiAgICB9KVxuICogPC9leGFtcGxlPlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciAgICBlbGVtZW50IHdpdGggcmVxdWVzdGVkIHN0eWxlIGF0dHJpYnV0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGNzc1Byb3BlcnR5IGNzcyBwcm9wZXJ0eSBuYW1lXG4gKlxuICogQHVzZXMgcHJvdG9jb2wvZWxlbWVudHMsIHByb3RvY29sL2VsZW1lbnRJZENzc1Byb3BlcnR5XG4gKiBAdHlwZSBwcm9wZXJ0eVxuICpcbiAqL1xuXG5pbXBvcnQgcGFyc2VDU1MgZnJvbSAnLi4vaGVscGVycy9wYXJzZUNTUy5qcydcbmltcG9ydCB7IENvbW1hbmRFcnJvciB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlcidcblxubGV0IGdldENzc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHNlbGVjdG9yLCBjc3NQcm9wZXJ0eSkge1xuICAgIC8qIVxuICAgICAqIHBhcmFtZXRlciBjaGVja1xuICAgICAqL1xuICAgIGlmICh0eXBlb2YgY3NzUHJvcGVydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tYW5kRXJyb3IoJ251bWJlciBvciB0eXBlIG9mIGFyZ3VtZW50cyBkb25cXCd0IGFncmVlIHdpdGggZ2V0Q3NzUHJvcGVydHkgY29tbWFuZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHMoc2VsZWN0b3IpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcy52YWx1ZSB8fCByZXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyB0aHJvdyBOb1N1Y2hFbGVtZW50IGVycm9yIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kXG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKDcpXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWxlbWVudElkQ3NzUHJvcGVydHlDb21tYW5kcyA9IFtdXG4gICAgICAgIGZvciAobGV0IGVsZW0gb2YgcmVzLnZhbHVlKSB7XG4gICAgICAgICAgICBlbGVtZW50SWRDc3NQcm9wZXJ0eUNvbW1hbmRzLnB1c2godGhpcy5lbGVtZW50SWRDc3NQcm9wZXJ0eShlbGVtLkVMRU1FTlQsIGNzc1Byb3BlcnR5KSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChlbGVtZW50SWRDc3NQcm9wZXJ0eUNvbW1hbmRzKVxuICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4gcGFyc2VDU1MocmVzdWx0LCBjc3NQcm9wZXJ0eSkpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENzc1Byb3BlcnR5XG4iXX0=