testcafe
Version:
Automated browser testing for the modern web development stack.
106 lines • 16 kB
JavaScript
;
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==