UNPKG

testbook

Version:
49 lines 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getElementTreeXPath = exports.findTextNodes = void 0; const findTextNodes = (elem) => { let textNodes = []; if (elem) { elem.childNodes.forEach((node) => { if (node.nodeType === 3) { textNodes.push([node.parentNode, node.textContent.trim()]); } else if (node.nodeType === 1 || node.nodeType === 9 || node.nodeType === 11) { textNodes = textNodes.concat(exports.findTextNodes(node)); } }); } return textNodes; }; exports.findTextNodes = findTextNodes; const getElementTreeXPath = (element, context) => { // https://stackoverflow.com/questions/3454526/how-to-calculate-the-xpath-position-of-an-element-using-javascript#answer-3454545 var paths = []; // Use nodeName (instead of localName) // so namespace prefix is included (if any). for (; element && element.nodeType === context.Node.ELEMENT_NODE; element = element.parentNode) { let index = 0; let hasFollowingSiblings = false; let sibling; for (sibling = element.previousSibling; sibling; sibling = sibling.previousSibling) { // Ignore document type declaration. if (sibling.nodeType === context.Node.DOCUMENT_TYPE_NODE) { continue; } if (sibling.nodeName === element.nodeName) { ++index; } } for (sibling = element.nextSibling; sibling && !hasFollowingSiblings; sibling = sibling.nextSibling) { if (sibling.nodeName === element.nodeName) hasFollowingSiblings = true; } const tagName = (element.prefix ? element.prefix + ":" : "") + element.localName; const pathIndex = index || hasFollowingSiblings ? "[" + (index + 1) + "]" : ""; paths.splice(0, 0, tagName + pathIndex); } return paths.length ? "/" + paths.join("/") : null; }; exports.getElementTreeXPath = getElementTreeXPath; //# sourceMappingURL=dom.js.map