UNPKG

@testim/testim-cli

Version:

Command line interface for running Testing on you CI

48 lines (38 loc) 6.35 kB
/** * check if element is visible and within the viewport * * @param {String} elements DOM elements to check against * * @see waitForVisible */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var isWithinViewport = function isWithinViewport(elements) { var db = document.body, dde = document.documentElement, result = []; if (elements.length === 0) { throw new Error('NoSuchElement'); } for (var i = 0; i < elements.length; ++i) { var elem = elements[i], isWithinViewport = true; while (elem.parentNode && elem.parentNode.getBoundingClientRect) { var elemDimension = elem.getBoundingClientRect(), elemComputedStyle = window.getComputedStyle(elem), documentDimension = { width: Math.max(db.scrollTop || 0, dde.scrollTop || 0, db.offsetwidth || 0, dde.offsetWidth || 0, db.clientWidth || 0, dde.clientWidth || 0), height: Math.max(db.scrollheight || 0, dde.scrollHeight || 0, db.offsetHeight || 0, dde.offsetHeight || 0, db.clientHeight || 0, dde.clientHeight || 0) }; isWithinViewport = isWithinViewport && (elemComputedStyle.display !== 'none' && elemComputedStyle.visibility === 'visible' && parseFloat(elemComputedStyle.opacity, 10) > 0 && elemDimension.bottom >= 0 && elemDimension.top <= documentDimension.height && elemDimension.right >= 0 && elemDimension.left <= documentDimension.width); elem = elem.parentNode; } result.push(isWithinViewport); } return result; }; exports['default'] = isWithinViewport; module.exports = exports['default']; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY3JpcHRzL2lzV2l0aGluVmlld3BvcnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVFBLElBQUksZ0JBQWdCLEdBQUcsMEJBQVUsUUFBUSxFQUFFO0FBQ3ZDLFFBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJO1FBQ2xCLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZTtRQUM5QixNQUFNLEdBQUcsRUFBRSxDQUFDOztBQUVoQixRQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3RCLGNBQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDcEM7O0FBRUQsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEMsWUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7O0FBRTVCLGVBQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFOztBQUU3RCxnQkFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUM1QyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUNqRCxpQkFBaUIsR0FBRztBQUNoQixxQkFBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDNUksc0JBQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO2FBQzFKLENBQUM7O0FBRU4sNEJBQWdCLEdBQUcsZ0JBQWdCLEtBQ2YsaUJBQWlCLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFDcEMsaUJBQWlCLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFDMUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQzdDLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUN6QixhQUFhLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sSUFDN0MsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQ3hCLGFBQWEsQ0FBQyxJQUFJLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFBLEFBQUMsQ0FBQzs7QUFFbkUsZ0JBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBRTFCO0FBQ0QsY0FBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ2pDO0FBQ0QsV0FBTyxNQUFNLENBQUM7Q0FDakIsQ0FBQTs7cUJBRWMsZ0JBQWdCIiwiZmlsZSI6ImlzV2l0aGluVmlld3BvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNoZWNrIGlmIGVsZW1lbnQgaXMgdmlzaWJsZSBhbmQgd2l0aGluIHRoZSB2aWV3cG9ydFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgZWxlbWVudHMgIERPTSBlbGVtZW50cyB0byBjaGVjayBhZ2FpbnN0XG4gKlxuICogQHNlZSAgd2FpdEZvclZpc2libGVcbiAqL1xuXG5sZXQgaXNXaXRoaW5WaWV3cG9ydCA9IGZ1bmN0aW9uIChlbGVtZW50cykge1xuICAgIHZhciBkYiA9IGRvY3VtZW50LmJvZHksXG4gICAgICAgIGRkZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICBpZihlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb1N1Y2hFbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgZWxlbSA9IGVsZW1lbnRzW2ldLFxuICAgICAgICAgICAgaXNXaXRoaW5WaWV3cG9ydCA9IHRydWU7XG5cbiAgICAgICAgd2hpbGUgKGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7XG5cbiAgICAgICAgICAgIHZhciBlbGVtRGltZW5zaW9uID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgICAgICBlbGVtQ29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW0pLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50RGltZW5zaW9uID0ge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogTWF0aC5tYXgoZGIuc2Nyb2xsVG9wIHx8IDAsIGRkZS5zY3JvbGxUb3AgfHwgMCwgZGIub2Zmc2V0d2lkdGggfHwgMCwgZGRlLm9mZnNldFdpZHRoIHx8IDAsIGRiLmNsaWVudFdpZHRoIHx8IDAsIGRkZS5jbGllbnRXaWR0aCB8fCAwKSxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1heChkYi5zY3JvbGxoZWlnaHQgfHwgMCwgZGRlLnNjcm9sbEhlaWdodCB8fCAwLCBkYi5vZmZzZXRIZWlnaHQgfHwgMCwgZGRlLm9mZnNldEhlaWdodCB8fCAwLCBkYi5jbGllbnRIZWlnaHQgfHwgMCwgZGRlLmNsaWVudEhlaWdodCB8fCAwKVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlzV2l0aGluVmlld3BvcnQgPSBpc1dpdGhpblZpZXdwb3J0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsZW1Db21wdXRlZFN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtQ29tcHV0ZWRTdHlsZS52aXNpYmlsaXR5ID09PSAndmlzaWJsZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChlbGVtQ29tcHV0ZWRTdHlsZS5vcGFjaXR5LCAxMCkgPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1EaW1lbnNpb24uYm90dG9tID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURpbWVuc2lvbi50b3AgPD0gZG9jdW1lbnREaW1lbnNpb24uaGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1EaW1lbnNpb24ucmlnaHQgPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtRGltZW5zaW9uLmxlZnQgPD0gZG9jdW1lbnREaW1lbnNpb24ud2lkdGgpO1xuXG4gICAgICAgICAgICBlbGVtID0gZWxlbS5wYXJlbnROb2RlO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goaXNXaXRoaW5WaWV3cG9ydCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzV2l0aGluVmlld3BvcnRcbiJdfQ==