@testim/testim-cli
Version:
Command line interface for running Testing on you CI
135 lines (116 loc) • 9.96 kB
JavaScript
/**
*
* 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
*
*/
;
var _getIterator = require('babel-runtime/core-js/get-iterator')['default'];
var _Promise = require('babel-runtime/core-js/promise')['default'];
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
Object.defineProperty(exports, '__esModule', {
value: true
});
var _helpersParseCSSJs = require('../helpers/parseCSS.js');
var _helpersParseCSSJs2 = _interopRequireDefault(_helpersParseCSSJs);
var _utilsErrorHandler = require('../utils/ErrorHandler');
var getCssProperty = function getCssProperty(selector, cssProperty) {
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 = _getIterator(res.value), _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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9nZXRDc3NQcm9wZXJ0eS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0FpRXFCLHdCQUF3Qjs7OztpQ0FDaEIsdUJBQXVCOztBQUVwRCxJQUFJLGNBQWMsR0FBRyxTQUFqQixjQUFjLENBQWEsUUFBUSxFQUFFLFdBQVcsRUFBRTs7Ozs7O0FBSWxELFFBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO0FBQ2pDLGNBQU0sb0NBQWlCLHNFQUFzRSxDQUFDLENBQUE7S0FDakc7O0FBRUQsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSztBQUN6QyxZQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRXRDLGtCQUFNLG9DQUFpQixDQUFDLENBQUMsQ0FBQTtTQUM1Qjs7QUFFRCxZQUFJLDRCQUE0QixHQUFHLEVBQUUsQ0FBQTs7Ozs7O0FBQ3JDLDhDQUFpQixHQUFHLENBQUMsS0FBSyw0R0FBRTtvQkFBbkIsSUFBSTs7QUFDVCw0Q0FBNEIsQ0FBQyxJQUFJLENBQUMsTUFBSyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUE7YUFDMUY7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFRCxlQUFPLFNBQVEsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUE7S0FDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQU07ZUFBSyxvQ0FBUyxNQUFNLEVBQUUsV0FBVyxDQUFDO0tBQUEsQ0FBQyxDQUFBO0NBQ3JELENBQUE7O3FCQUVjLGNBQWMiLCJmaWxlIjoiZ2V0Q3NzUHJvcGVydHkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBHZXQgYSBjc3MgcHJvcGVydHkgZnJvbSBhIERPTS1lbGVtZW50IHNlbGVjdGVkIGJ5IGdpdmVuIHNlbGVjdG9yLiBUaGUgcmV0dXJuIHZhbHVlXG4gKiBpcyBmb3JtYXR0ZWQgdG8gYmUgdGVzdGFibGUuIENvbG9ycyBnZXRzIHBhcnNlZCB2aWEgW3JnYjJoZXhdKGh0dHBzOi8vd3d3Lm5wbWpzLm9yZy9wYWNrYWdlL3JnYjJoZXgpXG4gKiBhbmQgYWxsIG90aGVyIHByb3BlcnRpZXMgZ2V0cyBwYXJzZWQgdmlhIFtjc3MtdmFsdWVdKGh0dHBzOi8vd3d3Lm5wbWpzLm9yZy9wYWNrYWdlL2Nzcy12YWx1ZSkuXG4gKlxuICogTm90ZSB0aGF0IHNob3J0aGFuZCBDU1MgcHJvcGVydGllcyAoZS5nLiBiYWNrZ3JvdW5kLCBmb250LCBib3JkZXIsIG1hcmdpbiwgcGFkZGluZywgbGlzdC1zdHlsZSwgb3V0bGluZSxcbiAqIHBhdXNlLCBjdWUpIGFyZSBub3QgcmV0dXJuZWQsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgRE9NIENTUzIgc3BlY2lmaWNhdGlvbi0geW91IHNob3VsZCBkaXJlY3RseSBhY2Nlc3NcbiAqIHRoZSBsb25naGFuZCBwcm9wZXJ0aWVzIChlLmcuIGJhY2tncm91bmQtY29sb3IpIHRvIGFjY2VzcyB0aGUgZGVzaXJlZCB2YWx1ZXMuXG4gKlxuICogPGV4YW1wbGU+XG4gICAgOmdldENzc1Byb3BlcnR5LmpzXG4gICAgY2xpZW50LmdldENzc1Byb3BlcnR5KCcjc29tZUVsZW1lbnQnLCAnY29sb3InKS50aGVuKGZ1bmN0aW9uKGNvbG9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvbG9yKTtcbiAgICAgICAgLy8gb3V0cHV0cyB0aGUgZm9sbG93aW5nOlxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBwcm9wZXJ0eTogJ2NvbG9yJyxcbiAgICAgICAgLy8gICAgIHZhbHVlOiAncmdiYSgwLCAxMzYsIDIwNCwgMSknLFxuICAgICAgICAvLyAgICAgcGFyc2VkOiB7XG4gICAgICAgIC8vICAgICAgICAgaGV4OiAnIzAwODhjYycsXG4gICAgICAgIC8vICAgICAgICAgYWxwaGE6IDEsXG4gICAgICAgIC8vICAgICAgICAgdHlwZTogJ2NvbG9yJyxcbiAgICAgICAgLy8gICAgICAgICByZ2JhOiAncmdiYSgwLCAxMzYsIDIwNCwgMSknXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICB9KTtcblxuICAgIGNsaWVudC5nZXRDc3NQcm9wZXJ0eSgnI3NvbWVFbGVtZW50JywgJ3dpZHRoJykudGhlbihmdW5jdGlvbih3aWR0aCkge1xuICAgICAgICBjb25zb2xlLmxvZyh3aWR0aCk7XG4gICAgICAgIC8vIG91dHB1dHMgdGhlIGZvbGxvd2luZzpcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgcHJvcGVydHk6ICd3aWR0aCcsXG4gICAgICAgIC8vICAgICB2YWx1ZTogJzEwMHB4JyxcbiAgICAgICAgLy8gICAgIHBhcnNlZDoge1xuICAgICAgICAvLyAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAvLyAgICAgICAgIHN0cmluZzogJzEwMHB4JyxcbiAgICAgICAgLy8gICAgICAgICB1bml0OiAncHgnLFxuICAgICAgICAvLyAgICAgICAgIHZhbHVlOiAxMDBcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH0pO1xuXG4gICAgY2xpZW50LmdldENzc1Byb3BlcnR5KCdib2R5JywgJ2ZvbnQtZmFtaWx5JykudGhlbihmdW5jdGlvbihmb250KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvbnQpO1xuICAgICAgICAvLyBvdXRwdXRzIHRoZSBmb2xsb3dpbmc6XG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgICBwcm9wZXJ0eTogJ2ZvbnQtZmFtaWx5JyxcbiAgICAgICAgLy8gICAgICB2YWx1ZTogJ2hlbHZldGljYScsXG4gICAgICAgIC8vICAgICAgcGFyc2VkOiB7XG4gICAgICAgIC8vICAgICAgICAgIHZhbHVlOiBbICdoZWx2ZXRpY2EnLCAnYXJpYWwnLCAnZnJlZXNhbnMnLCAnY2xlYW4nLCAnc2Fucy1zZXJpZicgXSxcbiAgICAgICAgLy8gICAgICAgICAgdHlwZTogJ2ZvbnQnLFxuICAgICAgICAvLyAgICAgICAgICBzdHJpbmc6ICdoZWx2ZXRpY2EsIGFyaWFsLCBmcmVlc2FucywgY2xlYW4sIHNhbnMtc2VyaWYnXG4gICAgICAgIC8vICAgICAgfVxuICAgICAgICAvLyAgfVxuICAgIH0pXG4gKiA8L2V4YW1wbGU+XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yICAgIGVsZW1lbnQgd2l0aCByZXF1ZXN0ZWQgc3R5bGUgYXR0cmlidXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gY3NzUHJvcGVydHkgY3NzIHByb3BlcnR5IG5hbWVcbiAqXG4gKiBAdXNlcyBwcm90b2NvbC9lbGVtZW50cywgcHJvdG9jb2wvZWxlbWVudElkQ3NzUHJvcGVydHlcbiAqIEB0eXBlIHByb3BlcnR5XG4gKlxuICovXG5cbmltcG9ydCBwYXJzZUNTUyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlQ1NTLmpzJ1xuaW1wb3J0IHsgQ29tbWFuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyJ1xuXG5sZXQgZ2V0Q3NzUHJvcGVydHkgPSBmdW5jdGlvbiAoc2VsZWN0b3IsIGNzc1Byb3BlcnR5KSB7XG4gICAgLyohXG4gICAgICogcGFyYW1ldGVyIGNoZWNrXG4gICAgICovXG4gICAgaWYgKHR5cGVvZiBjc3NQcm9wZXJ0eSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbW1hbmRFcnJvcignbnVtYmVyIG9yIHR5cGUgb2YgYXJndW1lbnRzIGRvblxcJ3QgYWdyZWUgd2l0aCBnZXRDc3NQcm9wZXJ0eSBjb21tYW5kJylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cyhzZWxlY3RvcikudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGlmICghcmVzLnZhbHVlIHx8IHJlcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIHRocm93IE5vU3VjaEVsZW1lbnQgZXJyb3IgaWYgbm8gZWxlbWVudCB3YXMgZm91bmRcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tYW5kRXJyb3IoNylcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlbGVtZW50SWRDc3NQcm9wZXJ0eUNvbW1hbmRzID0gW11cbiAgICAgICAgZm9yIChsZXQgZWxlbSBvZiByZXMudmFsdWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRJZENzc1Byb3BlcnR5Q29tbWFuZHMucHVzaCh0aGlzLmVsZW1lbnRJZENzc1Byb3BlcnR5KGVsZW0uRUxFTUVOVCwgY3NzUHJvcGVydHkpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGVsZW1lbnRJZENzc1Byb3BlcnR5Q29tbWFuZHMpXG4gICAgfSkudGhlbigocmVzdWx0KSA9PiBwYXJzZUNTUyhyZXN1bHQsIGNzc1Byb3BlcnR5KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0Q3NzUHJvcGVydHlcbiJdfQ==