UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

106 lines 16 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.isStickyElement = exports.isFixedElement = exports.hasDimensions = exports.isNotVisibleNode = exports.isNotDisplayedNode = exports.isHiddenNode = exports.getWindowDimensions = exports.getViewportDimensions = exports.set = exports.getElementPaddingFloat = exports.getBordersWidthFloat = exports.get = exports.setScrollTop = exports.setScrollLeft = exports.getScrollTop = exports.getScrollLeft = exports.getInnerHeight = exports.getInnerWidth = exports.getHeight = exports.getWidth = exports.isSelectVisibleChild = exports.isElementVisible = exports.getSelectElementSize = exports.getOptionHeight = exports.getElementScroll = exports.getElementPadding = exports.getElementMargin = exports.getComputedStyle = exports.getBordersWidth = void 0; const hammerhead_1 = __importDefault(require("../deps/hammerhead")); const boundary_values_1 = __importDefault(require("./values/boundary-values")); const domUtils = __importStar(require("./dom")); const styleUtils = hammerhead_1.default.utils.style; exports.getBordersWidth = hammerhead_1.default.utils.style.getBordersWidth; exports.getComputedStyle = hammerhead_1.default.utils.style.getComputedStyle; exports.getElementMargin = hammerhead_1.default.utils.style.getElementMargin; exports.getElementPadding = hammerhead_1.default.utils.style.getElementPadding; exports.getElementScroll = hammerhead_1.default.utils.style.getElementScroll; exports.getOptionHeight = hammerhead_1.default.utils.style.getOptionHeight; exports.getSelectElementSize = hammerhead_1.default.utils.style.getSelectElementSize; exports.isElementVisible = hammerhead_1.default.utils.style.isElementVisible; exports.isSelectVisibleChild = hammerhead_1.default.utils.style.isVisibleChild; exports.getWidth = hammerhead_1.default.utils.style.getWidth; exports.getHeight = hammerhead_1.default.utils.style.getHeight; exports.getInnerWidth = hammerhead_1.default.utils.style.getInnerWidth; exports.getInnerHeight = hammerhead_1.default.utils.style.getInnerHeight; exports.getScrollLeft = hammerhead_1.default.utils.style.getScrollLeft; exports.getScrollTop = hammerhead_1.default.utils.style.getScrollTop; exports.setScrollLeft = hammerhead_1.default.utils.style.setScrollLeft; exports.setScrollTop = hammerhead_1.default.utils.style.setScrollTop; exports.get = hammerhead_1.default.utils.style.get; exports.getBordersWidthFloat = hammerhead_1.default.utils.style.getBordersWidthFloat; exports.getElementPaddingFloat = hammerhead_1.default.utils.style.getElementPaddingFloat; function set(el, style, value) { if (typeof style === 'string') styleUtils.set(el, style, value); for (const property in style) { if (style.hasOwnProperty(property)) styleUtils.set(el, property, style[property]); } } exports.set = set; function getViewportDimension(windowDimension, documentDimension, bodyDimension) { if (documentDimension > windowDimension) return bodyDimension; if (bodyDimension > windowDimension) return documentDimension; return Math.max(bodyDimension, documentDimension); } function getViewportDimensions() { return { width: getViewportDimension(window.innerWidth, document.documentElement.clientWidth, document.body.clientWidth), height: getViewportDimension(window.innerHeight, document.documentElement.clientHeight, document.body.clientHeight), }; } exports.getViewportDimensions = getViewportDimensions; function getWindowDimensions(window) { return new boundary_values_1.default(0, (0, exports.getWidth)(window), (0, exports.getHeight)(window), 0); } exports.getWindowDimensions = getWindowDimensions; function isHiddenNode(node) { return !!domUtils.findParent(node, true, ancestor => domUtils.isElementNode(ancestor) && styleUtils.get(ancestor, 'visibility') === 'hidden'); } exports.isHiddenNode = isHiddenNode; function isNotDisplayedNode(node) { return !!domUtils.findParent(node, true, ancestor => domUtils.isElementNode(ancestor) && styleUtils.get(ancestor, 'display') === 'none'); } exports.isNotDisplayedNode = isNotDisplayedNode; function isNotVisibleNode(node) { return !domUtils.isRenderedNode(node) || isNotDisplayedNode(node) || isHiddenNode(node); } exports.isNotVisibleNode = isNotVisibleNode; function hasDimensions(el) { //NOTE: it's like jquery ':visible' selector (http://blog.jquery.com/2009/02/20/jquery-1-3-2-released/) return el && !(el.offsetHeight <= 0 && el.offsetWidth <= 0); } exports.hasDimensions = hasDimensions; function isFixedElement(node) { return domUtils.isElementNode(node) && styleUtils.get(node, 'position') === 'fixed'; } exports.isFixedElement = isFixedElement; function isStickyElement(node) { return domUtils.isElementNode(node) && styleUtils.get(node, 'position') === 'sticky'; } exports.isStickyElement = isStickyElement; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpZW50L2NvcmUvdXRpbHMvc3R5bGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvRUFBNEM7QUFDNUMsK0VBQXNEO0FBQ3RELGdEQUFrQztBQUVsQyxNQUFNLFVBQVUsR0FBRyxvQkFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFFN0IsUUFBQSxlQUFlLEdBQVUsb0JBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztBQUNoRSxRQUFBLGdCQUFnQixHQUFTLG9CQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztBQUNqRSxRQUFBLGdCQUFnQixHQUFTLG9CQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztBQUNqRSxRQUFBLGlCQUFpQixHQUFRLG9CQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztBQUNsRSxRQUFBLGdCQUFnQixHQUFTLG9CQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztBQUNqRSxRQUFBLGVBQWUsR0FBVSxvQkFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ2hFLFFBQUEsb0JBQW9CLEdBQUssb0JBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDO0FBQ3JFLFFBQUEsZ0JBQWdCLEdBQVMsb0JBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0FBQ2pFLFFBQUEsb0JBQW9CLEdBQUssb0JBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztBQUMvRCxRQUFBLFFBQVEsR0FBaUIsb0JBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUN6RCxR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ICcuLi9kZXBzL2hhbW1lcmhlYWQnO1xuaW1wb3J0IEJvdW5kYXJ5VmFsdWVzIGZyb20gJy4vdmFsdWVzL2JvdW5kYXJ5LXZhbHVlcyc7XG5pbXBvcnQgKiBhcyBkb21VdGlscyBmcm9tICcuL2RvbSc7XG5cbmNvbnN0IHN0eWxlVXRpbHMgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlO1xuXG5leHBvcnQgY29uc3QgZ2V0Qm9yZGVyc1dpZHRoICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuc3R5bGUuZ2V0Qm9yZGVyc1dpZHRoO1xuZXhwb3J0IGNvbnN0IGdldENvbXB1dGVkU3R5bGUgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLmdldENvbXB1dGVkU3R5bGU7XG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudE1hcmdpbiAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuc3R5bGUuZ2V0RWxlbWVudE1hcmdpbjtcbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50UGFkZGluZyAgICAgID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5nZXRFbGVtZW50UGFkZGluZztcbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50U2Nyb2xsICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5nZXRFbGVtZW50U2Nyb2xsO1xuZXhwb3J0IGNvbnN0IGdldE9wdGlvbkhlaWdodCAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLmdldE9wdGlvbkhlaWdodDtcbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RFbGVtZW50U2l6ZSAgID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5nZXRTZWxlY3RFbGVtZW50U2l6ZTtcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRWaXNpYmxlICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5pc0VsZW1lbnRWaXNpYmxlO1xuZXhwb3J0IGNvbnN0IGlzU2VsZWN0VmlzaWJsZUNoaWxkICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLmlzVmlzaWJsZUNoaWxkO1xuZXhwb3J0IGNvbnN0IGdldFdpZHRoICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLmdldFdpZHRoO1xuZXhwb3J0IGNvbnN0IGdldEhlaWdodCAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLmdldEhlaWdodDtcbmV4cG9ydCBjb25zdCBnZXRJbm5lcldpZHRoICAgICAgICAgID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5nZXRJbm5lcldpZHRoO1xuZXhwb3J0IGNvbnN0IGdldElubmVySGVpZ2h0ICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLmdldElubmVySGVpZ2h0O1xuZXhwb3J0IGNvbnN0IGdldFNjcm9sbExlZnQgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLmdldFNjcm9sbExlZnQ7XG5leHBvcnQgY29uc3QgZ2V0U2Nyb2xsVG9wICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuc3R5bGUuZ2V0U2Nyb2xsVG9wO1xuZXhwb3J0IGNvbnN0IHNldFNjcm9sbExlZnQgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLnNldFNjcm9sbExlZnQ7XG5leHBvcnQgY29uc3Qgc2V0U2Nyb2xsVG9wICAgICAgICAgICA9IGhhbW1lcmhlYWQudXRpbHMuc3R5bGUuc2V0U2Nyb2xsVG9wO1xuZXhwb3J0IGNvbnN0IGdldCAgICAgICAgICAgICAgICAgICAgPSBoYW1tZXJoZWFkLnV0aWxzLnN0eWxlLmdldDtcbmV4cG9ydCBjb25zdCBnZXRCb3JkZXJzV2lkdGhGbG9hdCAgID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5nZXRCb3JkZXJzV2lkdGhGbG9hdDtcbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50UGFkZGluZ0Zsb2F0ID0gaGFtbWVyaGVhZC51dGlscy5zdHlsZS5nZXRFbGVtZW50UGFkZGluZ0Zsb2F0O1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQgKGVsLCBzdHlsZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJylcbiAgICAgICAgc3R5bGVVdGlscy5zZXQoZWwsIHN0eWxlLCB2YWx1ZSk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHN0eWxlKSB7XG4gICAgICAgIGlmIChzdHlsZS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICBzdHlsZVV0aWxzLnNldChlbCwgcHJvcGVydHksIHN0eWxlW3Byb3BlcnR5XSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRWaWV3cG9ydERpbWVuc2lvbiAod2luZG93RGltZW5zaW9uLCBkb2N1bWVudERpbWVuc2lvbiwgYm9keURpbWVuc2lvbikge1xuICAgIGlmIChkb2N1bWVudERpbWVuc2lvbiA+IHdpbmRvd0RpbWVuc2lvbilcbiAgICAgICAgcmV0dXJuIGJvZHlEaW1lbnNpb247XG5cbiAgICBpZiAoYm9keURpbWVuc2lvbiA+IHdpbmRvd0RpbWVuc2lvbilcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50RGltZW5zaW9uO1xuXG4gICAgcmV0dXJuIE1hdGgubWF4KGJvZHlEaW1lbnNpb24sIGRvY3VtZW50RGltZW5zaW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdwb3J0RGltZW5zaW9ucyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6ICBnZXRWaWV3cG9ydERpbWVuc2lvbih3aW5kb3cuaW5uZXJXaWR0aCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiBnZXRWaWV3cG9ydERpbWVuc2lvbih3aW5kb3cuaW5uZXJIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KSxcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZG93RGltZW5zaW9ucyAod2luZG93KSB7XG4gICAgcmV0dXJuIG5ldyBCb3VuZGFyeVZhbHVlcygwLCBnZXRXaWR0aCh3aW5kb3cpLCBnZXRIZWlnaHQod2luZG93KSwgMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hpZGRlbk5vZGUgKG5vZGUpIHtcbiAgICByZXR1cm4gISFkb21VdGlscy5maW5kUGFyZW50KG5vZGUsIHRydWUsIGFuY2VzdG9yID0+XG4gICAgICAgIGRvbVV0aWxzLmlzRWxlbWVudE5vZGUoYW5jZXN0b3IpICYmIHN0eWxlVXRpbHMuZ2V0KGFuY2VzdG9yLCAndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdERpc3BsYXllZE5vZGUgKG5vZGUpIHtcbiAgICByZXR1cm4gISFkb21VdGlscy5maW5kUGFyZW50KG5vZGUsIHRydWUsIGFuY2VzdG9yID0+XG4gICAgICAgIGRvbVV0aWxzLmlzRWxlbWVudE5vZGUoYW5jZXN0b3IpICYmIHN0eWxlVXRpbHMuZ2V0KGFuY2VzdG9yLCAnZGlzcGxheScpID09PSAnbm9uZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RWaXNpYmxlTm9kZSAobm9kZSkge1xuICAgIHJldHVybiAhZG9tVXRpbHMuaXNSZW5kZXJlZE5vZGUobm9kZSkgfHwgaXNOb3REaXNwbGF5ZWROb2RlKG5vZGUpIHx8IGlzSGlkZGVuTm9kZShub2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0RpbWVuc2lvbnMgKGVsKSB7XG4gICAgLy9OT1RFOiBpdCdzIGxpa2UganF1ZXJ5ICc6dmlzaWJsZScgc2VsZWN0b3IgKGh0dHA6Ly9ibG9nLmpxdWVyeS5jb20vMjAwOS8wMi8yMC9qcXVlcnktMS0zLTItcmVsZWFzZWQvKVxuICAgIHJldHVybiBlbCAmJiAhKGVsLm9mZnNldEhlaWdodCA8PSAwICYmIGVsLm9mZnNldFdpZHRoIDw9IDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGaXhlZEVsZW1lbnQgKG5vZGUpIHtcbiAgICByZXR1cm4gZG9tVXRpbHMuaXNFbGVtZW50Tm9kZShub2RlKSAmJiBzdHlsZVV0aWxzLmdldChub2RlLCAncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RpY2t5RWxlbWVudCAobm9kZSkge1xuICAgIHJldHVybiBkb21VdGlscy5pc0VsZW1lbnROb2RlKG5vZGUpICYmIHN0eWxlVXRpbHMuZ2V0KG5vZGUsICdwb3NpdGlvbicpID09PSAnc3RpY2t5Jztcbn1cbiJdfQ==