UNPKG

@testim/testim-cli

Version:

Command line interface for running Testing on you CI

135 lines (116 loc) 9.96 kB
/** * * 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'; 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==