ff-dom 1.0.18-beta.5 → 1.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.browser.cjs","sources":["../src/utils/xpathHelpers.ts","../src/utils/xpath.ts","../src/utils/referenceXpath.ts","../src/utils/getElementsFromHTML.ts","../src/utils/cssSelector.ts","../src/browser/xpath.ts"],"sourcesContent":["export const reWhiteSpace = /^[\\S]+( [\\S]+)*$/gi;\r\nexport let cspEnabled: boolean = false;\r\nconst xpathCache: { [x: string]: number } = {};\r\nlet relativeXPathCache = new Map();\r\nexport let modifiedElementAttributes: {\r\n url: string | null;\r\n attributeName: string | null;\r\n element: HTMLElement | Element;\r\n doc: Document;\r\n}[] = [];\r\nlet mutationObserver: MutationObserver;\r\n\r\nexport const createObserver = (addedNodeCallBack: Function) => {\r\n mutationObserver = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation?.addedNodes?.length) {\r\n addedNodeCallBack(mutation?.addedNodes);\r\n }\r\n\r\n if (mutation.target instanceof HTMLElement) {\r\n if (\r\n mutation?.type === \"attributes\" &&\r\n mutation.attributeName === \"class\" &&\r\n ((isSvg(mutation.target) &&\r\n mutation.oldValue?.trim() ===\r\n mutation.target.classList.value?.trim()) ||\r\n mutation.target.classList?.value\r\n ?.replace(mutation.oldValue!, \"\")\r\n .trim() === \"marked-element-temp\" ||\r\n mutation?.oldValue\r\n ?.replace(mutation.target.classList?.value, \"\")\r\n .trim() === \"marked-element-temp\")\r\n ) {\r\n } else if (\r\n mutation?.type === \"attributes\" &&\r\n ![\"flndisabled\"].includes(mutation.attributeName!)\r\n ) {\r\n modifiedElementAttributes.push({\r\n url: mutation.target.baseURI,\r\n attributeName: mutation.attributeName,\r\n element: mutation.target,\r\n doc: mutation.target.ownerDocument,\r\n });\r\n }\r\n }\r\n });\r\n });\r\n};\r\nexport const startObserver = (\r\n target: Node,\r\n options: MutationObserverInit | undefined\r\n) => {\r\n mutationObserver?.observe(target, options);\r\n};\r\n\r\nexport const stopObserver = () => {\r\n mutationObserver?.disconnect();\r\n};\r\n\r\nexport const isNumberExist = (str: string): boolean => {\r\n const hasNumber = /\\d/;\r\n return hasNumber.test(str);\r\n};\r\n\r\nexport const buildPattern = (\r\n pattern: string,\r\n isSvg: boolean,\r\n tagName: string\r\n): string => {\r\n return isSvg\r\n ? `//*[local-name()='${tagName}' and ${pattern}]`\r\n : `//${tagName}[${pattern}]`;\r\n};\r\n\r\nexport const getTextContent = (\r\n targetElement: HTMLElement | Element\r\n): string => {\r\n const textContent = targetElement?.textContent;\r\n if (cspEnabled) {\r\n if (textContent) {\r\n const tooltip = document.querySelector(\".flntooltip\") as HTMLElement;\r\n if (tooltip) {\r\n const lastIndex = textContent.lastIndexOf(tooltip.innerText);\r\n if (\r\n lastIndex &&\r\n textContent.length === lastIndex + tooltip.innerText.length\r\n ) {\r\n return textContent.substring(0, lastIndex);\r\n }\r\n } else {\r\n return textContent;\r\n }\r\n }\r\n } else {\r\n return textContent;\r\n }\r\n\r\n return \"\";\r\n};\r\n\r\nexport const getFilteredText = (element: Node): string => {\r\n return element?.childNodes[0]?.nodeValue || \"\";\r\n};\r\n\r\nexport const getCountOfXPath = (\r\n xpath: string,\r\n element: HTMLElement | Element,\r\n docmt: Node,\r\n multiElementReferenceMode: boolean = false\r\n): number => {\r\n try {\r\n let count;\r\n // Check if result is cached\r\n if (xpathCache[xpath] !== undefined) {\r\n count = xpathCache[xpath];\r\n } else {\r\n const owner =\r\n docmt.nodeType === 9 // DOCUMENT_NODE\r\n ? (docmt as Document)\r\n : docmt.ownerDocument!;\r\n\r\n count = owner.evaluate(\r\n `count(${xpath})`,\r\n docmt,\r\n null,\r\n XPathResult.NUMBER_TYPE,\r\n null\r\n ).numberValue;\r\n xpathCache[xpath] = count;\r\n }\r\n\r\n if (multiElementReferenceMode && Array.isArray(element)) {\r\n if (count > 1) {\r\n const elementsFromXpath = getElementFromXpath(xpath, docmt, true);\r\n let nodex,\r\n matchedCount = 0;\r\n if (elementsFromXpath instanceof XPathResult) {\r\n while ((nodex = elementsFromXpath?.iterateNext())) {\r\n if (element.includes(nodex)) {\r\n matchedCount += 1;\r\n\r\n if (matchedCount === 2) break;\r\n }\r\n }\r\n }\r\n\r\n if (matchedCount !== 2) return 0;\r\n }\r\n } else {\r\n // Short-circuit if we only need to match one element\r\n if (count === 1) {\r\n const elementFromXpath = getElementFromXpath(xpath, docmt);\r\n return elementFromXpath === element ? count : 0; // Return 0 if no match\r\n }\r\n }\r\n return count; // Return the count\r\n } catch (error) {\r\n console.error(`Error evaluating XPath: ${xpath}`, error);\r\n return 0; // Return 0 on error to avoid re-processing\r\n }\r\n};\r\n\r\nexport const escapeCharacters = (text: string): string => {\r\n if (text) {\r\n if (!(text.indexOf('\"') === -1)) {\r\n return `'${text}'`;\r\n }\r\n if (!(text.indexOf(\"'\") === -1)) {\r\n return `\"${text}\"`;\r\n }\r\n }\r\n return `'${text}'`;\r\n};\r\n\r\nexport const removeParenthesis = (xpath: string): string => {\r\n const charArr = xpath.split(\"\");\r\n\r\n let count = charArr.length;\r\n const indexArray = [];\r\n\r\n while (charArr[count - 2] !== \"[\") {\r\n indexArray.push(charArr[count - 2]);\r\n count--;\r\n }\r\n\r\n indexArray.reverse();\r\n let finalStr = \"\";\r\n for (let i = 0; i < indexArray.length; i++) {\r\n finalStr += indexArray[i];\r\n }\r\n\r\n const endBracketLength = finalStr.length + 2;\r\n let firstpart = xpath.slice(0, xpath.length - endBracketLength);\r\n\r\n if (firstpart.startsWith(\"(\") && firstpart.endsWith(\")\")) {\r\n firstpart = firstpart.slice(1, -1);\r\n } else {\r\n firstpart = xpath;\r\n }\r\n\r\n return firstpart;\r\n};\r\n\r\nexport const findXpathWithIndex = (\r\n val: string,\r\n node: HTMLElement | Element,\r\n docmt: Node,\r\n count: number\r\n) => {\r\n try {\r\n const owner =\r\n docmt.nodeType === 9 // DOCUMENT_NODE\r\n ? (docmt as Document)\r\n : docmt.ownerDocument!;\r\n\r\n let index = 0;\r\n if (count) {\r\n if (getCountOfXPath(`${val}[${count}]`, node, docmt) === 1) {\r\n return `${val}[${count}]`;\r\n }\r\n\r\n if (getCountOfXPath(`(${val})[${count}]`, node, docmt) === 1) {\r\n return `(${val})[${count}]`;\r\n }\r\n }\r\n\r\n const nodes = owner.evaluate(val, docmt, null, XPathResult.ANY_TYPE, null);\r\n let nodex;\r\n while ((nodex = nodes.iterateNext())) {\r\n index++;\r\n if (nodex.isSameNode(node)) {\r\n if (getCountOfXPath(`${val}[${index}]`, node, docmt) === 1) {\r\n return `${val}[${index}]`;\r\n }\r\n if (getCountOfXPath(`(${val})[${index}]`, node, docmt) === 1) {\r\n return `(${val})[${index}]`;\r\n }\r\n return;\r\n }\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst deleteLineGap = (a: string): string => {\r\n a &&= a.split(\"\\n\")[0].length > 0 ? a.split(\"\\n\")[0] : a.split(\"\\n\")[1];\r\n return a;\r\n};\r\n\r\nconst deleteGarbageFromInnerText = (a: string): string => {\r\n a = deleteLineGap(a);\r\n a = a\r\n .split(/[^\\u0000-\\u00ff]/)\r\n .reduce((b, c) => {\r\n return b.length > c.length ? b : c;\r\n }, \"\")\r\n .trim();\r\n return (a = a.split(\"/\")[0].trim());\r\n};\r\n\r\nexport const replaceWhiteSpaces = (str: string): string => {\r\n if (str) {\r\n return str.replace(/\\s\\s+/g, \" \").trim();\r\n }\r\n\r\n return str;\r\n};\r\n\r\nexport const getShadowRoot = (a: HTMLElement | Element): Element | null => {\r\n for (a = a && a.parentElement!; a; ) {\r\n if (a.toString() === \"[object ShadowRoot]\") return a;\r\n a = a.parentElement!;\r\n }\r\n return null;\r\n};\r\n\r\nexport const checkBlockedAttributes = (\r\n attribute: {\r\n name: string;\r\n value: string;\r\n },\r\n targetElement: HTMLElement | Element,\r\n isTarget: boolean\r\n): boolean => {\r\n if (\r\n !attribute?.value ||\r\n typeof attribute?.value === \"boolean\" ||\r\n [\"true\", \"false\", \"on\", \"off\", \"flntooltip\"].some(\r\n (x) => x === attribute.value\r\n ) ||\r\n [\"type\", \"style\", \"locator-data-tooltip\", \"value\"].some(\r\n (x) => x === attribute.name\r\n ) ||\r\n modifiedElementAttributes?.find(\r\n (x) =>\r\n x.doc === targetElement.ownerDocument &&\r\n x.element === targetElement &&\r\n x.attributeName === attribute.name\r\n ) ||\r\n (attribute?.name?.indexOf(\"on\") === 0 && attribute?.name?.length > 3) ||\r\n typeof attribute.value === \"function\" ||\r\n (isTarget && isNumberExist(attribute.value))\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const getRelationship = (a: HTMLElement, b: HTMLElement): string => {\r\n let pos = a.compareDocumentPosition(b);\r\n return pos === 2\r\n ? \"preceding\"\r\n : pos === 4\r\n ? \"following\"\r\n : pos === 8\r\n ? \"ancestor\"\r\n : pos === 16\r\n ? \"descendant\"\r\n : pos === 32\r\n ? \"self\"\r\n : \"\";\r\n};\r\n\r\nexport const isSvg = (element: HTMLElement | Element) => {\r\n return element instanceof SVGElement;\r\n};\r\n\r\nexport const replaceTempAttributes = (str: string): string => {\r\n if (!str) return str;\r\n\r\n return str.replace(/\\b[a-zA-Z_]*disabled\\b/gi, \"disabled\");\r\n};\r\n\r\nconst getElementFromXpath = (xpath: string, docmt: Node, multi = false) => {\r\n const owner =\r\n docmt.nodeType === 9 // DOCUMENT_NODE\r\n ? (docmt as Document)\r\n : docmt.ownerDocument!;\r\n\r\n if (multi) {\r\n return owner.evaluate(xpath, docmt, null, XPathResult.ANY_TYPE, null);\r\n } else {\r\n return owner.evaluate(\r\n xpath,\r\n docmt,\r\n null,\r\n XPathResult.FIRST_ORDERED_NODE_TYPE,\r\n null\r\n ).singleNodeValue;\r\n }\r\n};\r\n\r\nexport const getPropertyXPath = (\r\n element: HTMLElement | Element,\r\n docmt: Document,\r\n prop: string,\r\n value: string,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n if (value) {\r\n const { tagName } = element;\r\n let count;\r\n let combinePattern = \"\";\r\n const mergePattern = [];\r\n let pattern;\r\n\r\n if (value && (!isTarget || !isNumberExist(value))) {\r\n if (!reWhiteSpace.test(value)) {\r\n pattern = buildPattern(\r\n `normalize-space(${prop})=${escapeCharacters(\r\n replaceWhiteSpaces(value)\r\n ).trim()}`,\r\n isSvg(element),\r\n element.tagName.toLowerCase()\r\n );\r\n } else {\r\n pattern = `//${tagName}[${prop}=${escapeCharacters(value)}]`;\r\n }\r\n\r\n count = getCountOfXPath(pattern, element, docmt);\r\n\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n\r\n if (value && isTarget) {\r\n const splitText = value.split(\" \");\r\n if (splitText?.length) {\r\n if (splitText.length === 1) {\r\n const contentRes = [...new Set(splitText[0].match(/([^0-9]+)/g))];\r\n if (contentRes?.length >= 1) {\r\n if (\r\n contentRes[0] &&\r\n replaceWhiteSpaces(contentRes[0].trim())?.length > 1\r\n ) {\r\n if (value.startsWith(contentRes[0])) {\r\n if (!reWhiteSpace.test(contentRes[0])) {\r\n combinePattern = `starts-with(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[0])\r\n ).trim()})`;\r\n } else {\r\n combinePattern = `starts-with(${prop},${escapeCharacters(\r\n contentRes[0]\r\n ).trim()})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (contentRes?.length > 1) {\r\n if (\r\n contentRes[contentRes.length - 1] &&\r\n replaceWhiteSpaces(contentRes[contentRes.length - 1].trim())\r\n ?.length > 1\r\n ) {\r\n if (value.endsWith(contentRes[contentRes.length - 1])) {\r\n if (!reWhiteSpace.test(contentRes[contentRes.length - 1])) {\r\n combinePattern = `ends-with(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[contentRes.length - 1])\r\n ).trim()})`;\r\n } else {\r\n combinePattern = `ends-with(${prop},${escapeCharacters(\r\n contentRes[contentRes.length - 1]\r\n ).trim()})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and ${combinePattern}]`;\r\n } else {\r\n pattern = `//${tagName}[${combinePattern}]`;\r\n }\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n } else {\r\n const endIndex =\r\n splitText.length % 2 === 0\r\n ? splitText.length / 2\r\n : splitText.length % 2;\r\n const startIndexString = splitText.slice(0, endIndex).join(\" \");\r\n let contentRes = [...new Set(startIndexString.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n if (\r\n contentRes[0] &&\r\n replaceWhiteSpaces(contentRes[0].trim())?.length\r\n ) {\r\n if (value.startsWith(contentRes[0])) {\r\n if (!reWhiteSpace.test(contentRes[0])) {\r\n combinePattern = `starts-with(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[0])\r\n ).trim()})`;\r\n } else {\r\n combinePattern = `starts-with(${prop},${escapeCharacters(\r\n contentRes[0]\r\n ).trim()})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and ${combinePattern}]`;\r\n } else {\r\n pattern = `//${tagName}[${combinePattern}]`;\r\n }\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n\r\n const endIndexString = splitText\r\n .slice(endIndex, splitText.length - 1)\r\n .join(\" \");\r\n contentRes = [...new Set(endIndexString.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n if (\r\n contentRes[0] &&\r\n replaceWhiteSpaces(contentRes[0].trim())?.length > 3\r\n ) {\r\n if (value.endsWith(contentRes[0])) {\r\n if (!reWhiteSpace.test(contentRes[0])) {\r\n combinePattern = `ends-with(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[0])\r\n ).trim()})`;\r\n } else {\r\n combinePattern = `ends-with(${prop},${escapeCharacters(\r\n contentRes[0]\r\n ).trim()})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and ${combinePattern}]`;\r\n } else {\r\n pattern = `//${tagName}[${combinePattern}]`;\r\n }\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (value && isTarget && isNumberExist(value)) {\r\n const contentRes = [...new Set(value.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (\r\n contentRes[i] &&\r\n replaceWhiteSpaces(contentRes[i].trim())?.length > 1\r\n ) {\r\n if (!reWhiteSpace.test(contentRes[i])) {\r\n mergePattern.push(\r\n `contains(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n mergePattern.push(\r\n `contains(${prop},${escapeCharacters(\r\n contentRes[i].trim()\r\n ).trim()})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (mergePattern?.length) {\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and ${mergePattern.join(\r\n \" and \"\r\n )}]`;\r\n } else {\r\n pattern = `//${tagName}[${mergePattern.join(\" and \")}]`;\r\n }\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n }\r\n\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and text()]`;\r\n } else {\r\n pattern = `//${tagName}[text()]`;\r\n }\r\n\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n};\r\n\r\nexport const getAbsoluteXPath = (\r\n domNode: HTMLElement | Element | null,\r\n docmt: Document\r\n): string => {\r\n try {\r\n if (!domNode) {\r\n return \"\";\r\n }\r\n\r\n let xpathe = isSvg(domNode)\r\n ? `/*[local-name()='${domNode.tagName}']`\r\n : `/${domNode.tagName}`;\r\n\r\n // // If this node has siblings of the same tagName, get the index of this node\r\n if (domNode.parentElement) {\r\n // Get the siblings\r\n const childNodes = Array.prototype.slice\r\n .call(domNode.parentElement.children, 0)\r\n .filter(\r\n (childNode: HTMLElement) => childNode.tagName === domNode.tagName\r\n );\r\n\r\n // // If there's more than one sibling, append the index\r\n if (childNodes.length > 1) {\r\n const index = childNodes.indexOf(domNode);\r\n xpathe += `[${index + 1}]`;\r\n }\r\n } else if (domNode instanceof HTMLElement) {\r\n if (domNode.offsetParent) {\r\n const childNodes = Array.prototype.slice\r\n .call(domNode.offsetParent.children, 0)\r\n .filter(\r\n (childNode: HTMLElement) => childNode.tagName === domNode.tagName\r\n );\r\n\r\n // // If there's more than one sibling, append the index\r\n if (childNodes.length > 1) {\r\n const index = childNodes.indexOf(domNode);\r\n xpathe += `[${index + 1}]`;\r\n }\r\n }\r\n }\r\n\r\n // // Make a recursive call to this nodes parents and prepend it to this xpath\r\n return getAbsoluteXPath(domNode?.parentElement, docmt) + xpathe;\r\n } catch (error) {\r\n // If there's an unexpected exception, abort and don't get an XPath\r\n console.log(\"xpath\", error);\r\n\r\n return \"\";\r\n }\r\n};\r\n\r\nexport const getRelativeXPath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean = false,\r\n attributesArray: Attr[]\r\n) => {\r\n try {\r\n // Generate a cache key based on the node's identifier, index, and target flag\r\n // Check if the result for this node is already cached\r\n if (relativeXPathCache.has(domNode)) {\r\n return relativeXPathCache.get(domNode);\r\n }\r\n\r\n // Initialize an array to hold parts of the XPath\r\n const xpathParts = [];\r\n let currentNode = domNode;\r\n\r\n // Traverse up the DOM tree iteratively instead of using recursion\r\n while (currentNode) {\r\n let xpathe: string | undefined = \"\";\r\n let hasUniqueAttr = false;\r\n let attributes = domNode === currentNode ? attributesArray ?? currentNode.attributes : currentNode.attributes\r\n\r\n // Loop through attributes to check for unique identifiers\r\n for (const attrName of Array.from(attributes)) {\r\n if (checkBlockedAttributes(attrName, currentNode, isTarget)) {\r\n let attrValue = attrName.nodeValue;\r\n\r\n // Clean up attribute value\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n\r\n const elementName = attrName.name;\r\n\r\n // Construct an XPath based on attribute\r\n xpathe = getXpathString(currentNode, elementName, attrValue);\r\n\r\n let othersWithAttr: number = 0;\r\n if (xpathe) {\r\n othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n if (othersWithAttr === 1) {\r\n xpathParts.unshift(replaceTempAttributes(xpathe));\r\n hasUniqueAttr = true;\r\n break;\r\n }\r\n }\r\n\r\n if (othersWithAttr > 1 && isIndex) {\r\n xpathe = findXpathWithIndex(\r\n xpathe,\r\n currentNode,\r\n docmt,\r\n othersWithAttr\r\n );\r\n if (xpathe) {\r\n xpathParts.unshift(replaceTempAttributes(xpathe));\r\n hasUniqueAttr = true;\r\n break;\r\n }\r\n // return replaceTempAttributes(xpathe);\r\n }\r\n }\r\n }\r\n\r\n if (currentNode.textContent) {\r\n if (!isTarget || (isTarget && !isNumberExist(currentNode.textContent))) {\r\n let reWhiteSpace = new RegExp(/^[\\S]+( [\\S]+)*$/gi);\r\n\r\n if (!reWhiteSpace.test(currentNode.textContent)) {\r\n xpathe =\r\n isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and normalize-space(.)=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`\r\n : `//${\r\n currentNode.tagName || \"*\"\r\n }[normalize-space(.)=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`;\r\n } else {\r\n xpathe =\r\n isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and .=${escapeCharacters(getFilteredText(currentNode))}]`\r\n : `//${currentNode.tagName || \"*\"}[.=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`;\r\n }\r\n\r\n let othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n if (othersWithAttr === 1) {\r\n return xpathe;\r\n }\r\n\r\n if (othersWithAttr > 1 && isIndex) {\r\n xpathe = findXpathWithIndex(xpathe, currentNode, docmt, othersWithAttr);\r\n return xpathe;\r\n }\r\n } else {\r\n let combinePattern: string[] = [];\r\n const contentRes = [\r\n ...new Set(getFilteredText(currentNode).match(/([^0-9]+)/g)),\r\n ];\r\n let reWhiteSpace = new RegExp(/^[\\S]+( [\\S]+)*$/gi);\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (\r\n contentRes[i] &&\r\n replaceWhiteSpaces((contentRes[i] as string).trim())\r\n ) {\r\n if (!reWhiteSpace.test(contentRes[i] as string)) {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n (contentRes[i] as string).trim()\r\n ).trim()})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n xpathe =\r\n isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and ${combinePattern.join(\" and \")}]`\r\n : `//${currentNode.tagName || \"*\"}[${combinePattern.join(\r\n \" and \"\r\n )}]`;\r\n let othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n if (othersWithAttr === 1) {\r\n return xpathe;\r\n }\r\n\r\n if (othersWithAttr > 1 && isIndex) {\r\n xpathe = findXpathWithIndex(xpathe, currentNode, docmt, othersWithAttr);\r\n return xpathe;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If no unique attribute was found, construct XPath by tag name\r\n if (!hasUniqueAttr) {\r\n let tagBasedXPath = isSvg(currentNode)\r\n ? `/*[local-name()='${currentNode.tagName}']`\r\n : `/${currentNode.tagName}`;\r\n\r\n // Handle sibling nodes\r\n if (currentNode.parentElement) {\r\n const siblings = Array.from(\r\n currentNode.parentElement.children\r\n ).filter((childNode) => childNode.tagName === currentNode.tagName);\r\n\r\n // Append index to distinguish between siblings\r\n if (siblings.length > 1) {\r\n const index = siblings.indexOf(currentNode);\r\n tagBasedXPath += `[${index + 1}]`;\r\n }\r\n }\r\n\r\n // Add the constructed tag-based XPath to the parts array\r\n xpathParts.unshift(tagBasedXPath);\r\n } else {\r\n break;\r\n }\r\n\r\n // Move up to the parent node for the next iteration\r\n currentNode = currentNode.parentElement!;\r\n }\r\n\r\n // Combine all parts into the final XPath\r\n const finalXPath = `${xpathParts.join(\"\")}`;\r\n\r\n // Cache the final XPath for this node\r\n relativeXPathCache.set(domNode, finalXPath);\r\n return finalXPath;\r\n } catch (error) {\r\n console.log(error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const getCombinationXpath = (\r\n attribute: Attr,\r\n domNode: HTMLElement | Element\r\n) => {\r\n const combinePattern = [];\r\n let pattern: string = \"\";\r\n\r\n if (\r\n attribute &&\r\n !isNumberExist(attribute.value) &&\r\n typeof attribute.nodeValue !== \"function\" // &&\r\n // !modifiedElementAttributes?.find(\r\n // (x) => x.element === domNode && x.attributeName === attribute.name\r\n // )\r\n ) {\r\n const contentRes = [...new Set(attribute.value.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (\r\n contentRes[i] &&\r\n replaceWhiteSpaces(contentRes[i].trim())?.length > 2\r\n ) {\r\n if (!reWhiteSpace.test(contentRes[i])) {\r\n combinePattern.push(\r\n `contains(@${attribute.name},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n combinePattern.push(\r\n `contains(@${attribute.name},${escapeCharacters(\r\n contentRes[i].trim()\r\n )})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n pattern = isSvg(domNode)\r\n ? `//*[local-name()='${domNode.tagName}' and ${combinePattern.join(\r\n \" and \"\r\n )}]`\r\n : `//${domNode.tagName}[${combinePattern.join(\" and \")}]`;\r\n return pattern;\r\n }\r\n }\r\n};\r\n\r\nexport const getAttributeCombinationXpath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n uniqueAttributes: Attr[],\r\n isTarget: boolean\r\n): string | undefined => {\r\n try {\r\n const xpathAttributes = [];\r\n\r\n if (uniqueAttributes.length > 1) {\r\n for (const attrName of uniqueAttributes) {\r\n if (checkBlockedAttributes(attrName, domNode, isTarget)) {\r\n const attrValue = attrName.nodeValue;\r\n\r\n if (!reWhiteSpace.test(attrValue!)) {\r\n xpathAttributes.push(\r\n `normalize-space(@${attrName.nodeName})=\"${attrValue}\"`\r\n );\r\n } else if (attrName.nodeName === \"class\") {\r\n xpathAttributes.push(\r\n `contains(@${attrName.nodeName},\"${attrValue}\")`\r\n );\r\n } else {\r\n xpathAttributes.push(`@${attrName.nodeName}=\"${attrValue}\"`);\r\n }\r\n\r\n const xpathe = isSvg(domNode)\r\n ? `//*[local-name()='${domNode.tagName}' and ${xpathAttributes.join(\r\n \" and \"\r\n )}]`\r\n : `//${domNode.tagName}[${xpathAttributes.join(\" and \")}]`;\r\n let othersWithAttr;\r\n\r\n // If the XPath does not parse, move to the next unique attribute\r\n try {\r\n othersWithAttr = getCountOfXPath(xpathe, domNode, docmt);\r\n } catch (ign) {\r\n continue;\r\n }\r\n\r\n if (othersWithAttr === 1 && !xpathe.includes(\"and\")) {\r\n return \"\";\r\n }\r\n // If the attribute isn't actually unique, get it's index too\r\n if (othersWithAttr === 1 && xpathe.includes(\"and\")) {\r\n return xpathe;\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // If there's an unexpected exception, abort and don't get an XPath\r\n console.log(`'${JSON.stringify(error, null, 2)}'`);\r\n }\r\n};\r\n\r\nexport const intermediateXpathStep = (\r\n targetElemt: HTMLElement | Element,\r\n attr: { name: string; value: string },\r\n isTarget: boolean\r\n): string => {\r\n let isSvgElement = isSvg(targetElemt);\r\n let expression: string = \"\";\r\n\r\n if (checkBlockedAttributes(attr, targetElemt, isTarget)) {\r\n let attrValue = attr.value;\r\n attrValue = attrValue.replace(\"removePointers\", \"\");\r\n const elementName = attr.name;\r\n\r\n if (!reWhiteSpace.test(attrValue)) {\r\n expression = isSvgElement\r\n ? `*[local-name()='${\r\n targetElemt.tagName\r\n }' and normalize-space(@${elementName})=${escapeCharacters(\r\n attrValue\r\n )}]`\r\n : `${\r\n targetElemt.tagName || \"*\"\r\n }[normalize-space(@${elementName})=${escapeCharacters(attrValue)}]`;\r\n } else {\r\n expression = isSvgElement\r\n ? `*[local-name()='${\r\n targetElemt.tagName\r\n }' and @${elementName}=${escapeCharacters(attrValue)}]`\r\n : `${targetElemt.tagName || \"*\"}[@${elementName}=${escapeCharacters(\r\n attrValue\r\n )}]`;\r\n }\r\n }\r\n\r\n return expression;\r\n};\r\n\r\nexport const getFilteredTextXPath = (\r\n node: HTMLElement | Element,\r\n docmt: Document\r\n): string => {\r\n if (!node.textContent) return \"\";\r\n\r\n const filteredText = getFilteredText(node);\r\n\r\n let xpathe;\r\n\r\n if (!reWhiteSpace.test(filteredText)) {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${\r\n node.tagName\r\n }' and normalize-space(.)=${escapeCharacters(filteredText)}]`\r\n : `//${node.tagName || \"*\"}[normalize-space(.)=${escapeCharacters(\r\n filteredText\r\n )}]`;\r\n } else {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${node.tagName}' and .=${escapeCharacters(\r\n filteredText\r\n )}]`\r\n : `//${node.tagName || \"*\"}[.=${escapeCharacters(filteredText)}]`;\r\n }\r\n\r\n return xpathe;\r\n};\r\n\r\nexport const getTextXpathFunction = (domNode: HTMLElement | Element): string | undefined => {\r\n const trimmedText = getTextContent(domNode)?.trim();\r\n const filteredText = trimmedText\r\n ? escapeCharacters(deleteGarbageFromInnerText(trimmedText))\r\n : trimmedText;\r\n if (filteredText) {\r\n if (filteredText !== `'${trimmedText}'`) {\r\n return `contains(.,${filteredText})`;\r\n }\r\n return `normalize-space(.)='${trimmedText}'`;\r\n }\r\n};\r\n\r\nexport const getXpathString = (\r\n node: HTMLElement | Element,\r\n attrName: string,\r\n attrValue: string\r\n): string => {\r\n const reWhiteSpace = new RegExp(/^[\\S]+( [\\S]+)*$/gi);\r\n let xpathe: string = \"\";\r\n\r\n if (attrValue) {\r\n if (!reWhiteSpace.test(attrValue)) {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${\r\n node.tagName\r\n }' and contains(@${attrName},${escapeCharacters(attrValue)})]`\r\n : `//${node.tagName || \"*\"}[contains(@${attrName},${escapeCharacters(\r\n attrValue\r\n )})]`;\r\n } else if (attrName === \"class\") {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${\r\n node.tagName\r\n }' and contains(@${attrName},${escapeCharacters(attrValue)})]`\r\n : `//${node.tagName || \"*\"}[contains(@${attrName},${escapeCharacters(\r\n attrValue\r\n )})]`;\r\n } else {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${\r\n node.tagName\r\n }' and @${attrName}=${escapeCharacters(attrValue)}]`\r\n : `//${node.tagName || \"*\"}[@${attrName}=${escapeCharacters(\r\n attrValue\r\n )}]`;\r\n }\r\n }\r\n\r\n return xpathe;\r\n};\r\n\r\nexport const replaceActualAttributes = (\r\n str: string,\r\n element: { attributes: any }\r\n): string => {\r\n if (str) {\r\n return str.replace(/\\bdisabled\\b/gi, \"flndisabled\");\r\n }\r\n return str;\r\n};\r\n\r\nconst addAttributeSplitCombineXpaths = (\r\n attributes: NamedNodeMap,\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isTarget: boolean\r\n): { key: string; value: string }[] => {\r\n const attributesArray = Array.prototype.slice.call(attributes);\r\n const xpaths: { key: string; value: string }[] = [];\r\n try {\r\n attributesArray.map((element) => {\r\n if (checkBlockedAttributes(element, targetElemt, isTarget)) {\r\n const xpth = getCombinationXpath(element, targetElemt);\r\n if (xpth) {\r\n xpaths.push({\r\n key: `split xpath by ${element.name}`,\r\n value: xpth,\r\n });\r\n }\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n return xpaths;\r\n};\r\n\r\nexport const getReferenceElementsXpath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n isTarget: boolean\r\n): { key: string; value: string }[] => {\r\n let nodeXpath1;\r\n const xpaths1 = [];\r\n if (\r\n domNode.textContent &&\r\n (!isTarget || (isTarget && !isNumberExist(domNode.textContent)))\r\n ) {\r\n if (!reWhiteSpace.test(domNode.textContent)) {\r\n nodeXpath1 = isSvg(domNode)\r\n ? `*[local-name()='${domNode.tagName}' and ${getTextXpathFunction(\r\n domNode\r\n )})]`\r\n : `${domNode.tagName}[${getTextXpathFunction(domNode)}]`;\r\n if (nodeXpath1) {\r\n xpaths1.push({ key: \"getReferenceElementsXpath\", value: nodeXpath1 });\r\n }\r\n } else {\r\n nodeXpath1 = isSvg(domNode)\r\n ? `*[local-name()='${domNode.tagName}' and .=${escapeCharacters(\r\n getTextContent(domNode)\r\n )}]`\r\n : `${domNode.tagName}[.=${escapeCharacters(getTextContent(domNode))}]`;\r\n if (nodeXpath1) {\r\n xpaths1.push({ key: \"getReferenceElementsXpath\", value: nodeXpath1 });\r\n }\r\n }\r\n }\r\n\r\n if (domNode.attributes) {\r\n for (const attrName of Array.from(domNode.attributes)) {\r\n if (checkBlockedAttributes(attrName, domNode, isTarget)) {\r\n let attrValue = attrName.nodeValue;\r\n if (attrValue) {\r\n attrValue = attrValue.replace(\"removePointers\", \"\");\r\n const elementName = attrName.name;\r\n\r\n if (elementName === \"class\") {\r\n nodeXpath1 = isSvg(domNode)\r\n ? `*[local-name()='${\r\n domNode.tagName\r\n }' and contains(@${elementName},${escapeCharacters(\r\n attrValue\r\n )})]`\r\n : `${domNode.tagName}[contains(@${elementName},${escapeCharacters(\r\n attrValue\r\n )})]`;\r\n } else {\r\n nodeXpath1 = isSvg(domNode)\r\n ? `*[local-name()='${\r\n domNode.tagName\r\n }' and @${elementName}=${escapeCharacters(attrValue)}]`\r\n : `${domNode.tagName}[@${elementName}=${escapeCharacters(\r\n attrValue\r\n )}]`;\r\n }\r\n\r\n if (nodeXpath1) {\r\n xpaths1.push({\r\n key: \"getReferenceElementsXpath\",\r\n value: nodeXpath1,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n const attributesArray = Array.prototype.slice.call(domNode.attributes);\r\n if (attributesArray?.length > 1) {\r\n const combinationXpath = getAttributeCombinationXpath(\r\n domNode,\r\n docmt,\r\n Array.prototype.slice.call(domNode.attributes),\r\n isTarget\r\n );\r\n if (combinationXpath) {\r\n xpaths1.push({\r\n key: \"getReferenceElementsXpath\",\r\n value: combinationXpath,\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n const combinePattern = [];\r\n let pattern;\r\n const tag = isSvg(domNode);\r\n if (domNode.textContent && isTarget && isNumberExist(domNode.textContent)) {\r\n const contentRes = [...new Set(domNode.textContent.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (\r\n contentRes[i] &&\r\n replaceWhiteSpaces(contentRes[i].trim())?.length > 1\r\n ) {\r\n if (!reWhiteSpace.test(contentRes[i])) {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(contentRes[i]).trim()})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n if (tag) {\r\n pattern = `//*[local-name()='${tag}' and ${combinePattern.join(\r\n \" and \"\r\n )}]`;\r\n } else {\r\n pattern = `//${tag}[${combinePattern.join(\" and \")}]`;\r\n }\r\n\r\n if (pattern)\r\n xpaths1.push({ key: \"getReferenceElementsXpath\", value: pattern });\r\n }\r\n }\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n const xpaths = addAttributeSplitCombineXpaths(\r\n domNode.attributes,\r\n domNode,\r\n docmt,\r\n isTarget\r\n );\r\n if (xpaths?.length) {\r\n xpaths1.concat(xpaths);\r\n }\r\n }\r\n\r\n return xpaths1;\r\n};\r\n\r\nexport const parseXml = (xmlStr: string): Document | null => {\r\n if (window.DOMParser) {\r\n return new window.DOMParser().parseFromString(xmlStr, \"text/xml\");\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport const normalizeXPath = (xpath: string): string => {\r\n // Replace text() = \"value\" or text()='value'\r\n xpath = xpath.replace(\r\n /text\\(\\)\\s*=\\s*(['\"])(.*?)\\1/g,\r\n \"normalize-space(.)=$1$2$1\"\r\n );\r\n\r\n // Replace . = \"value\" or .='value'\r\n xpath = xpath.replace(/\\.\\s*=\\s*(['\"])(.*?)\\1/g, \"normalize-space(.)=$1$2$1\");\r\n\r\n return xpath;\r\n};\r\n\r\nexport const findMatchingParenthesis = (\r\n text: string,\r\n openPos: number\r\n): number => {\r\n let closePos = openPos;\r\n let counter = 1;\r\n while (counter > 0) {\r\n const c = text[++closePos];\r\n if (c == \"(\") {\r\n counter++;\r\n } else if (c == \")\") {\r\n counter--;\r\n }\r\n }\r\n return closePos;\r\n};\r\n\r\nexport const xpathUtils = {\r\n parseXml,\r\n getReferenceElementsXpath,\r\n getAbsoluteXPath,\r\n getRelativeXPath,\r\n getCombinationXpath,\r\n getAttributeCombinationXpath,\r\n getElementFromXpath,\r\n isSvg,\r\n findXpathWithIndex,\r\n isNumberExist,\r\n getTextContent,\r\n getCountOfXPath,\r\n normalizeXPath,\r\n getShadowRoot,\r\n escapeCharacters,\r\n removeParenthesis,\r\n checkBlockedAttributes,\r\n getRelationship,\r\n findMatchingParenthesis,\r\n deleteGarbageFromInnerText,\r\n replaceTempAttributes,\r\n createObserver,\r\n startObserver,\r\n stopObserver,\r\n modifiedElementAttributes,\r\n cspEnabled\r\n};\r\n","import {\r\n isNumberExist,\r\n getCountOfXPath,\r\n escapeCharacters,\r\n checkBlockedAttributes,\r\n replaceWhiteSpaces,\r\n getTextContent,\r\n getPropertyXPath,\r\n findXpathWithIndex,\r\n getFilteredText,\r\n intermediateXpathStep,\r\n getAttributeCombinationXpath,\r\n getFilteredTextXPath,\r\n isSvg,\r\n getXpathString,\r\n reWhiteSpace,\r\n modifiedElementAttributes,\r\n} from \"./xpathHelpers.ts\";\r\n\r\nlet xpathData: { key: string; value: string }[] = [];\r\nlet xpathDataWithIndex: { key: string; value: string; count: number }[] = [];\r\nlet referenceElementMode: boolean = false;\r\nlet xpathCache = new Map();\r\nlet cache = new Map();\r\n\r\nconst parentXpathCache = new Map(); // Cache for parent XPaths\r\n\r\nconst checkRelativeXpathRelation = (\r\n nodeXpath1: string,\r\n nodeXpath2: string,\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n relationType: string\r\n) => {\r\n if (nodeXpath1 && !referenceElementMode) {\r\n let xpaths;\r\n\r\n if (relationType === \"parent\") {\r\n xpaths = [\r\n // `${nodeXpath1}/descendant::${nodeXpath2}`,\r\n `${nodeXpath1}/descendant-or-self::${nodeXpath2}`,\r\n `${nodeXpath1}/following::${nodeXpath2}`,\r\n ];\r\n } else {\r\n xpaths = [\r\n // `${nodeXpath1}/descendant::${nodeXpath2}`,\r\n `${nodeXpath1}/ancestor-or-self::${nodeXpath2}`,\r\n `${nodeXpath1}/preceding::${nodeXpath2}`,\r\n ];\r\n }\r\n\r\n // Iterate through XPath patterns\r\n for (const xpath of xpaths) {\r\n // Check if result is already cached to avoid recomputation\r\n if (!xpathCache?.get(xpath)) {\r\n // Compute and store result in cache\r\n xpathCache.set(xpath, getCountOfXPath(xpath, targetElemt, docmt));\r\n }\r\n\r\n const count = xpathCache?.get(xpath);\r\n\r\n // Short-circuit: Return the first valid XPath result found\r\n if (count === 1) {\r\n return xpath;\r\n }\r\n if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by unique parent ${isIndex ? \"index\" : \"\"}`,\r\n value: xpath,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by unique parent ${isIndex ? \"index\" : \"\"}`,\r\n value: xpath,\r\n count,\r\n });\r\n }\r\n }\r\n\r\n if (count > 1 && isIndex && !xpathData.length) {\r\n // Try finding XPath with index if count is greater than 1\r\n const indexedXpath = findXpathWithIndex(\r\n xpath,\r\n targetElemt,\r\n docmt,\r\n count\r\n );\r\n\r\n // Cache the indexed XPath result\r\n if (\r\n indexedXpath &&\r\n getCountOfXPath(indexedXpath, targetElemt, docmt) === 1\r\n ) {\r\n xpathData.push({\r\n key: `relative xpath by unique parent ${isIndex ? \"index\" : \"\"}`,\r\n value: indexedXpath,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nconst getUniqueParentXpath = (\r\n domNode: HTMLElement,\r\n docmt: Document,\r\n node: HTMLElement | Element,\r\n isTarget: boolean,\r\n nodeXpath: string,\r\n isIndex: boolean\r\n) => {\r\n try {\r\n if (parentXpathCache.has(domNode)) {\r\n return parentXpathCache.get(domNode);\r\n }\r\n\r\n // Direct XPath construction without loops\r\n const xpathParts = [];\r\n let currentNode = domNode;\r\n\r\n while (currentNode && currentNode.nodeType === 1) {\r\n const hasUniqueAttr = false;\r\n for (const attrName of Array.from(currentNode.attributes)) {\r\n if (checkBlockedAttributes(attrName, currentNode, isTarget)) {\r\n let attrValue = attrName.nodeValue;\r\n\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n const elementName = attrName.name;\r\n const xpathe = getXpathString(currentNode, elementName, attrValue);\r\n\r\n let othersWithAttr;\r\n\r\n // If the XPath does not parse, move to the next unique attribute\r\n try {\r\n othersWithAttr = checkRelativeXpathRelation(\r\n xpathe,\r\n nodeXpath,\r\n node,\r\n docmt,\r\n isIndex,\r\n \"parent\"\r\n );\r\n } catch (ign) {\r\n continue;\r\n }\r\n\r\n // If the attribute isn't actually unique, get it's index too\r\n if (othersWithAttr) {\r\n return othersWithAttr;\r\n }\r\n }\r\n }\r\n\r\n if (currentNode.textContent && !currentNode.textContent) {\r\n if (\r\n !isTarget ||\r\n (isTarget && !isNumberExist(currentNode.textContent))\r\n ) {\r\n let xpathe;\r\n\r\n if (!reWhiteSpace.test(currentNode.textContent)) {\r\n xpathe = isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and normalize-space(.)=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`\r\n : `//${\r\n currentNode.tagName || \"*\"\r\n }[normalize-space(.)=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`;\r\n } else {\r\n xpathe = isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and .=${escapeCharacters(getFilteredText(currentNode))}]`\r\n : `//${currentNode.tagName || \"*\"}[.=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`;\r\n }\r\n\r\n const othersWithAttr = checkRelativeXpathRelation(\r\n xpathe,\r\n nodeXpath,\r\n node,\r\n docmt,\r\n isIndex,\r\n \"parent\"\r\n );\r\n if (othersWithAttr) {\r\n return othersWithAttr;\r\n }\r\n } else {\r\n const combinePattern = [];\r\n const contentRes = [\r\n ...new Set(getFilteredText(currentNode).match(/([^0-9]+)/g)),\r\n ];\r\n const reWhiteSpace = new RegExp(/^[\\S]+( [\\S]+)*$/gi);\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (contentRes[i] && replaceWhiteSpaces(contentRes[i].trim())) {\r\n if (!reWhiteSpace.test(contentRes[i])) {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n contentRes[i].trim()\r\n ).trim()})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n const xpathe = isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and ${combinePattern.join(\" and \")}]`\r\n : `//${currentNode.tagName || \"*\"}[${combinePattern.join(\r\n \" and \"\r\n )}]`;\r\n const othersWithAttr = checkRelativeXpathRelation(\r\n xpathe,\r\n nodeXpath,\r\n node,\r\n docmt,\r\n isIndex,\r\n \"parent\"\r\n );\r\n if (othersWithAttr) {\r\n return othersWithAttr;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Construct the XPath based on the tag name\r\n if (!hasUniqueAttr) {\r\n const xpathe = isSvg(currentNode)\r\n ? `/*[local-name()='${currentNode.tagName}']`\r\n : `/${currentNode.tagName}`;\r\n\r\n xpathParts.unshift(xpathe);\r\n } else {\r\n break;\r\n }\r\n\r\n // Move to the parent node for the next iteration\r\n currentNode = currentNode.parentElement!;\r\n }\r\n\r\n // Final constructed XPath\r\n const finalXPath = xpathParts.join(\"\");\r\n let count = getCountOfXPath(finalXPath, domNode, docmt);\r\n if (count === 1) {\r\n parentXpathCache.set(domNode, finalXPath); // Cache final result\r\n return finalXPath;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n return null;\r\n }\r\n};\r\n\r\nconst getParentRelativeXpath = (\r\n domNode: HTMLElement,\r\n docmt: Document,\r\n node: HTMLElement | Element,\r\n isTarget: boolean\r\n) => {\r\n const cache = new Map(); // Cache to store computed results\r\n\r\n if (cache.has(domNode)) {\r\n return cache.get(domNode); // Return cached result if available\r\n }\r\n\r\n const xpathParts = []; // Initialize an array to hold parts of the XPath\r\n let currentNode = domNode; // Start with the provided DOM node\r\n\r\n try {\r\n while (currentNode && currentNode.nodeType === 1) {\r\n // BASE CASE #1: If this isn't an element, we're above the root, return empty string\r\n if (!currentNode.tagName) {\r\n return \"\";\r\n }\r\n\r\n // BASE CASE #2: Check for unique attributes\r\n let uniqueAttrFound = false;\r\n for (const attr of Array.from(currentNode.attributes)) {\r\n if (checkBlockedAttributes(attr, currentNode, isTarget)) {\r\n let attrValue = attr.nodeValue;\r\n\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n const elementName = attr.name;\r\n\r\n const xpathe = getXpathString(currentNode, elementName, attrValue);\r\n\r\n let othersWithAttr;\r\n\r\n // If the XPath does not parse, move to the next unique attribute\r\n try {\r\n othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n } catch (ign) {\r\n continue;\r\n }\r\n\r\n // If the attribute is unique, return its XPath\r\n if (othersWithAttr === 1) {\r\n xpathParts.unshift(xpathe);\r\n uniqueAttrFound = true; // Mark that we found at least one unique attribute\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If no unique attributes, check for text content\r\n if (!uniqueAttrFound && currentNode.textContent && !node.textContent) {\r\n const textXPath = getFilteredTextXPath(currentNode, docmt);\r\n if (textXPath) {\r\n const othersWithAttr = getCountOfXPath(textXPath, currentNode, docmt);\r\n if (othersWithAttr === 1) {\r\n uniqueAttrFound = true; // Mark that we found at least one unique attribute\r\n xpathParts.unshift(textXPath);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!uniqueAttrFound) {\r\n // Construct the XPath based on the tag name\r\n const xpathe = isSvg(currentNode)\r\n ? `/*[local-name()='${currentNode.tagName}']`\r\n : `/${currentNode.tagName}`;\r\n\r\n // Prepend the current XPath part to the array\r\n xpathParts.unshift(xpathe);\r\n } else {\r\n break;\r\n }\r\n // Move to the parent node for the next iteration\r\n currentNode = currentNode.parentElement!;\r\n }\r\n\r\n // Combine all parts into the final XPath\r\n const finalXpath = xpathParts.join(\"\");\r\n cache.set(domNode, finalXpath); // Store result in cache\r\n return finalXpath;\r\n } catch (error) {\r\n console.log(error);\r\n return null;\r\n }\r\n};\r\n\r\nconst getChildRelativeXpath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n node: HTMLElement | Element\r\n) => {\r\n const xpathParts = []; // Initialize an array to hold parts of the XPath.\r\n let currentNode: HTMLElement | Element | null;\r\n\r\n const st = [];\r\n if (\r\n domNode.firstElementChild != null &&\r\n domNode.firstElementChild.classList.contains(\"flntooltip\")\r\n ) {\r\n st.unshift(domNode.firstElementChild);\r\n } else if (domNode.nextElementSibling != null)\r\n st.unshift(domNode.nextElementSibling);\r\n\r\n for (\r\n let m = domNode.parentElement;\r\n m != null && m.nodeType === 1;\r\n m = m.parentElement\r\n ) {\r\n if (m.nextElementSibling) st.unshift(m.nextElementSibling);\r\n }\r\n\r\n try {\r\n do {\r\n let uniqueAttrFound = false;\r\n for (currentNode = st.pop()!; currentNode !== null; ) {\r\n for (const attr of Array.from(currentNode.attributes)) {\r\n if (checkBlockedAttributes(attr, currentNode, true)) {\r\n let attrValue = attr.nodeValue;\r\n\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n const elementName = attr.name;\r\n\r\n const xpathe = getXpathString(currentNode, elementName, attrValue);\r\n\r\n let othersWithAttr;\r\n\r\n // If the XPath does not parse, move to the next unique attribute\r\n try {\r\n othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n } catch (ign) {\r\n continue;\r\n }\r\n\r\n // If the attribute is unique, return its XPath\r\n if (othersWithAttr === 1) {\r\n uniqueAttrFound = true; // Mark that we found at least one unique attribute\r\n xpathParts.push(xpathe);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If no unique attributes, check for text content\r\n if (!uniqueAttrFound && currentNode.textContent && !node.textContent) {\r\n const textXPath = getFilteredTextXPath(currentNode, docmt);\r\n if (textXPath) {\r\n const othersWithAttr = getCountOfXPath(\r\n textXPath,\r\n currentNode,\r\n docmt\r\n );\r\n if (othersWithAttr === 1) {\r\n uniqueAttrFound = true; // Mark that we found at least one unique attribute\r\n xpathParts.push(textXPath);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!uniqueAttrFound) {\r\n // Construct the XPath based on the tag name\r\n const xpathe = isSvg(currentNode)\r\n ? `/*[local-name()='${currentNode.tagName}']`\r\n : `/${currentNode.tagName}`;\r\n\r\n // Prepend the current XPath part to the array\r\n xpathParts.push(xpathe);\r\n\r\n if (currentNode.firstElementChild != null) {\r\n st.push(currentNode.nextElementSibling);\r\n currentNode = currentNode.firstElementChild;\r\n } else {\r\n currentNode = currentNode.nextElementSibling;\r\n }\r\n } else {\r\n break;\r\n }\r\n }\r\n } while (st.length > 0);\r\n\r\n // Combine all parts into the final XPath\r\n const finalXpath = xpathParts.join(\"\");\r\n cache.set(domNode, finalXpath); // Store result in cache\r\n return finalXpath;\r\n } catch (error) {\r\n console.log(error);\r\n return null;\r\n }\r\n};\r\n\r\nconst getSiblingRelativeXPath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n isTarget: boolean,\r\n nodeXpath: string\r\n) => {\r\n try {\r\n const markedSpan = document.querySelector(\".flntooltip\");\r\n\r\n for (\r\n let m = domNode.nextElementSibling;\r\n m !== null && m !== markedSpan;\r\n m = m.nextElementSibling\r\n ) {\r\n processSibling(\r\n m,\r\n domNode,\r\n docmt,\r\n nodeXpath,\r\n \"preceding-sibling\",\r\n isTarget\r\n );\r\n }\r\n\r\n for (\r\n let n = domNode.previousElementSibling;\r\n n !== null && n !== markedSpan;\r\n n = n.previousElementSibling\r\n ) {\r\n processSibling(\r\n n,\r\n domNode,\r\n docmt,\r\n nodeXpath,\r\n \"following-sibling\",\r\n isTarget\r\n );\r\n }\r\n } catch (error) {\r\n console.error(\"sibling error\", error);\r\n return null;\r\n }\r\n};\r\n\r\nconst processSibling = (\r\n sibling: Element,\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n nodeXpath: string,\r\n axis: string,\r\n isTarget: boolean\r\n) => {\r\n try {\r\n if (sibling.hasAttributes()) {\r\n for (const attr of Array.from(sibling.attributes)) {\r\n let xpathe = intermediateXpathStep(\r\n sibling,\r\n {\r\n name: attr.name,\r\n value: attr.value,\r\n },\r\n isTarget\r\n );\r\n if (xpathe) {\r\n xpathe += `/${axis}::${nodeXpath}`;\r\n\r\n const count = getCountOfXPath(xpathe, sibling, docmt);\r\n\r\n if (count === 1) {\r\n xpathData.push({\r\n key: `xpath by ${axis}`,\r\n value: xpathe,\r\n });\r\n return;\r\n } else if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by ${axis}`,\r\n value: xpathe,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by ${axis}`,\r\n value: xpathe,\r\n count,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!isTarget) {\r\n let xpathe;\r\n xpathe = intermediateXpathStep(\r\n sibling,\r\n {\r\n name: \"text\",\r\n value: sibling.textContent,\r\n },\r\n isTarget\r\n );\r\n\r\n if (xpathe) {\r\n const count = getCountOfXPath(xpathe, sibling, docmt);\r\n\r\n if (count === 1) {\r\n xpathData.push({\r\n key: `xpath by ${axis}`,\r\n value: xpathe,\r\n });\r\n return;\r\n } else if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by ${axis}`,\r\n value: xpathe,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by ${axis}`,\r\n value: xpathe,\r\n count,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.log(`${axis} xpath-error`, error);\r\n }\r\n};\r\n\r\nfunction getXPathUsingAttributeAndText(\r\n attributes: Attr[],\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isTarget: boolean\r\n) {\r\n const { tagName } = targetElemt;\r\n const textContent = targetElemt.textContent.trim();\r\n for (const attrName of attributes) {\r\n if (checkBlockedAttributes(attrName, targetElemt, isTarget)) {\r\n let attrValue = attrName.nodeValue;\r\n\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n const elementName = attrName.name;\r\n const xpath = `//${tagName}[@${elementName}='${attrValue}' and text()='${textContent}']`;\r\n if (xpath) {\r\n const count = getCountOfXPath(xpath, targetElemt, docmt);\r\n if (count == 1) {\r\n return xpath;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst addRelativeXpaths = (\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean,\r\n attribute: Attr[]\r\n) => {\r\n try {\r\n let nodeXpath: string[] = [];\r\n let relativeXpath, relativeChildXpath;\r\n\r\n if (!xpathData.length && isIndex) {\r\n if (xpathDataWithIndex.length) {\r\n const xpathWithIndex = findXpathWithIndex(\r\n xpathDataWithIndex[0].value,\r\n targetElemt,\r\n docmt,\r\n xpathDataWithIndex[0].count\r\n );\r\n if (xpathWithIndex) {\r\n xpathData.push({\r\n key: xpathDataWithIndex[0].key,\r\n value: xpathWithIndex,\r\n });\r\n xpathDataWithIndex.pop();\r\n }\r\n }\r\n }\r\n\r\n console.log(attribute);\r\n if (!xpathData.length) {\r\n if (targetElemt.attributes) {\r\n for (const attrName of attribute) {\r\n let expression = intermediateXpathStep(\r\n targetElemt,\r\n {\r\n name: attrName.name,\r\n value: attrName.value,\r\n },\r\n isTarget\r\n );\r\n\r\n console.log(expression);\r\n if (expression) {\r\n nodeXpath.push(expression);\r\n }\r\n }\r\n }\r\n\r\n if (targetElemt.textContent) {\r\n let expression = intermediateXpathStep(\r\n targetElemt,\r\n {\r\n name: \"text\",\r\n value: targetElemt.textContent,\r\n },\r\n isTarget\r\n );\r\n\r\n console.log(expression);\r\n if (expression) {\r\n nodeXpath.push(expression);\r\n }\r\n }\r\n\r\n if (nodeXpath?.length) {\r\n for (let i = 0; i < nodeXpath.length; i++) {\r\n if (!xpathData.length) {\r\n getSiblingRelativeXPath(targetElemt, docmt, isTarget, nodeXpath[i]);\r\n\r\n if (!xpathData.length) {\r\n if (!relativeXpath) {\r\n relativeXpath = getParentRelativeXpath(\r\n targetElemt.parentElement!,\r\n docmt,\r\n targetElemt,\r\n isTarget\r\n );\r\n }\r\n\r\n console.log(relativeXpath);\r\n\r\n if (\r\n relativeXpath &&\r\n (relativeXpath.includes(\"@\") ||\r\n relativeXpath.includes(\"text()\") ||\r\n relativeXpath.includes(\".=\")) &&\r\n relativeXpath.match(/\\//g)?.length - 2 < 5\r\n ) {\r\n const fullRelativeXpath = relativeXpath + `/${nodeXpath[i]}`;\r\n const count = getCountOfXPath(\r\n fullRelativeXpath,\r\n targetElemt,\r\n docmt\r\n );\r\n\r\n if (count === 1) {\r\n xpathData.push({\r\n key: \"relative xpath by relative parent\",\r\n value: fullRelativeXpath,\r\n });\r\n } else if (count > 1 && isIndex) {\r\n const relativeXpathIndex = findXpathWithIndex(\r\n fullRelativeXpath,\r\n targetElemt,\r\n docmt,\r\n count\r\n );\r\n if (\r\n relativeXpathIndex &&\r\n getCountOfXPath(relativeXpathIndex, targetElemt, docmt) ===\r\n 1\r\n ) {\r\n xpathData.push({\r\n key: `relative xpath by relative parent ${\r\n isIndex ? \"index\" : \"\"\r\n }`,\r\n value: relativeXpathIndex,\r\n });\r\n }\r\n } else if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative parent ${\r\n isIndex ? \"index\" : \"\"\r\n }`,\r\n value: fullRelativeXpath,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative parent ${\r\n isIndex ? \"index\" : \"\"\r\n }`,\r\n value: fullRelativeXpath,\r\n count,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!xpathData.length) {\r\n if (!relativeChildXpath) {\r\n relativeChildXpath = getChildRelativeXpath(\r\n targetElemt,\r\n docmt,\r\n targetElemt\r\n );\r\n }\r\n\r\n if (\r\n relativeChildXpath &&\r\n (relativeChildXpath.includes(\"@\") ||\r\n relativeChildXpath.includes(\"text()\") ||\r\n relativeChildXpath.includes(\".=\"))\r\n ) {\r\n const fullRelativeXpath = `/${\r\n nodeXpath[i] + relativeChildXpath.substring(1)\r\n }`;\r\n const count = getCountOfXPath(\r\n fullRelativeXpath,\r\n targetElemt,\r\n docmt\r\n );\r\n\r\n if (count === 1) {\r\n xpathData.push({\r\n key: \"relative xpath by relative child\",\r\n value: fullRelativeXpath,\r\n });\r\n } else if (count > 1 && isIndex) {\r\n const relativeXpathIndex = findXpathWithIndex(\r\n fullRelativeXpath,\r\n targetElemt,\r\n docmt,\r\n count\r\n );\r\n if (\r\n relativeXpathIndex &&\r\n getCountOfXPath(relativeXpathIndex, targetElemt, docmt) ===\r\n 1\r\n ) {\r\n xpathData.push({\r\n key: `relative xpath by relative parent ${\r\n isIndex ? \"index\" : \"\"\r\n }`,\r\n value: relativeXpathIndex,\r\n });\r\n }\r\n } else if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative child ${\r\n isIndex ? \"index\" : \"\"\r\n }`,\r\n value: fullRelativeXpath,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative child ${\r\n isIndex ? \"index\" : \"\"\r\n }`,\r\n value: fullRelativeXpath,\r\n count,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (\r\n xpathData?.length === 1 &&\r\n xpathData?.[0]?.value?.match(/\\[([0-9]+)\\]/gm)?.length! > 3 &&\r\n !referenceElementMode\r\n ) {\r\n if (targetElemt.textContent) {\r\n const txtXpath = getTextXPath(\r\n targetElemt,\r\n docmt,\r\n isIndex,\r\n false\r\n );\r\n if (txtXpath) {\r\n xpathData.unshift({\r\n key: `xpath by text${isIndex ? \"index\" : \"\"}`,\r\n value: txtXpath,\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (!xpathData.length) {\r\n let tempRelativeXpath = getUniqueParentXpath(\r\n targetElemt.parentElement!,\r\n docmt,\r\n targetElemt,\r\n isTarget,\r\n nodeXpath[i],\r\n isIndex\r\n );\r\n\r\n if (tempRelativeXpath) {\r\n xpathData.push({\r\n key: \"xpath by unique parent\",\r\n value: tempRelativeXpath,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return xpathData;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nexport const attributesBasedXPath = (\r\n attr: Attr,\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n let attrName;\r\n\r\n attrName = attr.name;\r\n let xpath = getPropertyXPath(\r\n targetElemt,\r\n docmt,\r\n `@${attrName}`,\r\n attr.value,\r\n isIndex,\r\n isTarget\r\n );\r\n\r\n return xpath;\r\n};\r\n\r\nexport const getUniqueClassName = (\r\n element: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n let value = element.className;\r\n if (typeof value !== \"string\") {\r\n value = \"\";\r\n }\r\n value = value?.replace(\"flndisabled\", \"disabled\");\r\n value = value?.replace(\"removePointers\", \"\");\r\n value = value?.trim();\r\n\r\n if (value) {\r\n return getPropertyXPath(element, docmt, `@class`, value, isIndex, isTarget);\r\n }\r\n};\r\n\r\nexport const getTextXPath = (\r\n element: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n if (element.textContent != \"\") {\r\n const text = getTextContent(element);\r\n\r\n if (text) {\r\n return getPropertyXPath(element, docmt, \".\", text, isIndex, isTarget);\r\n }\r\n }\r\n};\r\n\r\nconst addAllXPathAttributes = (\r\n attributes: Attr[],\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n const attributesArray = attributes;\r\n try {\r\n attributesArray.map((attr) => {\r\n if (!(attr.name === \"className\" || attr.name === \"class\")) {\r\n if (checkBlockedAttributes(attr, targetElemt, isTarget)) {\r\n const xpth = attributesBasedXPath(\r\n attr,\r\n targetElemt,\r\n docmt,\r\n isIndex,\r\n isTarget\r\n );\r\n if (xpth) {\r\n xpathData.push({\r\n key: `xpath by ${attr.name}${isIndex ? \" index\" : \"\"}`,\r\n value: xpth,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n const txtXpath = getTextXPath(targetElemt, docmt, isIndex, isTarget);\r\n if (txtXpath) {\r\n xpathData.push({\r\n key: `xpath by text${isIndex ? \" index\" : \"\"}`,\r\n value: txtXpath,\r\n });\r\n }\r\n\r\n if (\r\n attributesArray.find((element) => element.name === \"className\") &&\r\n checkBlockedAttributes(\r\n attributesArray?.find((element) => element.name === \"className\")!,\r\n targetElemt,\r\n isTarget\r\n )\r\n ) {\r\n let xpath = getUniqueClassName(targetElemt, docmt, isIndex, isTarget);\r\n if (xpath) {\r\n xpathData.push({\r\n key: \"xpath by class\",\r\n value: xpath,\r\n });\r\n }\r\n }\r\n\r\n if (!xpathData.length) {\r\n const textAttribute = getXPathUsingAttributeAndText(\r\n attributes,\r\n targetElemt,\r\n docmt,\r\n isTarget\r\n );\r\n if (textAttribute)\r\n xpathData.push({\r\n key: \"xpath by textAttribute\",\r\n value: textAttribute,\r\n });\r\n }\r\n\r\n if (!xpathData.length && attributesArray.length > 1) {\r\n const combinationXpath = getAttributeCombinationXpath(\r\n targetElemt,\r\n docmt,\r\n attributesArray,\r\n isTarget\r\n );\r\n if (combinationXpath)\r\n xpathData.push({\r\n key: \"xpath by combination\",\r\n value: combinationXpath,\r\n });\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nexport const parseDOM = (\r\n element: HTMLElement | Element,\r\n doc: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n xpathData = [];\r\n console.log(element);\r\n const targetElemt = element;\r\n const docmt = targetElemt?.ownerDocument || doc;\r\n const tag = targetElemt.tagName;\r\n const { attributes } = targetElemt;\r\n addAllXPathAttributes(Array.from(attributes), targetElemt, docmt, isIndex, isTarget);\r\n if (!referenceElementMode) {\r\n if (xpathData.length) {\r\n const len = xpathData.length;\r\n for (let i = 0; i < len; i++) {\r\n let xpth = xpathData[i].value;\r\n xpth = \"//*\" + xpth.substring(\r\n xpth.indexOf(\"//\") + 2 + tag.length\r\n );\r\n const count = getCountOfXPath(xpth, element, docmt);\r\n if (count === 1) {\r\n xpathData.push({\r\n key: `${xpathData[i].key} regex`,\r\n value: xpth,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n console.log(xpathData);\r\n if (!xpathData.length) {\r\n addRelativeXpaths(\r\n targetElemt,\r\n docmt,\r\n isIndex,\r\n isTarget,\r\n Array.from(targetElemt.attributes)\r\n );\r\n }\r\n\r\n return xpathData;\r\n};\r\n\r\nconst xpath = {\r\n parseDOM,\r\n getTextXPath,\r\n getUniqueClassName,\r\n attributesBasedXPath,\r\n addAllXPathAttributes,\r\n addRelativeXpaths,\r\n getXPathUsingAttributeAndText,\r\n getSiblingRelativeXPath,\r\n getChildRelativeXpath,\r\n getParentRelativeXpath,\r\n getUniqueParentXpath,\r\n checkRelativeXpathRelation,\r\n};\r\n\r\nexport default xpath;\r\n","import { parseDOM } from \"./xpath.ts\";\r\nimport {\r\n findXpathWithIndex,\r\n getShadowRoot,\r\n getTextContent,\r\n escapeCharacters,\r\n getCountOfXPath,\r\n checkBlockedAttributes,\r\n getAbsoluteXPath,\r\n isSvg,\r\n getCombinationXpath,\r\n getTextXpathFunction,\r\n replaceTempAttributes,\r\n replaceActualAttributes,\r\n getReferenceElementsXpath,\r\n getRelativeXPath,\r\n findMatchingParenthesis,\r\n removeParenthesis\r\n} from \"./xpathHelpers.ts\";\r\n\r\nlet xpathDataWithIndex: any[] = [];\r\nlet xpathData: { key: string; value: string }[] = [];\r\nconst reWhiteSpace = /^[\\S]+( [\\S]+)*$/gi;\r\n\r\nexport const findRelativeXpath = (\r\n element1: HTMLElement | Element,\r\n element2: HTMLElement | Element,\r\n docmt: Document,\r\n xpaths1: any[],\r\n xpaths2: any[],\r\n isIndex: boolean,\r\n multiElementReferenceMode: boolean = false\r\n) => {\r\n // debugger;\r\n const par1 = element1.parentElement;\r\n const par2 = element2.parentElement;\r\n let rel_xpath: any[] = [];\r\n\r\n let tempElement;\r\n let finalXpaths: any[] = [];\r\n\r\n if (isIndex) {\r\n if (xpathDataWithIndex.length) {\r\n const xpathWithIndex = findXpathWithIndex(\r\n xpathDataWithIndex[0].value,\r\n element2,\r\n element2.ownerDocument,\r\n xpathDataWithIndex[0].count\r\n );\r\n if (xpathWithIndex) {\r\n finalXpaths = finalXpaths.concat({\r\n key: `${xpathDataWithIndex[0]?.key\r\n ? xpathDataWithIndex[0]?.key\r\n : \"xpath with \"\r\n } index`,\r\n value: xpathWithIndex,\r\n });\r\n xpathDataWithIndex.pop();\r\n }\r\n }\r\n }\r\n\r\n if (!finalXpaths.length) {\r\n // both are same\r\n if (element1.isSameNode(element2)) {\r\n // rel_xpath = xpath1 + \"/self::\" + element1.tagName;\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"self\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) finalXpaths = finalXpaths.concat(rel_xpath);\r\n }\r\n\r\n // parent\r\n tempElement = element1.parentElement;\r\n\r\n if (tempElement === element2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"parent\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) finalXpaths = finalXpaths.concat(rel_xpath);\r\n }\r\n\r\n // ancestor\r\n tempElement = element1.parentElement;\r\n\r\n while (tempElement !== null) {\r\n if (tempElement === element2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"ancestor\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n\r\n tempElement = tempElement.parentNode;\r\n }\r\n\r\n // ancestor-or-self\r\n tempElement = element1;\r\n do {\r\n if (tempElement === element2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"ancestor-or-self\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n\r\n tempElement = tempElement.parentNode;\r\n } while (tempElement !== null);\r\n\r\n // both has same parent\r\n if (par1?.isSameNode(par2)) {\r\n for (\r\n let m = element1.nextElementSibling;\r\n m != null;\r\n m = m.nextElementSibling\r\n ) {\r\n if (m != null && m.isSameNode(element2)) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"following-sibling\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n for (\r\n let n = element1.previousElementSibling;\r\n n != null;\r\n n = n.previousElementSibling\r\n ) {\r\n if (n != null && n.isSameNode(element2)) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"preceding-sibling\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // child\r\n if (element1?.children?.length) {\r\n for (let m = element1.children[0]; m !== null; m = m?.nextElementSibling!) {\r\n if (m === element2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"child\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // following\r\n const relation = element1.compareDocumentPosition(element2);\r\n if (relation === 2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"preceding\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n }\r\n\r\n if (relation === 4) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"following\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n }\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n }\r\n\r\n const descendantXpath = getDescendantXpath(\r\n [element1, element2],\r\n docmt,\r\n xpaths1,\r\n xpaths2,\r\n \"descendant\",\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (descendantXpath) finalXpaths = finalXpaths.concat(descendantXpath);\r\n\r\n const descendantSelfXpath = getDescendantXpath(\r\n [element1, element2],\r\n docmt,\r\n xpaths1,\r\n xpaths2,\r\n \"descedant-or-self\",\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (descendantSelfXpath) {\r\n finalXpaths = finalXpaths.concat(descendantSelfXpath);\r\n }\r\n }\r\n\r\n if (finalXpaths.length) {\r\n if (finalXpaths.length > 1) {\r\n finalXpaths.sort(function (a, b) {\r\n return a.value.length - b.value.length;\r\n });\r\n }\r\n\r\n if (finalXpaths.filter((x) => !x.key?.includes(\"index\"))?.length) {\r\n return [finalXpaths.filter((x) => !x.key?.includes(\"index\"))[0]];\r\n }\r\n return [finalXpaths[0]];\r\n }\r\n};\r\n\r\nconst descendantExpression = (\r\n refExpectElement: Array<HTMLElement | Element>,\r\n xpath2: string,\r\n relation: string,\r\n docmt: Node,\r\n isIndex: any,\r\n expCommonParentXpathElements: string | any[],\r\n step4: string,\r\n refCommonParentXpathElementLength: number = 0,\r\n multiElementReferenceMode: boolean = false\r\n) => {\r\n let finalExpectedElementXpath: string | undefined = \"\";\r\n\r\n if (\r\n xpath2.split(/\\/(?=(?:[^']*\\'[^\\']*\\')*[^\\']*$)/g)?.length >=\r\n expCommonParentXpathElements.length\r\n ) {\r\n const xpaths2Els: string[] = [];\r\n const xpath2Elements = xpath2.split(/\\/(?=(?:[^']*\\'[^\\']*\\')*[^\\']*$)/g);\r\n for (let x = 1; x <= expCommonParentXpathElements.length; x++) {\r\n xpaths2Els.unshift(\r\n x === expCommonParentXpathElements.length\r\n ? expCommonParentXpathElements[\r\n expCommonParentXpathElements.length - x\r\n ]\r\n : xpath2Elements[xpath2Elements.length - x]\r\n );\r\n }\r\n const traverseXpath = getTraverseXpathExpression(\r\n `${step4 +\r\n (refCommonParentXpathElementLength\r\n ? \"]\".repeat(refCommonParentXpathElementLength)\r\n : \"\")\r\n }`,\r\n xpaths2Els,\r\n refExpectElement[refExpectElement.length - 1],\r\n refExpectElement,\r\n docmt,\r\n relation,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (traverseXpath) {\r\n return traverseXpath;\r\n }\r\n } else {\r\n finalExpectedElementXpath = `//${step4 +\r\n (refCommonParentXpathElementLength\r\n ? \"]\".repeat(refCommonParentXpathElementLength)\r\n : \"\")\r\n }/${relation}::${replaceActualAttributes(\r\n xpath2,\r\n refExpectElement[refExpectElement.length - 1]\r\n )}`;\r\n let rel_count = getCountOfXPath(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt\r\n );\r\n if (rel_count === 1) {\r\n return [\r\n {\r\n key: `dynamic ${relation}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n if (rel_count > 1) {\r\n if (isIndex) {\r\n finalExpectedElementXpath = findXpathWithIndex(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt,\r\n rel_count\r\n );\r\n if (finalExpectedElementXpath) {\r\n rel_count = getCountOfXPath(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt\r\n );\r\n if (rel_count === 1) {\r\n return [\r\n {\r\n key: `dynamic ${relation} ${isIndex ? \" index\" : \"\"}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst getDescendantXpath = (\r\n refExpectElement: Array<HTMLElement | Element>,\r\n docmt: Document,\r\n xpaths1: { key: string; value: string }[],\r\n xpaths2: { key: string; value: string }[],\r\n relation: \"descendant\" | \"descedant-or-self\",\r\n isIndex: boolean = false,\r\n multiElementReferenceMode: boolean = false\r\n) => {\r\n const refElement: HTMLElement | Element = refExpectElement[refExpectElement.length - 2];\r\n const expElement: HTMLElement | Element = refExpectElement[refExpectElement.length - 1];\r\n const expElementDocmnt = getShadowRoot(expElement) ?? expElement.ownerDocument;\r\n\r\n const refAbsoluteXpath =\r\n xpaths1.find((x) => x?.key?.includes(\"absolute\"))?.value ||\r\n getAbsoluteXPath(refElement, refElement.ownerDocument);\r\n\r\n const refFullXpathElements: any[] = [];\r\n const refFullXpathElementsWithoutNumber: any[] = [];\r\n refAbsoluteXpath.split(\"/\").map((x) => refFullXpathElements.push(x));\r\n refFullXpathElements.map((x) =>\r\n refFullXpathElementsWithoutNumber.push(x.replace(/\\[([0-9]+)\\]/gm, \"\"))\r\n );\r\n\r\n const expAbsoluteXpath =\r\n xpaths2.find((x) => x?.key?.includes(\"absolute\"))?.value ||\r\n getAbsoluteXPath(expElement, expElement.ownerDocument);\r\n\r\n const expFullXpathElements: any[] = [];\r\n const expFullXpathElementsWithoutNumber: any[] = [];\r\n expAbsoluteXpath.split(\"/\").map((x) => expFullXpathElements.push(x));\r\n expFullXpathElements.map((x) =>\r\n expFullXpathElementsWithoutNumber.push(x.replace(/\\[([0-9]+)\\]/gm, \"\"))\r\n );\r\n\r\n for (\r\n var parentElementNumber = 0;\r\n parentElementNumber < refFullXpathElements.length;\r\n parentElementNumber++\r\n ) {\r\n if (\r\n refFullXpathElements[parentElementNumber] !=\r\n expFullXpathElements[parentElementNumber]\r\n ) {\r\n break;\r\n }\r\n }\r\n\r\n const refCommonParentXpathElements = [];\r\n for (let i = parentElementNumber - 1; i < refFullXpathElements.length; i++) {\r\n if (refFullXpathElements[i]) {\r\n refCommonParentXpathElements.push(refFullXpathElementsWithoutNumber[i]);\r\n }\r\n }\r\n\r\n const expCommonParentXpathElements: string[] = [];\r\n for (\r\n let j =\r\n relation === \"descendant\" ? parentElementNumber : parentElementNumber - 1;\r\n j < expFullXpathElements.length;\r\n j++\r\n ) {\r\n if (expFullXpathElements[j]) {\r\n if (expCommonParentXpathElements.length)\r\n expCommonParentXpathElements.push(expFullXpathElementsWithoutNumber[j]);\r\n else\r\n expCommonParentXpathElements.push(\r\n expFullXpathElementsWithoutNumber[j].replace(/\\[([0-9]+)\\]/gm, \"\")\r\n );\r\n }\r\n }\r\n\r\n xpathData = xpaths2;\r\n\r\n let nodeXpath2;\r\n if (refExpectElement[refExpectElement.length - 2].textContent) {\r\n if (\r\n !reWhiteSpace.test(\r\n refExpectElement[refExpectElement.length - 2].textContent\r\n )\r\n ) {\r\n nodeXpath2 = isSvg(refExpectElement[refExpectElement.length - 2])\r\n ? `*[local-name()='${refExpectElement[refExpectElement.length - 2].tagName\r\n }' and ${getTextXpathFunction(\r\n refExpectElement[refExpectElement.length - 2]\r\n )})]`\r\n : `${refExpectElement[refExpectElement.length - 2].tagName\r\n }[${getTextXpathFunction(\r\n refExpectElement[refExpectElement.length - 2]\r\n )}]`;\r\n } else {\r\n nodeXpath2 = isSvg(refExpectElement[refExpectElement.length - 2])\r\n ? `*[local-name()='${refExpectElement[refExpectElement.length - 2].tagName\r\n }' and .=${escapeCharacters(\r\n getTextContent(refExpectElement[refExpectElement.length - 2])\r\n )}]`\r\n : `${refExpectElement[refExpectElement.length - 2].tagName\r\n }[.=${escapeCharacters(\r\n getTextContent(refExpectElement[refExpectElement.length - 2])\r\n )}]`;\r\n }\r\n\r\n refCommonParentXpathElements[refCommonParentXpathElements.length - 1] =\r\n nodeXpath2;\r\n\r\n const refCommonParentXpath = refCommonParentXpathElements.join(\"[\");\r\n const refCommonParentXpathElementLength =\r\n refCommonParentXpathElements.length - 1;\r\n\r\n const step4 = refCommonParentXpath;\r\n\r\n for (let i = 0; i < xpathData.length; i++) {\r\n let xpath2;\r\n\r\n if (xpathData[i].value.startsWith(\"//\")) {\r\n xpath2 = xpathData[i].value.substring(\r\n xpathData[i].value.indexOf(\"//\") + 2\r\n );\r\n } else {\r\n xpath2 = xpathData[i].value; // No need to modify the value\r\n }\r\n if (xpath2) {\r\n return descendantExpression(\r\n refExpectElement,\r\n xpath2,\r\n relation,\r\n expElementDocmnt || docmt,\r\n isIndex,\r\n expCommonParentXpathElements,\r\n step4,\r\n refCommonParentXpathElementLength,\r\n multiElementReferenceMode\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (refExpectElement[refExpectElement.length - 2].attributes) {\r\n for (const attrName of Array.from(refExpectElement[refExpectElement.length - 2]\r\n .attributes)) {\r\n if (\r\n checkBlockedAttributes(attrName, refExpectElement[refExpectElement.length - 2], false)\r\n ) {\r\n let attrValue = attrName.nodeValue;\r\n if (attrValue) {\r\n attrValue = attrValue.replace(\"removePointers\", \"\");\r\n const elementName = attrName.name;\r\n\r\n nodeXpath2 = isSvg(refExpectElement[refExpectElement.length - 2])\r\n ? `*[local-name()='${refExpectElement[refExpectElement.length - 2].tagName\r\n }' and @${elementName}=${escapeCharacters(attrValue)}]`\r\n : `${refExpectElement[refExpectElement.length - 2].tagName\r\n }[@${elementName}=${escapeCharacters(attrValue)}]`;\r\n\r\n refCommonParentXpathElements[\r\n refCommonParentXpathElements.length - 1\r\n ] = nodeXpath2;\r\n\r\n const refCommonParentXpath = refCommonParentXpathElements.join(\"[\");\r\n const refCommonParentXpathElementLength =\r\n refCommonParentXpathElements.length - 1;\r\n\r\n const step4 = refCommonParentXpath;\r\n\r\n for (let i = 0; i < xpathData.length; i++) {\r\n let xpath2;\r\n if (xpathData[i].value.startsWith(\"//\")) {\r\n xpath2 = xpathData[i].value.substring(\r\n xpathData[i].value.indexOf(\"//\") + 2\r\n );\r\n } else {\r\n xpath2 = xpathData[i].value; // No need to modify the value\r\n }\r\n\r\n return descendantExpression(\r\n refExpectElement,\r\n xpath2,\r\n relation,\r\n expElementDocmnt || docmt,\r\n isIndex,\r\n expCommonParentXpathElements,\r\n step4,\r\n refCommonParentXpathElementLength,\r\n multiElementReferenceMode\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const attrName of Array.from(refExpectElement[refExpectElement.length - 2]\r\n .attributes)) {\r\n if (\r\n checkBlockedAttributes(attrName, refExpectElement[refExpectElement.length - 2], false)\r\n ) {\r\n let attrValue = attrName.nodeValue;\r\n if (attrValue) {\r\n attrValue = attrValue.replace(\"removePointers\", \"\");\r\n const combinationXpath = getCombinationXpath(\r\n attrName,\r\n refExpectElement[refExpectElement.length - 2]\r\n );\r\n if (combinationXpath) {\r\n if (combinationXpath.startsWith(\"//\")) {\r\n nodeXpath2 = combinationXpath.substring(\r\n combinationXpath.indexOf(\"//\") + 2\r\n );\r\n } else {\r\n nodeXpath2 = combinationXpath; // No need to modify the value\r\n }\r\n\r\n refCommonParentXpathElements[\r\n refCommonParentXpathElements.length - 1\r\n ] = nodeXpath2;\r\n\r\n const refCommonParentXpath = refCommonParentXpathElements.join(\"[\");\r\n const refCommonParentXpathElementLength =\r\n refCommonParentXpathElements.length - 1;\r\n\r\n const step4 = refCommonParentXpath;\r\n\r\n for (let i = 0; i < xpathData.length; i++) {\r\n let xpath2;\r\n if (xpathData[i].value.startsWith(\"//\")) {\r\n xpath2 = xpathData[i].value.substring(\r\n xpathData[i].value.indexOf(\"//\") + 2\r\n );\r\n } else {\r\n xpath2 = xpathData[i].value; // No need to modify the value\r\n }\r\n\r\n return descendantExpression(\r\n refExpectElement,\r\n xpath2,\r\n relation,\r\n expElementDocmnt || docmt,\r\n isIndex,\r\n expCommonParentXpathElements,\r\n step4,\r\n refCommonParentXpathElementLength,\r\n multiElementReferenceMode\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const refCommonParentXpath = refCommonParentXpathElements.join(\"[\");\r\n const refCommonParentXpathElementLength =\r\n refCommonParentXpathElements.length - 1;\r\n const step4 = refCommonParentXpath;\r\n const traverseXpath = getTraverseXpathExpression(\r\n `${step4 +\r\n (refCommonParentXpathElementLength\r\n ? \"]\".repeat(refCommonParentXpathElementLength)\r\n : \"\")\r\n }`,\r\n expCommonParentXpathElements,\r\n refExpectElement[refExpectElement.length - 1],\r\n refExpectElement,\r\n docmt,\r\n relation,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (traverseXpath) {\r\n return traverseXpath;\r\n }\r\n};\r\n\r\nconst getXpathRelationExpression = (\r\n element1: HTMLElement | Element,\r\n element2: HTMLElement | Element,\r\n relation: string,\r\n xpath1: any[],\r\n xpath2: any[],\r\n isIndex: boolean,\r\n multiElementReferenceMode: boolean\r\n) => {\r\n let xpaths1;\r\n let xpaths2;\r\n console.log('getXpathRelationExpression', relation)\r\n const finalXpaths: { key: string; value: any }[] = [];\r\n\r\n try {\r\n xpaths1 = xpath1.filter((x) => !x?.key?.includes(\"absolute\"));\r\n\r\n xpaths2 = xpath2.filter((x) => !x?.key?.includes(\"absolute\"));\r\n\r\n for (let i = 0; i < xpaths1.length; i++) {\r\n for (let j = 0; j < xpaths2.length; j++) {\r\n let rel_xpath: string | undefined = `//${xpaths1[i].value.indexOf(\"//\") !== 0\r\n ? replaceActualAttributes(xpaths1[i].value, element1)\r\n : replaceActualAttributes(\r\n xpaths1[i].value.substring(xpaths1[i].value.indexOf(\"//\") + 2),\r\n element1\r\n )\r\n }/${relation}::${xpaths2[j].value.indexOf(\"//\") !== 0\r\n ? replaceActualAttributes(xpaths2[j].value, element2)\r\n : replaceActualAttributes(\r\n xpaths2[j].value.substring(xpaths2[j].value.indexOf(\"//\") + 2),\r\n element2\r\n )\r\n }`;\r\n console.log('getXpathRelationExpression', rel_xpath)\r\n const rel_count = getCountOfXPath(\r\n rel_xpath,\r\n element2,\r\n element2.ownerDocument\r\n );\r\n if (rel_count > 1) {\r\n if (isIndex) {\r\n rel_xpath = findXpathWithIndex(\r\n rel_xpath,\r\n element2,\r\n element2.ownerDocument,\r\n rel_count\r\n );\r\n if (rel_xpath) {\r\n finalXpaths.push({\r\n key: `dynamic ${relation}${isIndex ? \" index\" : \"\"}`,\r\n value: replaceTempAttributes(rel_xpath),\r\n });\r\n return finalXpaths;\r\n }\r\n } else if (rel_count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (rel_count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative child ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: rel_xpath,\r\n count: rel_count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative child ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: rel_xpath,\r\n count: rel_count,\r\n });\r\n }\r\n }\r\n } else if (rel_count === 1) {\r\n finalXpaths.push({\r\n key: `dynamic ${relation}`,\r\n value: replaceTempAttributes(rel_xpath),\r\n });\r\n return finalXpaths;\r\n }\r\n }\r\n }\r\n if (!finalXpaths.length) {\r\n for (let i = 0; i < xpaths1.length; i++) {\r\n for (let j = 0; j < xpaths2.length; j++) {\r\n const tempPath = `${xpaths2[j].value.indexOf(\"//\") !== 0\r\n ? xpaths2[j].value\r\n : xpaths2[j].value.substring(xpaths2[j].value.indexOf(\"//\") + 2)\r\n }`;\r\n const xpath2Elements: string[] = tempPath.split(\r\n /\\/(?=(?:[^']*\\'[^\\']*\\')*[^\\']*$)/g\r\n );\r\n if (xpath2Elements.length > 1) {\r\n const traverseXpath = getTraverseXpathExpression(\r\n `${xpaths1[i].value.indexOf(\"//\") !== 0\r\n ? replaceActualAttributes(xpaths1[i].value, element1)\r\n : replaceActualAttributes(\r\n xpaths1[i].value.substring(\r\n xpaths1[i].value.indexOf(\"//\") + 2\r\n ),\r\n element1\r\n )\r\n }`,\r\n xpath2Elements,\r\n element2,\r\n [element1, element2],\r\n element2.ownerDocument,\r\n relation,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n\r\n console.log('getXpathRelationExpression traverseXpath', traverseXpath)\r\n if (traverseXpath) {\r\n finalXpaths.concat(traverseXpath);\r\n return finalXpaths;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n return finalXpaths;\r\n};\r\n\r\nconst getReferenceElementXpath = (element: HTMLElement | Element) => {\r\n let xpaths1: {\r\n key: string;\r\n value: string;\r\n }[] = [];\r\n\r\n xpaths1 = parseDOM(element, element.ownerDocument, false, false);\r\n\r\n if (!xpaths1?.length) {\r\n xpaths1 = parseDOM(element, element.ownerDocument, true, false);\r\n xpaths1 = xpaths1?.map((x) =>\r\n x.value.charAt(0) == \"(\" &&\r\n findMatchingParenthesis(x.value, 0) + 1 === x.value.lastIndexOf(\"[\")\r\n ? { key: \"\", value: removeParenthesis(x.value) }\r\n : { key: \"\", value: x.value }\r\n );\r\n } else {\r\n let xpaths = parseDOM(element, element.ownerDocument, true, false);\r\n if (xpaths?.length) {\r\n xpaths = xpaths?.map((x) =>\r\n x.value.charAt(0) == \"(\" &&\r\n findMatchingParenthesis(x.value, 0) + 1 === x.value.lastIndexOf(\"[\")\r\n ? { key: \"\", value: removeParenthesis(x.value) }\r\n : { key: \"\", value: x.value }\r\n );\r\n xpaths1 = xpaths1.concat(xpaths);\r\n }\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n xpaths1 = [\r\n {\r\n key: \"\",\r\n value: getRelativeXPath(element, element.ownerDocument, false, false, Array.from(element.attributes)),\r\n },\r\n ];\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n xpaths1 = [\r\n {\r\n key: \"\",\r\n value: getRelativeXPath(element, element.ownerDocument, true, false, Array.from(element.attributes)),\r\n },\r\n ];\r\n xpaths1 = xpaths1?.map((x) =>\r\n x.value.charAt(0) == \"(\" &&\r\n findMatchingParenthesis(x.value, 0) + 1 === x.value.lastIndexOf(\"[\")\r\n ? { key: \"\", value: removeParenthesis(x.value) }\r\n : { key: \"\", value: x.value }\r\n );\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n xpaths1 = getReferenceElementsXpath(element, element.ownerDocument, false);\r\n } else {\r\n const xpaths = getReferenceElementsXpath(\r\n element,\r\n element.ownerDocument,\r\n false\r\n );\r\n if (xpaths?.length) {\r\n xpaths1 = xpaths1.concat(xpaths);\r\n }\r\n }\r\n\r\n const referenceXpathElement = getAbsoluteXPath(\r\n element,\r\n element.ownerDocument\r\n );\r\n xpaths1 = xpaths1.filter((x) => x.value !== referenceXpathElement);\r\n\r\n xpaths1.push({\r\n key: \"absolute xpath\",\r\n value: referenceXpathElement.slice(1),\r\n });\r\n\r\n return xpaths1;\r\n};\r\n\r\nconst getTraverseXpathExpression = (\r\n xpathe1: string,\r\n absoluteXpathElements: string[],\r\n element2: HTMLElement | Element,\r\n refExpectElement: Array<HTMLElement | Element>,\r\n docmt: Node,\r\n relation: string,\r\n isIndex: boolean,\r\n multiElementReferenceMode: boolean\r\n) => {\r\n let finalExpectedElementXpath: string | undefined;\r\n if (!multiElementReferenceMode) {\r\n for (let x = 1; x <= absoluteXpathElements.length; x++) {\r\n const xpath2 = absoluteXpathElements\r\n .slice(absoluteXpathElements.length - x, absoluteXpathElements.length)\r\n .join(\"/\");\r\n finalExpectedElementXpath = `//${xpathe1}/${relation}::${replaceActualAttributes(\r\n xpath2,\r\n element2\r\n )}`;\r\n const rel_count = getCountOfXPath(\r\n finalExpectedElementXpath,\r\n element2,\r\n docmt\r\n );\r\n if (rel_count === 1) {\r\n return [\r\n {\r\n key: `dynamic ${relation}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n if (rel_count > 1) {\r\n if (isIndex) {\r\n finalExpectedElementXpath = findXpathWithIndex(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt,\r\n rel_count\r\n );\r\n if (finalExpectedElementXpath) {\r\n return [\r\n {\r\n key: `dynamic ${relation}${isIndex ? \" index\" : \"\"}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const xpath2 = absoluteXpathElements.join(\"/\");\r\n finalExpectedElementXpath = `//${xpathe1}/${relation}::${replaceActualAttributes(\r\n xpath2,\r\n element2\r\n )}`;\r\n const rel_count = getCountOfXPath(\r\n finalExpectedElementXpath,\r\n element2,\r\n docmt\r\n );\r\n if (rel_count === 1) {\r\n return [\r\n {\r\n key: `dynamic ${relation}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n if (rel_count > 1) {\r\n if (isIndex) {\r\n finalExpectedElementXpath = findXpathWithIndex(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt,\r\n rel_count\r\n );\r\n if (finalExpectedElementXpath) {\r\n return [\r\n {\r\n key: `dynamic ${relation}${isIndex ? \" index\" : \"\"}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst referenceXpath = {\r\n findRelativeXpath,\r\n getDescendantXpath,\r\n getXpathRelationExpression,\r\n getTraverseXpathExpression,\r\n getReferenceElementXpath,\r\n};\r\n\r\nexport default referenceXpath;\r\n","import { ElementRecord, Locator } from \"../types/locator.ts\";\r\nimport { parseDOM } from \"./xpath.ts\";\r\nimport { isSvg, normalizeXPath } from \"./xpathHelpers.ts\";\r\n\r\ntype ElementDetails = {\r\n id?: string | null;\r\n className?: string | null;\r\n xpathByText?: string | null;\r\n xpathById?: string | null;\r\n xpathByClass?: string | null;\r\n xpathAbsolute?: string | null;\r\n xpathByName?: string | null;\r\n xpathByPlaceholder?: string | null;\r\n xpathByType?: string | null;\r\n visibleText?: string | null;\r\n relativeXpath?: string | null;\r\n [key: string]: any;\r\n};\r\n\r\nconst getElementFromShadowRoot = (\r\n element: Element,\r\n selector: string\r\n): Element | null => {\r\n const shadowRoot = (element as HTMLElement).shadowRoot;\r\n if (shadowRoot && !selector.includes(\"dynamic\")) {\r\n return shadowRoot.querySelector(selector);\r\n }\r\n return null;\r\n};\r\n\r\nconst getId = (element: Element | null): string | null => {\r\n return element?.id || null;\r\n};\r\n\r\nconst getClassName = (element: Element): string | null => {\r\n return (element as HTMLElement).className || null;\r\n};\r\n\r\nconst getVisibleText = (element: Element): string | null => {\r\n return element.textContent?.trim() || null;\r\n};\r\n\r\nconst getName = (element: Element): string | null => {\r\n const elementEl = element as HTMLElement;\r\n\r\n if (elementEl.hasAttribute(\"name\")) {\r\n const attrValue = elementEl.getAttribute(\"name\");\r\n const name = `${attrValue}`;\r\n return name || null;\r\n }\r\n return null;\r\n};\r\n\r\nconst relations: string[] = [\r\n \"/preceding-sibling\",\r\n \"/following-sibling\",\r\n \"/parent\",\r\n \"/descendant\",\r\n \"/ancestor\",\r\n \"/self\",\r\n \"/ancestor-or-self\",\r\n \"/child\",\r\n \"/preceding\",\r\n \"/following\",\r\n];\r\n\r\nfunction getElementFromXPath(\r\n tempDiv: HTMLElement,\r\n xpath: string\r\n): Element | null {\r\n let currentElement: Element | null = tempDiv;\r\n const window = currentElement.ownerDocument.defaultView;\r\n if (!window) return null;\r\n\r\n const xpathEvaluator = new window.XPathEvaluator();\r\n const xpathResult = xpathEvaluator.evaluate(\r\n xpath,\r\n currentElement.ownerDocument, //here even tempDiv can be passed\r\n null,\r\n window.XPathResult.FIRST_ORDERED_NODE_TYPE,\r\n null\r\n );\r\n return xpathResult.singleNodeValue as Element | null;\r\n}\r\n\r\nfunction checkReferenceElementIsValid(\r\n locator: string,\r\n relation: string,\r\n tempDiv: HTMLElement\r\n): string | null {\r\n if (locator.includes(relation)) {\r\n const locatotSplitArray: string[] = locator.split(relation);\r\n const sourceLoc = locatotSplitArray[0].trim();\r\n let currentElement: Element | null = tempDiv;\r\n const window = currentElement.ownerDocument.defaultView;\r\n if (!window) return null;\r\n if (!locator.includes(\"dynamic\")) {\r\n const xpathEvaluator = new window.XPathEvaluator();\r\n const xpathResult = xpathEvaluator.evaluate(\r\n sourceLoc,\r\n currentElement.ownerDocument,\r\n null,\r\n window.XPathResult.FIRST_ORDERED_NODE_TYPE,\r\n null\r\n );\r\n\r\n const sourceElement = xpathResult.singleNodeValue;\r\n if (sourceElement) {\r\n const xpathResultComplete = xpathEvaluator.evaluate(\r\n locator,\r\n currentElement.ownerDocument,\r\n null,\r\n window.XPathResult.FIRST_ORDERED_NODE_TYPE,\r\n null\r\n );\r\n const completeElement = xpathResultComplete.singleNodeValue;\r\n let relativeXpath: string;\r\n if (completeElement) {\r\n relativeXpath = locator;\r\n return relativeXpath;\r\n } else {\r\n console.error(\"Complete Locator is Invalid:\", locator);\r\n relativeXpath = locator;\r\n return relativeXpath;\r\n }\r\n } else {\r\n console.error(\"Source Locator Not Found:\", sourceLoc);\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nconst getElementsFromHTML = (\r\n record: ElementRecord,\r\n docmt: Document\r\n): ElementDetails | null => {\r\n const document = docmt;\r\n // global.SVGElement = document.defaultView?.SVGElement!;\r\n const tempDiv = document.createElement(\"div\");\r\n const elementsToRemove = document.querySelectorAll(\r\n \"script, style, link[rel='stylesheet'], meta, noscript, embed, object, param, source, svg\"\r\n );\r\n\r\n if (elementsToRemove) {\r\n elementsToRemove.forEach((tag) => {\r\n (tag as Element).remove();\r\n });\r\n }\r\n\r\n tempDiv.innerHTML = document.body.innerHTML;\r\n const finalLocatorsSet: Set<string> = new Set();\r\n let finalLocators: any[] = [];\r\n\r\n function createLocator(base: any, overrides: Partial<any> = {}) {\r\n const newLocator: any = {\r\n name: overrides.name ?? base?.name,\r\n type: overrides.type ?? base?.type,\r\n value: overrides.value ?? base?.value,\r\n reference: overrides.reference ?? base?.reference,\r\n status: overrides.status ?? base?.status,\r\n isRecorded: overrides.isRecorded ?? base?.isRecorded,\r\n };\r\n\r\n if (overrides.hasOwnProperty(\"isSelfHealed\")) {\r\n newLocator.isSelfHealed = overrides.isSelfHealed;\r\n } else if (base?.hasOwnProperty(\"isSelfHealed\")) {\r\n newLocator.isSelfHealed = base.isSelfHealed;\r\n }\r\n\r\n pushUniqueLocator(newLocator);\r\n }\r\n\r\n function pushUniqueLocator(obj: any) {\r\n const key = `${obj.name}:${obj.value}`;\r\n if (!finalLocatorsSet.has(key)) {\r\n finalLocatorsSet.add(key);\r\n finalLocators.push(obj);\r\n }\r\n }\r\n\r\n /** Locator Value Cleaner (Handles Special Scenarios) **/\r\n const cleanLocatorValue = (\r\n val: string | null | undefined,\r\n type?: string,\r\n isRecorded?: string\r\n ): string | null => {\r\n if (!val) return null;\r\n\r\n let cleaned = val.trim();\r\n\r\n // Return null for empty or literal \"null\"\r\n if (!cleaned || cleaned.toLowerCase() === \"null\") return null;\r\n\r\n // Unescape any escaped quotes\r\n cleaned = cleaned.replace(/\\\\\"/g, '\"').replace(/\\\\'/g, \"'\");\r\n\r\n // Remove surrounding single or double quotes\r\n cleaned = cleaned.replace(/^['\"](.+?)['\"]$/, \"$1\");\r\n\r\n // Replace double single quotes with a single quote inside XPath\r\n cleaned = cleaned.replace(/''/g, \"'\");\r\n\r\n // Normalize double quotes in XPath attribute selectors [@id=\"\" -> [@id='']\r\n cleaned = cleaned.replace(\r\n /\\[@(id|name)=['\"]{2}(.+?)['\"]{2}\\]/g,\r\n \"[@$1='$2']\"\r\n );\r\n\r\n // For DOM selectors (id or name), remove ALL quotes\r\n if (type === \"id\" || type === \"name\") {\r\n cleaned = cleaned.replace(/['\"]/g, \"\").trim();\r\n }\r\n\r\n if (type === \"xpath\" && isRecorded === \"Y\" && !val.startsWith(\"//\"))\r\n return null;\r\n\r\n // Final check for empty strings\r\n if (!cleaned || /^['\"]{2}$/.test(cleaned)) return null;\r\n\r\n return cleaned;\r\n };\r\n\r\n locators: for (const locator of record.locators) {\r\n try {\r\n const isRecorded = String(locator.isRecorded || \"\");\r\n const recordedNLocators = record.locators.filter((l) => l.isRecorded === \"N\");\r\n\r\n if (recordedNLocators.length > 0) {\r\n for (const locator of recordedNLocators) {\r\n createLocator(locator);\r\n }\r\n }\r\n\r\n const isDynamic = String(locator.value || locator.type || \"\");\r\n if (\r\n isDynamic.includes(\"dynamic\") ||\r\n isDynamic.match(\"dynamic\") ||\r\n isDynamic.includes(\"{\") ||\r\n isDynamic.includes(\"}\")\r\n ) {\r\n createLocator(locator);\r\n continue;\r\n }\r\n\r\n if (record.isShared.includes(\"Y\")) {\r\n break locators;\r\n }\r\n\r\n for (const relation of relations) {\r\n try {\r\n let targetElement: Element | null = null;\r\n if (locator.value.startsWith(\"iframe\")) {\r\n const iframe = tempDiv.querySelector(\r\n locator.value\r\n ) as HTMLIFrameElement;\r\n if (iframe) {\r\n const iframeDocument =\r\n iframe.contentDocument || iframe.contentWindow?.document;\r\n if (iframeDocument) {\r\n targetElement = iframeDocument.querySelector(\r\n locator.value.slice(6)\r\n );\r\n }\r\n }\r\n } else {\r\n const selectors = locator.value.split(\">>>\"); // Custom delimiter for shadow DOM\r\n let currentElement: Element | null = tempDiv;\r\n\r\n for (const selector of selectors) {\r\n if (currentElement) {\r\n const trimmedSelector = selector.trim();\r\n if (\r\n locator.name.includes(\"id\") ||\r\n trimmedSelector.startsWith(\"#\")\r\n ) {\r\n targetElement = currentElement.querySelector(\r\n \"#\" + trimmedSelector\r\n );\r\n } else if (\r\n locator.name.includes(\"className\") ||\r\n trimmedSelector.startsWith(\".\")\r\n ) {\r\n targetElement = currentElement.querySelector(\r\n \".\" + trimmedSelector\r\n );\r\n } else if (\r\n (locator.name.includes(\"xpath\") ||\r\n trimmedSelector.startsWith(\"//\")) &&\r\n !locator.type.match(\"dynamic\")\r\n ) {\r\n if (tempDiv.innerHTML) {\r\n const normalizedXPath = normalizeXPath(trimmedSelector);\r\n targetElement = getElementFromXPath(\r\n tempDiv,\r\n normalizedXPath\r\n );\r\n if (targetElement) {\r\n createLocator(locator, {\r\n value: trimmedSelector,\r\n isRecorded: String(locator.isRecorded).includes(\"N\")\r\n ? \"N\"\r\n : \"Y\",\r\n });\r\n }\r\n }\r\n } else {\r\n targetElement = currentElement.querySelector(trimmedSelector);\r\n if (!targetElement) {\r\n targetElement = getElementFromShadowRoot(\r\n currentElement,\r\n trimmedSelector\r\n );\r\n }\r\n }\r\n\r\n if (\r\n !targetElement &&\r\n isSvg(currentElement) &&\r\n !locator.type.match(\"dynamic\")\r\n ) {\r\n targetElement = currentElement.querySelector(trimmedSelector);\r\n }\r\n currentElement = targetElement;\r\n } else {\r\n console.error(\"Element not found at:\", selector);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const locatorExists = (name: string, value: string): boolean => {\r\n const key = `${name}:${value}`;\r\n return finalLocatorsSet.has(key);\r\n };\r\n\r\n if (targetElement) {\r\n const idValue = getId(targetElement);\r\n if (idValue && !locatorExists(\"id\", idValue)) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: \"id\",\r\n value: idValue,\r\n isRecorded:\r\n loc.value === idValue && loc.name === \"id\"\r\n ? loc.isRecorded\r\n : \"Y\",\r\n isSelfHealed:\r\n loc.value === idValue && loc.name === \"id\"\r\n ? loc.isSelfHealed\r\n : \"Y\",\r\n });\r\n });\r\n }\r\n\r\n const textValue = getVisibleText(targetElement);\r\n if (textValue) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: \"linkText\",\r\n type: \"static\",\r\n value: textValue,\r\n isRecorded: loc.value === textValue ? loc.isRecorded : \"Y\",\r\n isSelfHealed:\r\n loc.value === textValue ? loc.isSelfHealed : \"Y\",\r\n });\r\n });\r\n }\r\n\r\n const nameLocator = getName(targetElement);\r\n if (nameLocator && !locatorExists(\"name\", nameLocator)) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: \"name\",\r\n type: \"static\",\r\n value: nameLocator,\r\n isRecorded:\r\n loc.value === nameLocator && loc.name === \"name\"\r\n ? loc.isRecorded\r\n : \"Y\",\r\n isSelfHealed:\r\n loc.value === nameLocator && loc.name === \"name\"\r\n ? loc.isSelfHealed\r\n : \"Y\",\r\n });\r\n });\r\n }\r\n\r\n const classValue = getClassName(targetElement);\r\n if (\r\n classValue &&\r\n classValue.trim() !== \"\" &&\r\n !locatorExists(\"className\", classValue)\r\n ) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: \"className\",\r\n value: classValue,\r\n isRecorded:\r\n loc.value === classValue && loc.name === \"className\"\r\n ? loc.isRecorded\r\n : \"Y\",\r\n isSelfHealed:\r\n loc.value === classValue && loc.name === \"className\"\r\n ? loc.isSelfHealed\r\n : \"Y\",\r\n });\r\n });\r\n }\r\n\r\n const fnValue = parseDOM(targetElement, document, false, true);\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: 'xpath',\r\n value: fnValue,\r\n isRecorded: fnValue?.find((x) => x.value === loc.value)\r\n ? loc.isRecorded\r\n : \"Y\",\r\n isSelfHealed: fnValue?.find((x) => x.value === loc.value)\r\n ? loc.isSelfHealed\r\n : \"Y\",\r\n });\r\n });\r\n\r\n for (const locator of record.locators) {\r\n try {\r\n for (const loc of record.locators) {\r\n if (!loc.value) continue;\r\n\r\n for (const relation of relations) {\r\n if (loc.value.includes(relation)) {\r\n const relativeXpath = checkReferenceElementIsValid(\r\n loc.value,\r\n relation,\r\n tempDiv\r\n );\r\n if (relativeXpath) {\r\n createLocator(loc, {\r\n name: \"xpath\",\r\n value: relativeXpath,\r\n isRecorded:\r\n locator.isRecorded !== \"\" &&\r\n locator.isRecorded !== null\r\n ? locator.isRecorded\r\n : \"Y\",\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"Error processing locator:\", locator, error);\r\n }\r\n }\r\n\r\n const finalAutoHealedLocators = finalLocators.map((obj) => ({\r\n ...obj,\r\n value: cleanLocatorValue(obj.value, obj.name, obj.isRecorded),\r\n }));\r\n\r\n const finalUniqueAutoHealedLocators: Locator[] =\r\n finalAutoHealedLocators.reduce(\r\n (unique: Locator[], locator: Locator) => {\r\n if (\r\n locator.value &&\r\n !unique.some((l: Locator) => l.value === locator.value)\r\n ) {\r\n unique.push(locator);\r\n }\r\n return unique;\r\n },\r\n [] as Locator[]\r\n );\r\n\r\n const jsonResult = [\r\n {\r\n name: `${record.name}`,\r\n desc: `${record.desc}`,\r\n type: `${record.type}`,\r\n locators: finalUniqueAutoHealedLocators.filter(\r\n (locator) => locator?.value != null && locator.value !== \"\"\r\n ),\r\n isShared: `${record.isShared}`,\r\n projectId: `${record.projectId}`,\r\n projectType: `${record.projectType}`,\r\n isRecorded: `${record.isRecorded}`,\r\n folder: `${record.folder}`,\r\n parentId: `${record.parentId}`,\r\n parentName: `${record.parentName}`,\r\n platform: `${record.platform}`,\r\n licenseId: `${record.licenseId}`,\r\n licenseType: `${record.licenseType}`,\r\n userId: `${record.userId}`,\r\n },\r\n ];\r\n\r\n return jsonResult;\r\n }\r\n } catch (error) {\r\n console.error(\"Error processing locator:\", locator, error);\r\n continue;\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"Error processing locator:\", locator, error);\r\n continue;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport { getElementsFromHTML };\r\n","import { isNumberExist } from \"./xpathHelpers.ts\";\r\n\r\nlet modifiedElementAttributes: [] = [];\r\n\r\nexport const parseCssSelectors = (el: HTMLElement | Element, docmt: Document) => {\r\n let cssSelector: { key: string, value: string }[] = [];\r\n\r\n try {\r\n let idCssSelector = getIdCssPath(el, docmt);\r\n\r\n if (\r\n idCssSelector &&\r\n idCssSelector.includes('#') &&\r\n docmt.querySelectorAll(idCssSelector)?.length === 1 &&\r\n !(\r\n idCssSelector.includes('body') ||\r\n idCssSelector.includes('head') ||\r\n idCssSelector.includes('html')\r\n )\r\n ) {\r\n cssSelector.push({ key: 'cssSelector by id', value: idCssSelector });\r\n } else {\r\n idCssSelector = '';\r\n }\r\n\r\n let nameCssSelector = getNameCssPath(el, docmt);\r\n\r\n if (\r\n nameCssSelector &&\r\n nameCssSelector !== idCssSelector &&\r\n nameCssSelector.includes('name') &&\r\n docmt.querySelectorAll(nameCssSelector)?.length === 1 &&\r\n !(\r\n nameCssSelector.includes('body') ||\r\n nameCssSelector.includes('head') ||\r\n nameCssSelector.includes('html')\r\n )\r\n ) {\r\n cssSelector.push({ key: 'cssSelector by name', value: nameCssSelector });\r\n } else {\r\n nameCssSelector = '';\r\n }\r\n\r\n let classCssSelector = getClassCssPath(el, docmt);\r\n\r\n if (\r\n classCssSelector &&\r\n classCssSelector !== idCssSelector &&\r\n nameCssSelector !== classCssSelector &&\r\n classCssSelector.includes('.') &&\r\n docmt.querySelectorAll(classCssSelector)?.length === 1 &&\r\n !(\r\n classCssSelector.includes('body') ||\r\n classCssSelector.includes('head') ||\r\n classCssSelector.includes('html')\r\n )\r\n ) {\r\n cssSelector.push({\r\n key: 'cssSelector by class',\r\n value: classCssSelector,\r\n });\r\n } else {\r\n classCssSelector = '';\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n if (!cssSelector.length) {\r\n let abSelector = getAbsoluteCssPath(el, docmt);\r\n if (\r\n abSelector &&\r\n docmt.querySelectorAll(abSelector)?.length === 1 &&\r\n !(\r\n abSelector.includes('body') ||\r\n abSelector.includes('head') ||\r\n abSelector.includes('html')\r\n )\r\n ) {\r\n cssSelector.push({\r\n key: 'Absolute cssSelector',\r\n value: abSelector,\r\n });\r\n } else {\r\n abSelector = '';\r\n }\r\n }\r\n\r\n return cssSelector;\r\n};\r\n\r\nexport const getIdCssPath = (el: HTMLElement | Element, docmt: Document) => {\r\n const tagName = el.tagName.toLowerCase();\r\n\r\n if (\r\n docmt?.defaultView?.Element &&\r\n !(el instanceof docmt?.defaultView?.Element)\r\n )\r\n return;\r\n if (tagName.includes('style') || tagName.includes('script')) return;\r\n\r\n const path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n let selector = el.nodeName?.toLowerCase();\r\n if (el.id && !isNumberExist(el.id)) {\r\n selector += `#${el.id}`;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n let sib = el;\r\n let nth = 1;\r\n if (sib.previousElementSibling) {\r\n while ((sib = sib.previousElementSibling)) {\r\n if (sib.nodeName?.toLowerCase() === selector) nth++;\r\n }\r\n }\r\n\r\n if (nth !== 1) {\r\n selector += `:nth-of-type(${nth})`;\r\n }\r\n\r\n if (nth === 1 && sib?.parentElement?.childElementCount! > 1) {\r\n selector += `:nth-child(${nth})`;\r\n }\r\n }\r\n path.unshift(selector);\r\n el = el.parentElement!;\r\n }\r\n return path.join(' > ');\r\n};\r\n\r\nexport const getNameCssPath = (el: HTMLElement | Element, docmt: Document) => {\r\n const tagName = el.tagName.toLowerCase();\r\n\r\n if (\r\n docmt?.defaultView?.Element &&\r\n !(el instanceof docmt?.defaultView?.Element)\r\n )\r\n return;\r\n if (tagName.includes('style') || tagName.includes('script')) return;\r\n\r\n const path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n let selector = el.nodeName?.toLowerCase();\r\n let name = el.getAttribute('name');\r\n if (name && !isNumberExist(name)) {\r\n selector += `[name=${name}]`;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n let sib = el;\r\n let nth = 1;\r\n if (sib.previousElementSibling) {\r\n while ((sib = sib.previousElementSibling)) {\r\n if (sib.nodeName?.toLowerCase() === selector) nth++;\r\n }\r\n }\r\n\r\n if (nth !== 1) {\r\n selector += `:nth-of-type(${nth})`;\r\n }\r\n\r\n if (nth === 1 && sib?.parentElement?.childElementCount! > 1) {\r\n selector += `:nth-child(${nth})`;\r\n }\r\n }\r\n path.unshift(selector);\r\n el = el.parentElement!;\r\n }\r\n return path.join(' > ');\r\n};\r\n\r\nexport const getClassCssPath = (el: HTMLElement | Element, docmt: Document) => {\r\n const tagName = el.tagName.toLowerCase();\r\n\r\n if (\r\n docmt?.defaultView?.Element &&\r\n !(el instanceof docmt?.defaultView?.Element)\r\n )\r\n return;\r\n if (tagName.includes('style') || tagName.includes('script')) return;\r\n\r\n const path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n let selector = el.nodeName?.toLowerCase();\r\n\r\n if (\r\n typeof el.className === 'string' &&\r\n el.className &&\r\n !isNumberExist(el.className) &&\r\n !modifiedElementAttributes?.find(\r\n (x: { element: HTMLElement | Element; attributeName: string; }) => x.element === el && x.attributeName === 'class'\r\n )\r\n ) {\r\n el.classList.remove('marked-element-temp');\r\n el.classList.remove('removePointers');\r\n if (el.className) {\r\n selector += `.${el.className.trim().replace(/\\s+/g, '.')}`;\r\n path.unshift(selector);\r\n break;\r\n }\r\n } else {\r\n let sib = el;\r\n let nth = 1;\r\n if (sib.previousElementSibling) {\r\n while ((sib = sib.previousElementSibling)) {\r\n if (sib.nodeName?.toLowerCase() === selector) nth++;\r\n }\r\n }\r\n\r\n if (nth !== 1) {\r\n selector += `:nth-of-type(${nth})`;\r\n }\r\n\r\n if (nth === 1 && sib?.parentElement?.childElementCount! > 1) {\r\n selector += `:nth-child(${nth})`;\r\n }\r\n }\r\n path.unshift(selector);\r\n el = el.parentElement!;\r\n }\r\n return path.join(' > ');\r\n};\r\n\r\nexport const getAbsoluteCssPath = (el: HTMLElement | Element, docmt: Document) => {\r\n const tagName = el.tagName.toLowerCase();\r\n\r\n if (\r\n docmt?.defaultView?.Element &&\r\n !(el instanceof docmt?.defaultView?.Element)\r\n )\r\n return;\r\n if (tagName.includes('style') || tagName.includes('script')) return;\r\n\r\n const path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n let selector = el.nodeName?.toLowerCase();\r\n if (\r\n tagName.includes('body') ||\r\n tagName.includes('head') ||\r\n tagName.includes('html')\r\n ) {\r\n selector += tagName;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n let sib = el;\r\n let nth = 1;\r\n if (sib.previousElementSibling) {\r\n while ((sib = sib.previousElementSibling)) {\r\n if (sib.nodeName?.toLowerCase() === selector) nth++;\r\n }\r\n }\r\n\r\n if (nth !== 1) {\r\n selector += `:nth-of-type(${nth})`;\r\n }\r\n\r\n if (nth === 1 && sib?.parentElement?.childElementCount! > 1) {\r\n selector += `:nth-child(${nth})`;\r\n }\r\n }\r\n path.unshift(selector);\r\n el = el.parentElement!;\r\n }\r\n return path.join(' > ');\r\n};\r\n\r\nexport const cssSelectors = {\r\n parseCssSelectors,\r\n getIdCssPath,\r\n getNameCssPath,\r\n getClassCssPath,\r\n getAbsoluteCssPath\r\n}","import xpath from '../utils/xpath.ts';\r\nimport referenceXpaths from '../utils/referenceXpath.ts';\r\nimport { xpathUtils } from '../utils/xpathHelpers.ts';\r\nimport { getElementsFromHTML } from '../utils/getElementsFromHTML.ts';\r\nimport { cssSelectors } from '../utils/cssSelector.ts';\r\n\r\nexport const createXPathAPI = () => ({\r\n xpath,\r\n referenceXpaths,\r\n xpathUtils,\r\n getElementsFromHTML,\r\n cssSelectors\r\n});\r\n\r\nexport default createXPathAPI;"],"names":["reWhiteSpace","xpathCache","modifiedElementAttributes","xpathData","xpathDataWithIndex","referenceXpaths"],"mappings":"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"}
1
+ {"version":3,"file":"index.browser.cjs","sources":["../src/utils/xpathHelpers.ts","../src/utils/xpath.ts","../src/utils/referenceXpath.ts","../src/utils/getElementsFromHTML.ts","../src/utils/cssSelector.ts","../src/browser/xpath.ts"],"sourcesContent":["export const reWhiteSpace = /^[\\S]+( [\\S]+)*$/gi;\r\nexport let cspEnabled: boolean = false;\r\nconst xpathCache: { [x: string]: number } = {};\r\nlet relativeXPathCache = new Map();\r\nexport let modifiedElementAttributes: {\r\n url: string | null;\r\n attributeName: string | null;\r\n element: HTMLElement | Element;\r\n doc: Document;\r\n}[] = [];\r\nlet mutationObserver: MutationObserver;\r\n\r\nexport const createObserver = (addedNodeCallBack: Function) => {\r\n mutationObserver = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation?.addedNodes?.length) {\r\n addedNodeCallBack(mutation?.addedNodes);\r\n }\r\n\r\n if (mutation.target instanceof HTMLElement) {\r\n if (\r\n mutation?.type === \"attributes\" &&\r\n mutation.attributeName === \"class\" &&\r\n ((isSvg(mutation.target) &&\r\n mutation.oldValue?.trim() ===\r\n mutation.target.classList.value?.trim()) ||\r\n mutation.target.classList?.value\r\n ?.replace(mutation.oldValue!, \"\")\r\n .trim() === \"marked-element-temp\" ||\r\n mutation?.oldValue\r\n ?.replace(mutation.target.classList?.value, \"\")\r\n .trim() === \"marked-element-temp\")\r\n ) {\r\n } else if (\r\n mutation?.type === \"attributes\" &&\r\n ![\"flndisabled\"].includes(mutation.attributeName!)\r\n ) {\r\n modifiedElementAttributes.push({\r\n url: mutation.target.baseURI,\r\n attributeName: mutation.attributeName,\r\n element: mutation.target,\r\n doc: mutation.target.ownerDocument,\r\n });\r\n }\r\n }\r\n });\r\n });\r\n};\r\nexport const startObserver = (\r\n target: Node,\r\n options: MutationObserverInit | undefined\r\n) => {\r\n mutationObserver?.observe(target, options);\r\n};\r\n\r\nexport const stopObserver = () => {\r\n mutationObserver?.disconnect();\r\n};\r\n\r\nexport const isNumberExist = (str: string): boolean => {\r\n const hasNumber = /\\d/;\r\n return hasNumber.test(str);\r\n};\r\n\r\nexport const buildPattern = (\r\n pattern: string,\r\n isSvg: boolean,\r\n tagName: string\r\n): string => {\r\n return isSvg\r\n ? `//*[local-name()='${tagName}' and ${pattern}]`\r\n : `//${tagName}[${pattern}]`;\r\n};\r\n\r\nexport const getTextContent = (\r\n targetElement: HTMLElement | Element\r\n): string => {\r\n const textContent = targetElement?.textContent;\r\n if (cspEnabled) {\r\n if (textContent) {\r\n const tooltip = document.querySelector(\".flntooltip\") as HTMLElement;\r\n if (tooltip) {\r\n const lastIndex = textContent.lastIndexOf(tooltip.innerText);\r\n if (\r\n lastIndex &&\r\n textContent.length === lastIndex + tooltip.innerText.length\r\n ) {\r\n return textContent.substring(0, lastIndex);\r\n }\r\n } else {\r\n return textContent;\r\n }\r\n }\r\n } else {\r\n return textContent;\r\n }\r\n\r\n return \"\";\r\n};\r\n\r\nexport const getFilteredText = (element: Node): string => {\r\n return element?.childNodes[0]?.nodeValue || \"\";\r\n};\r\n\r\nexport const getCountOfXPath = (\r\n xpath: string,\r\n element: HTMLElement | Element,\r\n docmt: Node,\r\n multiElementReferenceMode: boolean = false\r\n): number => {\r\n try {\r\n let count;\r\n // Check if result is cached\r\n if (xpathCache[xpath] !== undefined) {\r\n count = xpathCache[xpath];\r\n } else {\r\n const owner =\r\n docmt.nodeType === 9 // DOCUMENT_NODE\r\n ? (docmt as Document)\r\n : docmt.ownerDocument!;\r\n\r\n count = owner.evaluate(\r\n `count(${xpath})`,\r\n docmt,\r\n null,\r\n XPathResult.NUMBER_TYPE,\r\n null\r\n ).numberValue;\r\n xpathCache[xpath] = count;\r\n }\r\n\r\n if (multiElementReferenceMode && Array.isArray(element)) {\r\n if (count > 1) {\r\n const elementsFromXpath = getElementFromXpath(xpath, docmt, true);\r\n let nodex,\r\n matchedCount = 0;\r\n if (elementsFromXpath instanceof XPathResult) {\r\n while ((nodex = elementsFromXpath?.iterateNext())) {\r\n if (element.includes(nodex)) {\r\n matchedCount += 1;\r\n\r\n if (matchedCount === 2) break;\r\n }\r\n }\r\n }\r\n\r\n if (matchedCount !== 2) return 0;\r\n }\r\n } else {\r\n // Short-circuit if we only need to match one element\r\n if (count === 1) {\r\n const elementFromXpath = getElementFromXpath(xpath, docmt);\r\n return elementFromXpath === element ? count : 0; // Return 0 if no match\r\n }\r\n }\r\n return count; // Return the count\r\n } catch (error) {\r\n console.error(`Error evaluating XPath: ${xpath}`, error);\r\n return 0; // Return 0 on error to avoid re-processing\r\n }\r\n};\r\n\r\nexport const escapeCharacters = (text: string): string => {\r\n if (text) {\r\n if (!(text.indexOf('\"') === -1)) {\r\n return `'${text}'`;\r\n }\r\n if (!(text.indexOf(\"'\") === -1)) {\r\n return `\"${text}\"`;\r\n }\r\n }\r\n return `'${text}'`;\r\n};\r\n\r\nexport const removeParenthesis = (xpath: string): string => {\r\n const charArr = xpath.split(\"\");\r\n\r\n let count = charArr.length;\r\n const indexArray = [];\r\n\r\n while (charArr[count - 2] !== \"[\") {\r\n indexArray.push(charArr[count - 2]);\r\n count--;\r\n }\r\n\r\n indexArray.reverse();\r\n let finalStr = \"\";\r\n for (let i = 0; i < indexArray.length; i++) {\r\n finalStr += indexArray[i];\r\n }\r\n\r\n const endBracketLength = finalStr.length + 2;\r\n let firstpart = xpath.slice(0, xpath.length - endBracketLength);\r\n\r\n if (firstpart.startsWith(\"(\") && firstpart.endsWith(\")\")) {\r\n firstpart = firstpart.slice(1, -1);\r\n } else {\r\n firstpart = xpath;\r\n }\r\n\r\n return firstpart;\r\n};\r\n\r\nexport const findXpathWithIndex = (\r\n val: string,\r\n node: HTMLElement | Element,\r\n docmt: Node,\r\n count: number\r\n) => {\r\n try {\r\n const owner =\r\n docmt.nodeType === 9 // DOCUMENT_NODE\r\n ? (docmt as Document)\r\n : docmt.ownerDocument!;\r\n\r\n let index = 0;\r\n if (count) {\r\n if (getCountOfXPath(`${val}[${count}]`, node, docmt) === 1) {\r\n return `${val}[${count}]`;\r\n }\r\n\r\n if (getCountOfXPath(`(${val})[${count}]`, node, docmt) === 1) {\r\n return `(${val})[${count}]`;\r\n }\r\n }\r\n\r\n const nodes = owner.evaluate(val, docmt, null, XPathResult.ANY_TYPE, null);\r\n let nodex;\r\n while ((nodex = nodes.iterateNext())) {\r\n index++;\r\n if (nodex.isSameNode(node)) {\r\n if (getCountOfXPath(`${val}[${index}]`, node, docmt) === 1) {\r\n return `${val}[${index}]`;\r\n }\r\n if (getCountOfXPath(`(${val})[${index}]`, node, docmt) === 1) {\r\n return `(${val})[${index}]`;\r\n }\r\n return;\r\n }\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst deleteLineGap = (a: string): string => {\r\n a &&= a.split(\"\\n\")[0].length > 0 ? a.split(\"\\n\")[0] : a.split(\"\\n\")[1];\r\n return a;\r\n};\r\n\r\nconst deleteGarbageFromInnerText = (a: string): string => {\r\n a = deleteLineGap(a);\r\n a = a\r\n .split(/[^\\u0000-\\u00ff]/)\r\n .reduce((b, c) => {\r\n return b.length > c.length ? b : c;\r\n }, \"\")\r\n .trim();\r\n return (a = a.split(\"/\")[0].trim());\r\n};\r\n\r\nexport const replaceWhiteSpaces = (str: string): string => {\r\n if (str) {\r\n return str.replace(/\\s\\s+/g, \" \").trim();\r\n }\r\n\r\n return str;\r\n};\r\n\r\nexport const getShadowRoot = (a: HTMLElement | Element): Element | null => {\r\n for (a = a && a.parentElement!; a; ) {\r\n if (a.toString() === \"[object ShadowRoot]\") return a;\r\n a = a.parentElement!;\r\n }\r\n return null;\r\n};\r\n\r\nexport const checkBlockedAttributes = (\r\n attribute: {\r\n name: string;\r\n value: string;\r\n },\r\n targetElement: HTMLElement | Element,\r\n isTarget: boolean\r\n): boolean => {\r\n if (\r\n !attribute?.value ||\r\n typeof attribute?.value === \"boolean\" ||\r\n [\"true\", \"false\", \"on\", \"off\", \"flntooltip\"].some(\r\n (x) => x === attribute.value\r\n ) ||\r\n [\"type\", \"style\", \"locator-data-tooltip\", \"value\"].some(\r\n (x) => x === attribute.name\r\n ) ||\r\n modifiedElementAttributes?.find(\r\n (x) =>\r\n x.doc === targetElement.ownerDocument &&\r\n x.element === targetElement &&\r\n x.attributeName === attribute.name\r\n ) ||\r\n (attribute?.name?.indexOf(\"on\") === 0 && attribute?.name?.length > 3) ||\r\n typeof attribute.value === \"function\" ||\r\n (isTarget && isNumberExist(attribute.value))\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const getRelationship = (a: HTMLElement, b: HTMLElement): string => {\r\n let pos = a.compareDocumentPosition(b);\r\n return pos === 2\r\n ? \"preceding\"\r\n : pos === 4\r\n ? \"following\"\r\n : pos === 8\r\n ? \"ancestor\"\r\n : pos === 16\r\n ? \"descendant\"\r\n : pos === 32\r\n ? \"self\"\r\n : \"\";\r\n};\r\n\r\nexport const isSvg = (element: HTMLElement | Element) => {\r\n return element instanceof SVGElement;\r\n};\r\n\r\nexport const replaceTempAttributes = (str: string): string => {\r\n if (!str) return str;\r\n\r\n return str.replace(/\\b[a-zA-Z_]*disabled\\b/gi, \"disabled\");\r\n};\r\n\r\nconst getElementFromXpath = (xpath: string, docmt: Node, multi = false) => {\r\n const owner =\r\n docmt.nodeType === 9 // DOCUMENT_NODE\r\n ? (docmt as Document)\r\n : docmt.ownerDocument!;\r\n\r\n if (multi) {\r\n return owner.evaluate(xpath, docmt, null, XPathResult.ANY_TYPE, null);\r\n } else {\r\n return owner.evaluate(\r\n xpath,\r\n docmt,\r\n null,\r\n XPathResult.FIRST_ORDERED_NODE_TYPE,\r\n null\r\n ).singleNodeValue;\r\n }\r\n};\r\n\r\nexport const getPropertyXPath = (\r\n element: HTMLElement | Element,\r\n docmt: Document,\r\n prop: string,\r\n value: string,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n if (value) {\r\n const { tagName } = element;\r\n let count;\r\n let combinePattern = \"\";\r\n const mergePattern = [];\r\n let pattern;\r\n\r\n if (value && (!isTarget || !isNumberExist(value))) {\r\n if (!reWhiteSpace.test(value)) {\r\n pattern = buildPattern(\r\n `normalize-space(${prop})=${escapeCharacters(\r\n replaceWhiteSpaces(value)\r\n ).trim()}`,\r\n isSvg(element),\r\n element.tagName.toLowerCase()\r\n );\r\n } else {\r\n pattern = `//${tagName}[${prop}=${escapeCharacters(value)}]`;\r\n }\r\n\r\n count = getCountOfXPath(pattern, element, docmt);\r\n\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n\r\n if (value && isTarget) {\r\n const splitText = value.split(\" \");\r\n if (splitText?.length) {\r\n if (splitText.length === 1) {\r\n const contentRes = [...new Set(splitText[0].match(/([^0-9]+)/g))];\r\n if (contentRes?.length >= 1) {\r\n if (\r\n contentRes[0] &&\r\n replaceWhiteSpaces(contentRes[0].trim())?.length > 1\r\n ) {\r\n if (value.startsWith(contentRes[0])) {\r\n if (!reWhiteSpace.test(contentRes[0])) {\r\n combinePattern = `starts-with(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[0])\r\n ).trim()})`;\r\n } else {\r\n combinePattern = `starts-with(${prop},${escapeCharacters(\r\n contentRes[0]\r\n ).trim()})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (contentRes?.length > 1) {\r\n if (\r\n contentRes[contentRes.length - 1] &&\r\n replaceWhiteSpaces(contentRes[contentRes.length - 1].trim())\r\n ?.length > 1\r\n ) {\r\n if (value.endsWith(contentRes[contentRes.length - 1])) {\r\n if (!reWhiteSpace.test(contentRes[contentRes.length - 1])) {\r\n combinePattern = `ends-with(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[contentRes.length - 1])\r\n ).trim()})`;\r\n } else {\r\n combinePattern = `ends-with(${prop},${escapeCharacters(\r\n contentRes[contentRes.length - 1]\r\n ).trim()})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and ${combinePattern}]`;\r\n } else {\r\n pattern = `//${tagName}[${combinePattern}]`;\r\n }\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n } else {\r\n const endIndex =\r\n splitText.length % 2 === 0\r\n ? splitText.length / 2\r\n : splitText.length % 2;\r\n const startIndexString = splitText.slice(0, endIndex).join(\" \");\r\n let contentRes = [...new Set(startIndexString.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n if (\r\n contentRes[0] &&\r\n replaceWhiteSpaces(contentRes[0].trim())?.length\r\n ) {\r\n if (value.startsWith(contentRes[0])) {\r\n if (!reWhiteSpace.test(contentRes[0])) {\r\n combinePattern = `starts-with(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[0])\r\n ).trim()})`;\r\n } else {\r\n combinePattern = `starts-with(${prop},${escapeCharacters(\r\n contentRes[0]\r\n ).trim()})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and ${combinePattern}]`;\r\n } else {\r\n pattern = `//${tagName}[${combinePattern}]`;\r\n }\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n\r\n const endIndexString = splitText\r\n .slice(endIndex, splitText.length - 1)\r\n .join(\" \");\r\n contentRes = [...new Set(endIndexString.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n if (\r\n contentRes[0] &&\r\n replaceWhiteSpaces(contentRes[0].trim())?.length > 3\r\n ) {\r\n if (value.endsWith(contentRes[0])) {\r\n if (!reWhiteSpace.test(contentRes[0])) {\r\n combinePattern = `ends-with(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[0])\r\n ).trim()})`;\r\n } else {\r\n combinePattern = `ends-with(${prop},${escapeCharacters(\r\n contentRes[0]\r\n ).trim()})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and ${combinePattern}]`;\r\n } else {\r\n pattern = `//${tagName}[${combinePattern}]`;\r\n }\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (value && isTarget && isNumberExist(value)) {\r\n const contentRes = [...new Set(value.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (\r\n contentRes[i] &&\r\n replaceWhiteSpaces(contentRes[i].trim())?.length > 1\r\n ) {\r\n if (!reWhiteSpace.test(contentRes[i])) {\r\n mergePattern.push(\r\n `contains(${prop},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n mergePattern.push(\r\n `contains(${prop},${escapeCharacters(\r\n contentRes[i].trim()\r\n ).trim()})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (mergePattern?.length) {\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and ${mergePattern.join(\r\n \" and \"\r\n )}]`;\r\n } else {\r\n pattern = `//${tagName}[${mergePattern.join(\" and \")}]`;\r\n }\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n }\r\n\r\n if (isSvg(element)) {\r\n pattern = `//*[local-name()='${tagName}' and text()]`;\r\n } else {\r\n pattern = `//${tagName}[text()]`;\r\n }\r\n\r\n count = getCountOfXPath(pattern, element, docmt);\r\n if (count === 1 && !isIndex) {\r\n return pattern;\r\n }\r\n }\r\n};\r\n\r\nexport const getAbsoluteXPath = (\r\n domNode: HTMLElement | Element | null,\r\n docmt: Document\r\n): string => {\r\n try {\r\n if (!domNode) {\r\n return \"\";\r\n }\r\n\r\n let xpathe = isSvg(domNode)\r\n ? `/*[local-name()='${domNode.tagName}']`\r\n : `/${domNode.tagName}`;\r\n\r\n // // If this node has siblings of the same tagName, get the index of this node\r\n if (domNode.parentElement) {\r\n // Get the siblings\r\n const childNodes = Array.prototype.slice\r\n .call(domNode.parentElement.children, 0)\r\n .filter(\r\n (childNode: HTMLElement) => childNode.tagName === domNode.tagName\r\n );\r\n\r\n // // If there's more than one sibling, append the index\r\n if (childNodes.length > 1) {\r\n const index = childNodes.indexOf(domNode);\r\n xpathe += `[${index + 1}]`;\r\n }\r\n } else if (domNode instanceof HTMLElement) {\r\n if (domNode.offsetParent) {\r\n const childNodes = Array.prototype.slice\r\n .call(domNode.offsetParent.children, 0)\r\n .filter(\r\n (childNode: HTMLElement) => childNode.tagName === domNode.tagName\r\n );\r\n\r\n // // If there's more than one sibling, append the index\r\n if (childNodes.length > 1) {\r\n const index = childNodes.indexOf(domNode);\r\n xpathe += `[${index + 1}]`;\r\n }\r\n }\r\n }\r\n\r\n // // Make a recursive call to this nodes parents and prepend it to this xpath\r\n return getAbsoluteXPath(domNode?.parentElement, docmt) + xpathe;\r\n } catch (error) {\r\n // If there's an unexpected exception, abort and don't get an XPath\r\n console.log(\"xpath\", error);\r\n\r\n return \"\";\r\n }\r\n};\r\n\r\nexport const getRelativeXPath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean = false,\r\n attributesArray: Attr[]\r\n) => {\r\n try {\r\n // Generate a cache key based on the node's identifier, index, and target flag\r\n // Check if the result for this node is already cached\r\n if (relativeXPathCache.has(domNode)) {\r\n return relativeXPathCache.get(domNode);\r\n }\r\n\r\n // Initialize an array to hold parts of the XPath\r\n const xpathParts = [];\r\n let currentNode = domNode;\r\n\r\n // Traverse up the DOM tree iteratively instead of using recursion\r\n while (currentNode) {\r\n let xpathe: string | undefined = \"\";\r\n let hasUniqueAttr = false;\r\n let attributes = domNode === currentNode ? attributesArray ?? currentNode.attributes : currentNode.attributes\r\n\r\n // Loop through attributes to check for unique identifiers\r\n for (const attrName of Array.from(attributes)) {\r\n if (checkBlockedAttributes(attrName, currentNode, isTarget)) {\r\n let attrValue = attrName.nodeValue;\r\n\r\n // Clean up attribute value\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n\r\n const elementName = attrName.name;\r\n\r\n // Construct an XPath based on attribute\r\n xpathe = getXpathString(currentNode, elementName, attrValue);\r\n\r\n let othersWithAttr: number = 0;\r\n if (xpathe) {\r\n othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n if (othersWithAttr === 1) {\r\n xpathParts.unshift(replaceTempAttributes(xpathe));\r\n hasUniqueAttr = true;\r\n break;\r\n }\r\n }\r\n\r\n if (othersWithAttr > 1 && isIndex) {\r\n xpathe = findXpathWithIndex(\r\n xpathe,\r\n currentNode,\r\n docmt,\r\n othersWithAttr\r\n );\r\n if (xpathe) {\r\n xpathParts.unshift(replaceTempAttributes(xpathe));\r\n hasUniqueAttr = true;\r\n break;\r\n }\r\n // return replaceTempAttributes(xpathe);\r\n }\r\n }\r\n }\r\n\r\n if (currentNode.textContent) {\r\n if (!isTarget || (isTarget && !isNumberExist(currentNode.textContent))) {\r\n let reWhiteSpace = new RegExp(/^[\\S]+( [\\S]+)*$/gi);\r\n\r\n if (!reWhiteSpace.test(currentNode.textContent)) {\r\n xpathe =\r\n isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and normalize-space(.)=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`\r\n : `//${\r\n currentNode.tagName || \"*\"\r\n }[normalize-space(.)=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`;\r\n } else {\r\n xpathe =\r\n isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and .=${escapeCharacters(getFilteredText(currentNode))}]`\r\n : `//${currentNode.tagName || \"*\"}[.=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`;\r\n }\r\n\r\n let othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n if (othersWithAttr === 1) {\r\n return xpathe;\r\n }\r\n\r\n if (othersWithAttr > 1 && isIndex) {\r\n xpathe = findXpathWithIndex(xpathe, currentNode, docmt, othersWithAttr);\r\n return xpathe;\r\n }\r\n } else {\r\n let combinePattern: string[] = [];\r\n const contentRes = [\r\n ...new Set(getFilteredText(currentNode).match(/([^0-9]+)/g)),\r\n ];\r\n let reWhiteSpace = new RegExp(/^[\\S]+( [\\S]+)*$/gi);\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (\r\n contentRes[i] &&\r\n replaceWhiteSpaces((contentRes[i] as string).trim())\r\n ) {\r\n if (!reWhiteSpace.test(contentRes[i] as string)) {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n (contentRes[i] as string).trim()\r\n ).trim()})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n xpathe =\r\n isSvg(currentNode)\r\n ? `//*[local-name()='${\r\n currentNode.tagName\r\n }' and ${combinePattern.join(\" and \")}]`\r\n : `//${currentNode.tagName || \"*\"}[${combinePattern.join(\r\n \" and \"\r\n )}]`;\r\n let othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n if (othersWithAttr === 1) {\r\n return xpathe;\r\n }\r\n\r\n if (othersWithAttr > 1 && isIndex) {\r\n xpathe = findXpathWithIndex(xpathe, currentNode, docmt, othersWithAttr);\r\n return xpathe;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If no unique attribute was found, construct XPath by tag name\r\n if (!hasUniqueAttr) {\r\n let tagBasedXPath = isSvg(currentNode)\r\n ? `/*[local-name()='${currentNode.tagName}']`\r\n : `/${currentNode.tagName}`;\r\n\r\n // Handle sibling nodes\r\n if (currentNode.parentElement) {\r\n const siblings = Array.from(\r\n currentNode.parentElement.children\r\n ).filter((childNode) => childNode.tagName === currentNode.tagName);\r\n\r\n // Append index to distinguish between siblings\r\n if (siblings.length > 1) {\r\n const index = siblings.indexOf(currentNode);\r\n tagBasedXPath += `[${index + 1}]`;\r\n }\r\n }\r\n\r\n // Add the constructed tag-based XPath to the parts array\r\n xpathParts.unshift(tagBasedXPath);\r\n } else {\r\n break;\r\n }\r\n\r\n // Move up to the parent node for the next iteration\r\n currentNode = currentNode.parentElement!;\r\n }\r\n\r\n // Combine all parts into the final XPath\r\n const finalXPath = `${xpathParts.join(\"\")}`;\r\n\r\n // Cache the final XPath for this node\r\n relativeXPathCache.set(domNode, finalXPath);\r\n return finalXPath;\r\n } catch (error) {\r\n console.log(error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const getCombinationXpath = (\r\n attribute: Attr,\r\n domNode: HTMLElement | Element\r\n) => {\r\n const combinePattern = [];\r\n let pattern: string = \"\";\r\n\r\n if (\r\n attribute &&\r\n !isNumberExist(attribute.value) &&\r\n typeof attribute.nodeValue !== \"function\" // &&\r\n // !modifiedElementAttributes?.find(\r\n // (x) => x.element === domNode && x.attributeName === attribute.name\r\n // )\r\n ) {\r\n const contentRes = [...new Set(attribute.value.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (\r\n contentRes[i] &&\r\n replaceWhiteSpaces(contentRes[i].trim())?.length > 2\r\n ) {\r\n if (!reWhiteSpace.test(contentRes[i])) {\r\n combinePattern.push(\r\n `contains(@${attribute.name},${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n combinePattern.push(\r\n `contains(@${attribute.name},${escapeCharacters(\r\n contentRes[i].trim()\r\n )})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n pattern = isSvg(domNode)\r\n ? `//*[local-name()='${domNode.tagName}' and ${combinePattern.join(\r\n \" and \"\r\n )}]`\r\n : `//${domNode.tagName}[${combinePattern.join(\" and \")}]`;\r\n return pattern;\r\n }\r\n }\r\n};\r\n\r\nexport const getAttributeCombinationXpath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n uniqueAttributes: Attr[],\r\n isTarget: boolean\r\n): string | undefined => {\r\n try {\r\n const xpathAttributes = [];\r\n\r\n if (uniqueAttributes.length > 1) {\r\n for (const attrName of uniqueAttributes) {\r\n if (checkBlockedAttributes(attrName, domNode, isTarget)) {\r\n const attrValue = attrName.nodeValue;\r\n\r\n if (!reWhiteSpace.test(attrValue!)) {\r\n xpathAttributes.push(\r\n `normalize-space(@${attrName.nodeName})=\"${attrValue}\"`\r\n );\r\n } else if (attrName.nodeName === \"class\") {\r\n xpathAttributes.push(\r\n `contains(@${attrName.nodeName},\"${attrValue}\")`\r\n );\r\n } else {\r\n xpathAttributes.push(`@${attrName.nodeName}=\"${attrValue}\"`);\r\n }\r\n\r\n const xpathe = isSvg(domNode)\r\n ? `//*[local-name()='${domNode.tagName}' and ${xpathAttributes.join(\r\n \" and \"\r\n )}]`\r\n : `//${domNode.tagName}[${xpathAttributes.join(\" and \")}]`;\r\n let othersWithAttr;\r\n\r\n // If the XPath does not parse, move to the next unique attribute\r\n try {\r\n othersWithAttr = getCountOfXPath(xpathe, domNode, docmt);\r\n } catch (ign) {\r\n continue;\r\n }\r\n\r\n if (othersWithAttr === 1 && !xpathe.includes(\"and\")) {\r\n return \"\";\r\n }\r\n // If the attribute isn't actually unique, get it's index too\r\n if (othersWithAttr === 1 && xpathe.includes(\"and\")) {\r\n return xpathe;\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // If there's an unexpected exception, abort and don't get an XPath\r\n console.log(`'${JSON.stringify(error, null, 2)}'`);\r\n }\r\n};\r\n\r\nexport const intermediateXpathStep = (\r\n targetElemt: HTMLElement | Element,\r\n attr: { name: string; value: string },\r\n isTarget: boolean\r\n): string => {\r\n let isSvgElement = isSvg(targetElemt);\r\n let expression: string = \"\";\r\n\r\n if (checkBlockedAttributes(attr, targetElemt, isTarget)) {\r\n let attrValue = attr.value;\r\n attrValue = attrValue.replace(\"removePointers\", \"\");\r\n const elementName = attr.name;\r\n\r\n if (!reWhiteSpace.test(attrValue)) {\r\n expression = isSvgElement\r\n ? `*[local-name()='${\r\n targetElemt.tagName\r\n }' and normalize-space(@${elementName})=${escapeCharacters(\r\n attrValue\r\n )}]`\r\n : `${\r\n targetElemt.tagName || \"*\"\r\n }[normalize-space(@${elementName})=${escapeCharacters(attrValue)}]`;\r\n } else {\r\n expression = isSvgElement\r\n ? `*[local-name()='${\r\n targetElemt.tagName\r\n }' and @${elementName}=${escapeCharacters(attrValue)}]`\r\n : `${targetElemt.tagName || \"*\"}[@${elementName}=${escapeCharacters(\r\n attrValue\r\n )}]`;\r\n }\r\n }\r\n\r\n return expression;\r\n};\r\n\r\nexport const getFilteredTextXPath = (\r\n node: HTMLElement | Element,\r\n docmt: Document\r\n): string => {\r\n if (!node.textContent) return \"\";\r\n\r\n const filteredText = getFilteredText(node);\r\n\r\n let xpathe;\r\n\r\n if (!reWhiteSpace.test(filteredText)) {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${\r\n node.tagName\r\n }' and normalize-space(.)=${escapeCharacters(filteredText)}]`\r\n : `//${node.tagName || \"*\"}[normalize-space(.)=${escapeCharacters(\r\n filteredText\r\n )}]`;\r\n } else {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${node.tagName}' and .=${escapeCharacters(\r\n filteredText\r\n )}]`\r\n : `//${node.tagName || \"*\"}[.=${escapeCharacters(filteredText)}]`;\r\n }\r\n\r\n return xpathe;\r\n};\r\n\r\nexport const getTextXpathFunction = (domNode: HTMLElement | Element): string | undefined => {\r\n const trimmedText = getTextContent(domNode)?.trim();\r\n const filteredText = trimmedText\r\n ? escapeCharacters(deleteGarbageFromInnerText(trimmedText))\r\n : trimmedText;\r\n if (filteredText) {\r\n if (filteredText !== `'${trimmedText}'`) {\r\n return `contains(.,${filteredText})`;\r\n }\r\n return `normalize-space(.)='${trimmedText}'`;\r\n }\r\n};\r\n\r\nexport const getXpathString = (\r\n node: HTMLElement | Element,\r\n attrName: string,\r\n attrValue: string\r\n): string => {\r\n const reWhiteSpace = new RegExp(/^[\\S]+( [\\S]+)*$/gi);\r\n let xpathe: string = \"\";\r\n\r\n if (attrValue) {\r\n if (!reWhiteSpace.test(attrValue)) {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${\r\n node.tagName\r\n }' and contains(@${attrName},${escapeCharacters(attrValue)})]`\r\n : `//${node.tagName || \"*\"}[contains(@${attrName},${escapeCharacters(\r\n attrValue\r\n )})]`;\r\n } else if (attrName === \"class\") {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${\r\n node.tagName\r\n }' and contains(@${attrName},${escapeCharacters(attrValue)})]`\r\n : `//${node.tagName || \"*\"}[contains(@${attrName},${escapeCharacters(\r\n attrValue\r\n )})]`;\r\n } else {\r\n xpathe = isSvg(node)\r\n ? `//*[local-name()='${\r\n node.tagName\r\n }' and @${attrName}=${escapeCharacters(attrValue)}]`\r\n : `//${node.tagName || \"*\"}[@${attrName}=${escapeCharacters(\r\n attrValue\r\n )}]`;\r\n }\r\n }\r\n\r\n return xpathe;\r\n};\r\n\r\nexport const replaceActualAttributes = (\r\n str: string,\r\n element: { attributes: any }\r\n): string => {\r\n if (str) {\r\n return str.replace(/\\bdisabled\\b/gi, \"flndisabled\");\r\n }\r\n return str;\r\n};\r\n\r\nconst addAttributeSplitCombineXpaths = (\r\n attributes: NamedNodeMap,\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isTarget: boolean\r\n): { key: string; value: string }[] => {\r\n const attributesArray = Array.prototype.slice.call(attributes);\r\n const xpaths: { key: string; value: string }[] = [];\r\n try {\r\n attributesArray.map((element) => {\r\n if (checkBlockedAttributes(element, targetElemt, isTarget)) {\r\n const xpth = getCombinationXpath(element, targetElemt);\r\n if (xpth) {\r\n xpaths.push({\r\n key: `split xpath by ${element.name}`,\r\n value: xpth,\r\n });\r\n }\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n return xpaths;\r\n};\r\n\r\nexport const getReferenceElementsXpath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n isTarget: boolean\r\n): { key: string; value: string }[] => {\r\n let nodeXpath1;\r\n const xpaths1 = [];\r\n if (\r\n domNode.textContent &&\r\n (!isTarget || (isTarget && !isNumberExist(domNode.textContent)))\r\n ) {\r\n if (!reWhiteSpace.test(domNode.textContent)) {\r\n nodeXpath1 = isSvg(domNode)\r\n ? `*[local-name()='${domNode.tagName}' and ${getTextXpathFunction(\r\n domNode\r\n )})]`\r\n : `${domNode.tagName}[${getTextXpathFunction(domNode)}]`;\r\n if (nodeXpath1) {\r\n xpaths1.push({ key: \"getReferenceElementsXpath\", value: nodeXpath1 });\r\n }\r\n } else {\r\n nodeXpath1 = isSvg(domNode)\r\n ? `*[local-name()='${domNode.tagName}' and .=${escapeCharacters(\r\n getTextContent(domNode)\r\n )}]`\r\n : `${domNode.tagName}[.=${escapeCharacters(getTextContent(domNode))}]`;\r\n if (nodeXpath1) {\r\n xpaths1.push({ key: \"getReferenceElementsXpath\", value: nodeXpath1 });\r\n }\r\n }\r\n }\r\n\r\n if (domNode.attributes) {\r\n for (const attrName of Array.from(domNode.attributes)) {\r\n if (checkBlockedAttributes(attrName, domNode, isTarget)) {\r\n let attrValue = attrName.nodeValue;\r\n if (attrValue) {\r\n attrValue = attrValue.replace(\"removePointers\", \"\");\r\n const elementName = attrName.name;\r\n\r\n if (elementName === \"class\") {\r\n nodeXpath1 = isSvg(domNode)\r\n ? `*[local-name()='${\r\n domNode.tagName\r\n }' and contains(@${elementName},${escapeCharacters(\r\n attrValue\r\n )})]`\r\n : `${domNode.tagName}[contains(@${elementName},${escapeCharacters(\r\n attrValue\r\n )})]`;\r\n } else {\r\n nodeXpath1 = isSvg(domNode)\r\n ? `*[local-name()='${\r\n domNode.tagName\r\n }' and @${elementName}=${escapeCharacters(attrValue)}]`\r\n : `${domNode.tagName}[@${elementName}=${escapeCharacters(\r\n attrValue\r\n )}]`;\r\n }\r\n\r\n if (nodeXpath1) {\r\n xpaths1.push({\r\n key: \"getReferenceElementsXpath\",\r\n value: nodeXpath1,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n const attributesArray = Array.prototype.slice.call(domNode.attributes);\r\n if (attributesArray?.length > 1) {\r\n const combinationXpath = getAttributeCombinationXpath(\r\n domNode,\r\n docmt,\r\n Array.prototype.slice.call(domNode.attributes),\r\n isTarget\r\n );\r\n if (combinationXpath) {\r\n xpaths1.push({\r\n key: \"getReferenceElementsXpath\",\r\n value: combinationXpath,\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n const combinePattern = [];\r\n let pattern;\r\n const tag = isSvg(domNode);\r\n if (domNode.textContent && isTarget && isNumberExist(domNode.textContent)) {\r\n const contentRes = [...new Set(domNode.textContent.match(/([^0-9]+)/g))];\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (\r\n contentRes[i] &&\r\n replaceWhiteSpaces(contentRes[i].trim())?.length > 1\r\n ) {\r\n if (!reWhiteSpace.test(contentRes[i])) {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(contentRes[i]).trim()})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n if (tag) {\r\n pattern = `//*[local-name()='${tag}' and ${combinePattern.join(\r\n \" and \"\r\n )}]`;\r\n } else {\r\n pattern = `//${tag}[${combinePattern.join(\" and \")}]`;\r\n }\r\n\r\n if (pattern)\r\n xpaths1.push({ key: \"getReferenceElementsXpath\", value: pattern });\r\n }\r\n }\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n const xpaths = addAttributeSplitCombineXpaths(\r\n domNode.attributes,\r\n domNode,\r\n docmt,\r\n isTarget\r\n );\r\n if (xpaths?.length) {\r\n xpaths1.concat(xpaths);\r\n }\r\n }\r\n\r\n return xpaths1;\r\n};\r\n\r\nexport const parseXml = (xmlStr: string, type: DOMParserSupportedType): Document | null => {\r\n if (window.DOMParser) {\r\n return new window.DOMParser().parseFromString(xmlStr, type);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport const normalizeXPath = (xpath: string): string => {\r\n // Replace text() = \"value\" or text()='value'\r\n xpath = xpath.replace(\r\n /text\\(\\)\\s*=\\s*(['\"])(.*?)\\1/g,\r\n \"normalize-space(.)=$1$2$1\"\r\n );\r\n\r\n // Replace . = \"value\" or .='value'\r\n xpath = xpath.replace(/\\.\\s*=\\s*(['\"])(.*?)\\1/g, \"normalize-space(.)=$1$2$1\");\r\n\r\n return xpath;\r\n};\r\n\r\nexport const findMatchingParenthesis = (\r\n text: string,\r\n openPos: number\r\n): number => {\r\n let closePos = openPos;\r\n let counter = 1;\r\n while (counter > 0) {\r\n const c = text[++closePos];\r\n if (c == \"(\") {\r\n counter++;\r\n } else if (c == \")\") {\r\n counter--;\r\n }\r\n }\r\n return closePos;\r\n};\r\n\r\nexport const xpathUtils = {\r\n parseXml,\r\n getReferenceElementsXpath,\r\n getAbsoluteXPath,\r\n getRelativeXPath,\r\n getCombinationXpath,\r\n getAttributeCombinationXpath,\r\n getElementFromXpath,\r\n isSvg,\r\n findXpathWithIndex,\r\n isNumberExist,\r\n getTextContent,\r\n getCountOfXPath,\r\n normalizeXPath,\r\n getShadowRoot,\r\n escapeCharacters,\r\n removeParenthesis,\r\n checkBlockedAttributes,\r\n getRelationship,\r\n findMatchingParenthesis,\r\n deleteGarbageFromInnerText,\r\n replaceTempAttributes,\r\n createObserver,\r\n startObserver,\r\n stopObserver,\r\n modifiedElementAttributes,\r\n cspEnabled\r\n};\r\n","import {\r\n isNumberExist,\r\n getCountOfXPath,\r\n escapeCharacters,\r\n checkBlockedAttributes,\r\n replaceWhiteSpaces,\r\n getTextContent,\r\n getPropertyXPath,\r\n findXpathWithIndex,\r\n getFilteredText,\r\n intermediateXpathStep,\r\n getAttributeCombinationXpath,\r\n getFilteredTextXPath,\r\n isSvg,\r\n getXpathString,\r\n reWhiteSpace,\r\n modifiedElementAttributes,\r\n} from \"./xpathHelpers.ts\";\r\n\r\nlet xpathData: { key: string; value: string }[] = [];\r\nlet xpathDataWithIndex: { key: string; value: string; count: number }[] = [];\r\nlet referenceElementMode: boolean = false;\r\nlet xpathCache = new Map();\r\nlet cache = new Map();\r\n\r\nconst parentXpathCache = new Map(); // Cache for parent XPaths\r\n\r\nconst checkRelativeXpathRelation = (\r\n nodeXpath1: string,\r\n nodeXpath2: string,\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n relationType: string\r\n) => {\r\n if (nodeXpath1 && !referenceElementMode) {\r\n let xpaths;\r\n\r\n if (relationType === \"parent\") {\r\n xpaths = [\r\n // `${nodeXpath1}/descendant::${nodeXpath2}`,\r\n `${nodeXpath1}/descendant-or-self::${nodeXpath2}`,\r\n `${nodeXpath1}/following::${nodeXpath2}`,\r\n ];\r\n } else {\r\n xpaths = [\r\n // `${nodeXpath1}/descendant::${nodeXpath2}`,\r\n `${nodeXpath1}/ancestor-or-self::${nodeXpath2}`,\r\n `${nodeXpath1}/preceding::${nodeXpath2}`,\r\n ];\r\n }\r\n\r\n // Iterate through XPath patterns\r\n for (const xpath of xpaths) {\r\n // Check if result is already cached to avoid recomputation\r\n if (!xpathCache?.get(xpath)) {\r\n // Compute and store result in cache\r\n xpathCache.set(xpath, getCountOfXPath(xpath, targetElemt, docmt));\r\n }\r\n\r\n const count = xpathCache?.get(xpath);\r\n\r\n // Short-circuit: Return the first valid XPath result found\r\n if (count === 1) {\r\n return xpath;\r\n }\r\n if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by unique parent ${isIndex ? \"index\" : \"\"}`,\r\n value: xpath,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by unique parent ${isIndex ? \"index\" : \"\"}`,\r\n value: xpath,\r\n count,\r\n });\r\n }\r\n }\r\n\r\n if (count > 1 && isIndex && !xpathData.length) {\r\n // Try finding XPath with index if count is greater than 1\r\n const indexedXpath = findXpathWithIndex(\r\n xpath,\r\n targetElemt,\r\n docmt,\r\n count\r\n );\r\n\r\n // Cache the indexed XPath result\r\n if (\r\n indexedXpath &&\r\n getCountOfXPath(indexedXpath, targetElemt, docmt) === 1\r\n ) {\r\n xpathData.push({\r\n key: `relative xpath by unique parent ${isIndex ? \"index\" : \"\"}`,\r\n value: indexedXpath,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nconst getUniqueParentXpath = (\r\n domNode: HTMLElement,\r\n docmt: Document,\r\n node: HTMLElement | Element,\r\n isTarget: boolean,\r\n nodeXpath: string,\r\n isIndex: boolean\r\n) => {\r\n try {\r\n if (parentXpathCache.has(domNode)) {\r\n return parentXpathCache.get(domNode);\r\n }\r\n\r\n // Direct XPath construction without loops\r\n const xpathParts = [];\r\n let currentNode = domNode;\r\n\r\n while (currentNode && currentNode.nodeType === 1) {\r\n const hasUniqueAttr = false;\r\n for (const attrName of Array.from(currentNode.attributes)) {\r\n if (checkBlockedAttributes(attrName, currentNode, isTarget)) {\r\n let attrValue = attrName.nodeValue;\r\n\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n const elementName = attrName.name;\r\n const xpathe = getXpathString(currentNode, elementName, attrValue);\r\n\r\n let othersWithAttr;\r\n\r\n // If the XPath does not parse, move to the next unique attribute\r\n try {\r\n othersWithAttr = checkRelativeXpathRelation(\r\n xpathe,\r\n nodeXpath,\r\n node,\r\n docmt,\r\n isIndex,\r\n \"parent\"\r\n );\r\n } catch (ign) {\r\n continue;\r\n }\r\n\r\n // If the attribute isn't actually unique, get it's index too\r\n if (othersWithAttr) {\r\n return othersWithAttr;\r\n }\r\n }\r\n }\r\n\r\n if (currentNode.textContent && !currentNode.textContent) {\r\n if (\r\n !isTarget ||\r\n (isTarget && !isNumberExist(currentNode.textContent))\r\n ) {\r\n let xpathe;\r\n\r\n if (!reWhiteSpace.test(currentNode.textContent)) {\r\n xpathe = isSvg(currentNode)\r\n ? `//*[local-name()='${currentNode.tagName\r\n }' and normalize-space(.)=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`\r\n : `//${currentNode.tagName || \"*\"\r\n }[normalize-space(.)=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`;\r\n } else {\r\n xpathe = isSvg(currentNode)\r\n ? `//*[local-name()='${currentNode.tagName\r\n }' and .=${escapeCharacters(getFilteredText(currentNode))}]`\r\n : `//${currentNode.tagName || \"*\"}[.=${escapeCharacters(\r\n getFilteredText(currentNode)\r\n )}]`;\r\n }\r\n\r\n const othersWithAttr = checkRelativeXpathRelation(\r\n xpathe,\r\n nodeXpath,\r\n node,\r\n docmt,\r\n isIndex,\r\n \"parent\"\r\n );\r\n if (othersWithAttr) {\r\n return othersWithAttr;\r\n }\r\n } else {\r\n const combinePattern = [];\r\n const contentRes = [\r\n ...new Set(getFilteredText(currentNode).match(/([^0-9]+)/g)),\r\n ];\r\n const reWhiteSpace = new RegExp(/^[\\S]+( [\\S]+)*$/gi);\r\n if (contentRes?.length) {\r\n for (let i = 0; i < contentRes?.length; i++) {\r\n if (contentRes[i] && replaceWhiteSpaces(contentRes[i].trim())) {\r\n if (!reWhiteSpace.test(contentRes[i])) {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n replaceWhiteSpaces(contentRes[i])\r\n ).trim()})`\r\n );\r\n } else {\r\n combinePattern.push(\r\n `contains(.,${escapeCharacters(\r\n contentRes[i].trim()\r\n ).trim()})`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (combinePattern?.length) {\r\n const xpathe = isSvg(currentNode)\r\n ? `//*[local-name()='${currentNode.tagName\r\n }' and ${combinePattern.join(\" and \")}]`\r\n : `//${currentNode.tagName || \"*\"}[${combinePattern.join(\r\n \" and \"\r\n )}]`;\r\n const othersWithAttr = checkRelativeXpathRelation(\r\n xpathe,\r\n nodeXpath,\r\n node,\r\n docmt,\r\n isIndex,\r\n \"parent\"\r\n );\r\n if (othersWithAttr) {\r\n return othersWithAttr;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Construct the XPath based on the tag name\r\n if (!hasUniqueAttr) {\r\n const xpathe = isSvg(currentNode)\r\n ? `/*[local-name()='${currentNode.tagName}']`\r\n : `/${currentNode.tagName}`;\r\n\r\n xpathParts.unshift(xpathe);\r\n } else {\r\n break;\r\n }\r\n\r\n // Move to the parent node for the next iteration\r\n currentNode = currentNode.parentElement!;\r\n }\r\n\r\n // Final constructed XPath\r\n const finalXPath = xpathParts.join(\"\") + nodeXpath;\r\n let count = getCountOfXPath(finalXPath, domNode, docmt);\r\n if (count === 1) {\r\n parentXpathCache.set(domNode, finalXPath); // Cache final result\r\n return finalXPath;\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n return null;\r\n }\r\n};\r\n\r\nconst getParentRelativeXpath = (\r\n domNode: HTMLElement,\r\n docmt: Document,\r\n node: HTMLElement | Element,\r\n isTarget: boolean\r\n) => {\r\n const cache = new Map(); // Cache to store computed results\r\n\r\n if (cache.has(domNode)) {\r\n return cache.get(domNode); // Return cached result if available\r\n }\r\n\r\n const xpathParts = []; // Initialize an array to hold parts of the XPath\r\n let currentNode = domNode; // Start with the provided DOM node\r\n\r\n try {\r\n while (currentNode && currentNode.nodeType === 1) {\r\n // BASE CASE #1: If this isn't an element, we're above the root, return empty string\r\n if (!currentNode.tagName) {\r\n return \"\";\r\n }\r\n\r\n // BASE CASE #2: Check for unique attributes\r\n let uniqueAttrFound = false;\r\n for (const attr of Array.from(currentNode.attributes)) {\r\n if (checkBlockedAttributes(attr, currentNode, isTarget)) {\r\n let attrValue = attr.nodeValue;\r\n\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n const elementName = attr.name;\r\n\r\n const xpathe = getXpathString(currentNode, elementName, attrValue);\r\n\r\n let othersWithAttr;\r\n\r\n // If the XPath does not parse, move to the next unique attribute\r\n try {\r\n othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n } catch (ign) {\r\n continue;\r\n }\r\n\r\n // If the attribute is unique, return its XPath\r\n if (othersWithAttr === 1) {\r\n xpathParts.unshift(xpathe);\r\n uniqueAttrFound = true; // Mark that we found at least one unique attribute\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If no unique attributes, check for text content\r\n if (!uniqueAttrFound && currentNode.textContent && !node.textContent) {\r\n const textXPath = getFilteredTextXPath(currentNode, docmt);\r\n if (textXPath) {\r\n const othersWithAttr = getCountOfXPath(textXPath, currentNode, docmt);\r\n if (othersWithAttr === 1) {\r\n uniqueAttrFound = true; // Mark that we found at least one unique attribute\r\n xpathParts.unshift(textXPath);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!uniqueAttrFound) {\r\n // Construct the XPath based on the tag name\r\n const xpathe = isSvg(currentNode)\r\n ? `/*[local-name()='${currentNode.tagName}']`\r\n : `/${currentNode.tagName}`;\r\n\r\n // Prepend the current XPath part to the array\r\n xpathParts.unshift(xpathe);\r\n } else {\r\n break;\r\n }\r\n // Move to the parent node for the next iteration\r\n currentNode = currentNode.parentElement!;\r\n }\r\n\r\n // Combine all parts into the final XPath\r\n const finalXpath = xpathParts.join(\"\");\r\n cache.set(domNode, finalXpath); // Store result in cache\r\n return finalXpath;\r\n } catch (error) {\r\n console.log(error);\r\n return null;\r\n }\r\n};\r\n\r\nconst getChildRelativeXpath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n node: HTMLElement | Element\r\n) => {\r\n const xpathParts = []; // Initialize an array to hold parts of the XPath.\r\n let currentNode: HTMLElement | Element | null;\r\n\r\n const st = [];\r\n if (\r\n domNode.firstElementChild != null &&\r\n domNode.firstElementChild.classList.contains(\"flntooltip\")\r\n ) {\r\n st.unshift(domNode.firstElementChild);\r\n } else if (domNode.nextElementSibling != null)\r\n st.unshift(domNode.nextElementSibling);\r\n\r\n for (\r\n let m = domNode.parentElement;\r\n m != null && m.nodeType === 1;\r\n m = m.parentElement\r\n ) {\r\n if (m.nextElementSibling) st.unshift(m.nextElementSibling);\r\n }\r\n\r\n try {\r\n do {\r\n let uniqueAttrFound = false;\r\n for (currentNode = st.pop()!; currentNode !== null;) {\r\n for (const attr of Array.from(currentNode.attributes)) {\r\n if (checkBlockedAttributes(attr, currentNode, true)) {\r\n let attrValue = attr.nodeValue;\r\n\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n const elementName = attr.name;\r\n\r\n const xpathe = getXpathString(currentNode, elementName, attrValue);\r\n\r\n let othersWithAttr;\r\n\r\n // If the XPath does not parse, move to the next unique attribute\r\n try {\r\n othersWithAttr = getCountOfXPath(xpathe, currentNode, docmt);\r\n } catch (ign) {\r\n continue;\r\n }\r\n\r\n // If the attribute is unique, return its XPath\r\n if (othersWithAttr === 1) {\r\n uniqueAttrFound = true; // Mark that we found at least one unique attribute\r\n xpathParts.push(xpathe);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If no unique attributes, check for text content\r\n if (!uniqueAttrFound && currentNode.textContent && !node.textContent) {\r\n const textXPath = getFilteredTextXPath(currentNode, docmt);\r\n if (textXPath) {\r\n const othersWithAttr = getCountOfXPath(\r\n textXPath,\r\n currentNode,\r\n docmt\r\n );\r\n if (othersWithAttr === 1) {\r\n uniqueAttrFound = true; // Mark that we found at least one unique attribute\r\n xpathParts.push(textXPath);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!uniqueAttrFound) {\r\n // Construct the XPath based on the tag name\r\n const xpathe = isSvg(currentNode)\r\n ? `/*[local-name()='${currentNode.tagName}']`\r\n : `/${currentNode.tagName}`;\r\n\r\n // Prepend the current XPath part to the array\r\n xpathParts.push(xpathe);\r\n\r\n if (currentNode.firstElementChild != null) {\r\n st.push(currentNode.nextElementSibling);\r\n currentNode = currentNode.firstElementChild;\r\n } else {\r\n currentNode = currentNode.nextElementSibling;\r\n }\r\n } else {\r\n break;\r\n }\r\n }\r\n } while (st.length > 0);\r\n\r\n // Combine all parts into the final XPath\r\n const finalXpath = xpathParts.join(\"\");\r\n cache.set(domNode, finalXpath); // Store result in cache\r\n return finalXpath;\r\n } catch (error) {\r\n console.log(error);\r\n return null;\r\n }\r\n};\r\n\r\nconst getSiblingRelativeXPath = (\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n isTarget: boolean,\r\n nodeXpath: string\r\n) => {\r\n try {\r\n const markedSpan = document.querySelector(\".flntooltip\");\r\n\r\n for (\r\n let m = domNode.nextElementSibling;\r\n m !== null && m !== markedSpan;\r\n m = m.nextElementSibling\r\n ) {\r\n processSibling(\r\n m,\r\n domNode,\r\n docmt,\r\n nodeXpath,\r\n \"preceding-sibling\",\r\n isTarget\r\n );\r\n }\r\n\r\n for (\r\n let n = domNode.previousElementSibling;\r\n n !== null && n !== markedSpan;\r\n n = n.previousElementSibling\r\n ) {\r\n processSibling(\r\n n,\r\n domNode,\r\n docmt,\r\n nodeXpath,\r\n \"following-sibling\",\r\n isTarget\r\n );\r\n }\r\n } catch (error) {\r\n console.error(\"sibling error\", error);\r\n return null;\r\n }\r\n};\r\n\r\nconst processSibling = (\r\n sibling: Element,\r\n domNode: HTMLElement | Element,\r\n docmt: Document,\r\n nodeXpath: string,\r\n axis: string,\r\n isTarget: boolean\r\n) => {\r\n try {\r\n if (sibling.hasAttributes()) {\r\n for (const attr of Array.from(sibling.attributes)) {\r\n let xpathe = intermediateXpathStep(\r\n sibling,\r\n {\r\n name: attr.name,\r\n value: attr.value,\r\n },\r\n isTarget\r\n );\r\n if (xpathe) {\r\n xpathe += `/${axis}::${nodeXpath}`;\r\n\r\n const count = getCountOfXPath(xpathe, sibling, docmt);\r\n\r\n if (count === 1) {\r\n xpathData.push({\r\n key: `xpath by ${axis}`,\r\n value: xpathe,\r\n });\r\n return;\r\n } else if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by ${axis}`,\r\n value: xpathe,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by ${axis}`,\r\n value: xpathe,\r\n count,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!isTarget) {\r\n let xpathe;\r\n xpathe = intermediateXpathStep(\r\n sibling,\r\n {\r\n name: \"text\",\r\n value: sibling.textContent,\r\n },\r\n isTarget\r\n );\r\n\r\n if (xpathe) {\r\n const count = getCountOfXPath(xpathe, sibling, docmt);\r\n\r\n if (count === 1) {\r\n xpathData.push({\r\n key: `xpath by ${axis}`,\r\n value: xpathe,\r\n });\r\n return;\r\n } else if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by ${axis}`,\r\n value: xpathe,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by ${axis}`,\r\n value: xpathe,\r\n count,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.log(`${axis} xpath-error`, error);\r\n }\r\n};\r\n\r\nfunction getXPathUsingAttributeAndText(\r\n attributes: Attr[],\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isTarget: boolean\r\n) {\r\n const { tagName } = targetElemt;\r\n const textContent = targetElemt.textContent.trim();\r\n for (const attrName of attributes) {\r\n if (checkBlockedAttributes(attrName, targetElemt, isTarget)) {\r\n let attrValue = attrName.nodeValue;\r\n\r\n attrValue = attrValue?.replace(\"removePointers\", \"\") ?? \"\";\r\n const elementName = attrName.name;\r\n const xpath = `//${tagName}[@${elementName}='${attrValue}' and text()='${textContent}']`;\r\n if (xpath) {\r\n const count = getCountOfXPath(xpath, targetElemt, docmt);\r\n if (count == 1) {\r\n return xpath;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst addRelativeXpaths = (\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean,\r\n attribute: Attr[]\r\n) => {\r\n try {\r\n let nodeXpath: string[] = [];\r\n let relativeXpath, relativeChildXpath;\r\n\r\n if (!xpathData.length && isIndex) {\r\n if (xpathDataWithIndex.length) {\r\n const xpathWithIndex = findXpathWithIndex(\r\n xpathDataWithIndex[0].value,\r\n targetElemt,\r\n docmt,\r\n xpathDataWithIndex[0].count\r\n );\r\n if (xpathWithIndex) {\r\n xpathData.push({\r\n key: xpathDataWithIndex[0].key,\r\n value: xpathWithIndex,\r\n });\r\n xpathDataWithIndex.pop();\r\n }\r\n }\r\n }\r\n\r\n console.log(attribute);\r\n if (!xpathData.length) {\r\n if (targetElemt.attributes) {\r\n for (const attrName of attribute) {\r\n let expression = intermediateXpathStep(\r\n targetElemt,\r\n {\r\n name: attrName.name,\r\n value: attrName.value,\r\n },\r\n isTarget\r\n );\r\n\r\n console.log(expression);\r\n if (expression) {\r\n nodeXpath.push(expression);\r\n }\r\n }\r\n }\r\n\r\n if (targetElemt.textContent) {\r\n let expression = intermediateXpathStep(\r\n targetElemt,\r\n {\r\n name: \"text\",\r\n value: targetElemt.textContent,\r\n },\r\n isTarget\r\n );\r\n\r\n console.log(expression);\r\n if (expression) {\r\n nodeXpath.push(expression);\r\n }\r\n }\r\n\r\n if (nodeXpath?.length) {\r\n for (let i = 0; i < nodeXpath.length; i++) {\r\n if (!xpathData.length) {\r\n getSiblingRelativeXPath(targetElemt, docmt, isTarget, nodeXpath[i]);\r\n\r\n if (!xpathData.length) {\r\n if (!relativeXpath) {\r\n relativeXpath = getParentRelativeXpath(\r\n targetElemt.parentElement!,\r\n docmt,\r\n targetElemt,\r\n isTarget\r\n );\r\n }\r\n\r\n console.log(relativeXpath);\r\n\r\n if (\r\n relativeXpath &&\r\n (relativeXpath.includes(\"@\") ||\r\n relativeXpath.includes(\"text()\") ||\r\n relativeXpath.includes(\".=\")) &&\r\n relativeXpath.match(/\\//g)?.length - 2 < 5\r\n ) {\r\n const fullRelativeXpath = relativeXpath + `/${nodeXpath[i]}`;\r\n const count = getCountOfXPath(\r\n fullRelativeXpath,\r\n targetElemt,\r\n docmt\r\n );\r\n\r\n if (count === 1) {\r\n xpathData.push({\r\n key: \"relative xpath by relative parent\",\r\n value: fullRelativeXpath,\r\n });\r\n } else if (count > 1 && isIndex) {\r\n const relativeXpathIndex = findXpathWithIndex(\r\n fullRelativeXpath,\r\n targetElemt,\r\n docmt,\r\n count\r\n );\r\n if (\r\n relativeXpathIndex &&\r\n getCountOfXPath(relativeXpathIndex, targetElemt, docmt) ===\r\n 1\r\n ) {\r\n xpathData.push({\r\n key: `relative xpath by relative parent ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: relativeXpathIndex,\r\n });\r\n }\r\n } else if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative parent ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: fullRelativeXpath,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative parent ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: fullRelativeXpath,\r\n count,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!xpathData.length) {\r\n if (!relativeChildXpath) {\r\n relativeChildXpath = getChildRelativeXpath(\r\n targetElemt,\r\n docmt,\r\n targetElemt\r\n );\r\n }\r\n\r\n if (\r\n relativeChildXpath &&\r\n (relativeChildXpath.includes(\"@\") ||\r\n relativeChildXpath.includes(\"text()\") ||\r\n relativeChildXpath.includes(\".=\"))\r\n ) {\r\n const fullRelativeXpath = `/${nodeXpath[i] + relativeChildXpath.substring(1)\r\n }`;\r\n const count = getCountOfXPath(\r\n fullRelativeXpath,\r\n targetElemt,\r\n docmt\r\n );\r\n\r\n if (count === 1) {\r\n xpathData.push({\r\n key: \"relative xpath by relative child\",\r\n value: fullRelativeXpath,\r\n });\r\n } else if (count > 1 && isIndex) {\r\n const relativeXpathIndex = findXpathWithIndex(\r\n fullRelativeXpath,\r\n targetElemt,\r\n docmt,\r\n count\r\n );\r\n if (\r\n relativeXpathIndex &&\r\n getCountOfXPath(relativeXpathIndex, targetElemt, docmt) ===\r\n 1\r\n ) {\r\n xpathData.push({\r\n key: `relative xpath by relative parent ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: relativeXpathIndex,\r\n });\r\n }\r\n } else if (count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative child ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: fullRelativeXpath,\r\n count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative child ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: fullRelativeXpath,\r\n count,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (\r\n xpathData?.length === 1 &&\r\n xpathData?.[0]?.value?.match(/\\[([0-9]+)\\]/gm)?.length! > 3 &&\r\n !referenceElementMode\r\n ) {\r\n if (targetElemt.textContent) {\r\n const txtXpath = getTextXPath(\r\n targetElemt,\r\n docmt,\r\n isIndex,\r\n false\r\n );\r\n if (txtXpath) {\r\n xpathData.unshift({\r\n key: `xpath by text${isIndex ? \"index\" : \"\"}`,\r\n value: txtXpath,\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (!xpathData.length) {\r\n let tempRelativeXpath = getUniqueParentXpath(\r\n targetElemt.parentElement!,\r\n docmt,\r\n targetElemt,\r\n isTarget,\r\n nodeXpath[i],\r\n isIndex\r\n );\r\n\r\n if (tempRelativeXpath) {\r\n xpathData.push({\r\n key: \"xpath by unique parent\",\r\n value: tempRelativeXpath,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return xpathData;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nexport const attributesBasedXPath = (\r\n attr: Attr,\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n let attrName;\r\n\r\n attrName = attr.name;\r\n let xpath = getPropertyXPath(\r\n targetElemt,\r\n docmt,\r\n `@${attrName}`,\r\n attr.value,\r\n isIndex,\r\n isTarget\r\n );\r\n\r\n return xpath;\r\n};\r\n\r\nexport const getUniqueClassName = (\r\n element: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n let value = element.className;\r\n if (typeof value !== \"string\") {\r\n value = \"\";\r\n }\r\n value = value?.replace(\"flndisabled\", \"disabled\");\r\n value = value?.replace(\"removePointers\", \"\");\r\n value = value?.trim();\r\n\r\n if (value) {\r\n return getPropertyXPath(element, docmt, `@class`, value, isIndex, isTarget);\r\n }\r\n};\r\n\r\nexport const getTextXPath = (\r\n element: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n if (element.textContent != \"\") {\r\n const text = getTextContent(element);\r\n\r\n if (text) {\r\n return getPropertyXPath(element, docmt, \".\", text, isIndex, isTarget);\r\n }\r\n }\r\n};\r\n\r\nconst addAllXPathAttributes = (\r\n attributes: Attr[],\r\n targetElemt: HTMLElement | Element,\r\n docmt: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n): { key: string; value: string }[] => {\r\n const attributesArray = attributes;\r\n try {\r\n attributesArray.map((attr) => {\r\n if (!(attr.name === \"className\" || attr.name === \"class\")) {\r\n if (checkBlockedAttributes(attr, targetElemt, isTarget)) {\r\n const xpth = attributesBasedXPath(\r\n attr,\r\n targetElemt,\r\n docmt,\r\n isIndex,\r\n isTarget\r\n );\r\n if (xpth) {\r\n xpathData.push({\r\n key: `xpath by ${attr.name}${isIndex ? \" index\" : \"\"}`,\r\n value: xpth,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n const txtXpath = getTextXPath(targetElemt, docmt, isIndex, isTarget);\r\n if (txtXpath) {\r\n xpathData.push({\r\n key: `xpath by text${isIndex ? \" index\" : \"\"}`,\r\n value: txtXpath,\r\n });\r\n }\r\n\r\n if (\r\n attributesArray.find((element) => element.name === \"className\") &&\r\n checkBlockedAttributes(\r\n attributesArray?.find((element) => element.name === \"className\")!,\r\n targetElemt,\r\n isTarget\r\n )\r\n ) {\r\n let xpath = getUniqueClassName(targetElemt, docmt, isIndex, isTarget);\r\n if (xpath) {\r\n xpathData.push({\r\n key: \"xpath by class\",\r\n value: xpath,\r\n });\r\n }\r\n }\r\n\r\n if (!xpathData.length) {\r\n const textAttribute = getXPathUsingAttributeAndText(\r\n attributes,\r\n targetElemt,\r\n docmt,\r\n isTarget\r\n );\r\n if (textAttribute)\r\n xpathData.push({\r\n key: \"xpath by textAttribute\",\r\n value: textAttribute,\r\n });\r\n }\r\n\r\n if (!xpathData.length && attributesArray.length > 1) {\r\n const combinationXpath = getAttributeCombinationXpath(\r\n targetElemt,\r\n docmt,\r\n attributesArray,\r\n isTarget\r\n );\r\n if (combinationXpath)\r\n xpathData.push({\r\n key: \"xpath by combination\",\r\n value: combinationXpath,\r\n });\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n return xpathData;\r\n};\r\n\r\nexport const parseDOM = (\r\n element: HTMLElement | Element,\r\n doc: Document,\r\n isIndex: boolean,\r\n isTarget: boolean\r\n) => {\r\n xpathData = [];\r\n console.log(element);\r\n const targetElemt = element;\r\n const docmt = targetElemt?.ownerDocument || doc;\r\n const tag = targetElemt.tagName;\r\n const { attributes } = targetElemt;\r\n addAllXPathAttributes(Array.from(attributes), targetElemt, docmt, isIndex, isTarget);\r\n if (!referenceElementMode) {\r\n if (xpathData.length) {\r\n const len = xpathData.length;\r\n for (let i = 0; i < len; i++) {\r\n let xpth = xpathData[i].value;\r\n xpth = \"//*\" + xpth.substring(\r\n xpth.indexOf(\"//\") + 2 + tag.length\r\n );\r\n const count = getCountOfXPath(xpth, element, docmt);\r\n if (count === 1) {\r\n xpathData.push({\r\n key: `${xpathData[i].key} regex`,\r\n value: xpth,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n console.log(xpathData);\r\n if (!xpathData.length) {\r\n addRelativeXpaths(\r\n targetElemt,\r\n docmt,\r\n isIndex,\r\n isTarget,\r\n Array.from(targetElemt.attributes)\r\n );\r\n }\r\n\r\n return xpathData;\r\n};\r\n\r\nconst xpath = {\r\n parseDOM,\r\n getTextXPath,\r\n getUniqueClassName,\r\n attributesBasedXPath,\r\n addAllXPathAttributes,\r\n addRelativeXpaths,\r\n getXPathUsingAttributeAndText,\r\n getSiblingRelativeXPath,\r\n getChildRelativeXpath,\r\n getParentRelativeXpath,\r\n getUniqueParentXpath,\r\n checkRelativeXpathRelation,\r\n};\r\n\r\nexport default xpath;\r\n","import { parseDOM } from \"./xpath.ts\";\r\nimport {\r\n findXpathWithIndex,\r\n getShadowRoot,\r\n getTextContent,\r\n escapeCharacters,\r\n getCountOfXPath,\r\n checkBlockedAttributes,\r\n getAbsoluteXPath,\r\n isSvg,\r\n getCombinationXpath,\r\n getTextXpathFunction,\r\n replaceTempAttributes,\r\n replaceActualAttributes,\r\n getReferenceElementsXpath,\r\n getRelativeXPath,\r\n findMatchingParenthesis,\r\n removeParenthesis\r\n} from \"./xpathHelpers.ts\";\r\n\r\nlet xpathDataWithIndex: any[] = [];\r\nlet xpathData: { key: string; value: string }[] = [];\r\nconst reWhiteSpace = /^[\\S]+( [\\S]+)*$/gi;\r\n\r\nexport const findRelativeXpath = (\r\n element1: HTMLElement | Element,\r\n element2: HTMLElement | Element,\r\n docmt: Document,\r\n xpaths1: any[],\r\n xpaths2: any[],\r\n isIndex: boolean,\r\n multiElementReferenceMode: boolean = false\r\n) => {\r\n // debugger;\r\n const par1 = element1.parentElement;\r\n const par2 = element2.parentElement;\r\n let rel_xpath: any[] = [];\r\n\r\n let tempElement;\r\n let finalXpaths: any[] = [];\r\n\r\n if (isIndex) {\r\n if (xpathDataWithIndex.length) {\r\n const xpathWithIndex = findXpathWithIndex(\r\n xpathDataWithIndex[0].value,\r\n element2,\r\n element2.ownerDocument,\r\n xpathDataWithIndex[0].count\r\n );\r\n if (xpathWithIndex) {\r\n finalXpaths = finalXpaths.concat({\r\n key: `${xpathDataWithIndex[0]?.key\r\n ? xpathDataWithIndex[0]?.key\r\n : \"xpath with \"\r\n } index`,\r\n value: xpathWithIndex,\r\n });\r\n xpathDataWithIndex.pop();\r\n }\r\n }\r\n }\r\n\r\n if (!finalXpaths.length) {\r\n // both are same\r\n if (element1.isSameNode(element2)) {\r\n // rel_xpath = xpath1 + \"/self::\" + element1.tagName;\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"self\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) finalXpaths = finalXpaths.concat(rel_xpath);\r\n }\r\n\r\n // parent\r\n tempElement = element1.parentElement;\r\n\r\n if (tempElement === element2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"parent\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) finalXpaths = finalXpaths.concat(rel_xpath);\r\n }\r\n\r\n // ancestor\r\n tempElement = element1.parentElement;\r\n\r\n while (tempElement !== null) {\r\n if (tempElement === element2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"ancestor\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n\r\n tempElement = tempElement.parentNode;\r\n }\r\n\r\n // ancestor-or-self\r\n tempElement = element1;\r\n do {\r\n if (tempElement === element2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"ancestor-or-self\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n\r\n tempElement = tempElement.parentNode;\r\n } while (tempElement !== null);\r\n\r\n // both has same parent\r\n if (par1?.isSameNode(par2)) {\r\n for (\r\n let m = element1.nextElementSibling;\r\n m != null;\r\n m = m.nextElementSibling\r\n ) {\r\n if (m != null && m.isSameNode(element2)) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"following-sibling\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n for (\r\n let n = element1.previousElementSibling;\r\n n != null;\r\n n = n.previousElementSibling\r\n ) {\r\n if (n != null && n.isSameNode(element2)) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"preceding-sibling\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // child\r\n if (element1?.children?.length) {\r\n for (let m = element1.children[0]; m !== null; m = m?.nextElementSibling!) {\r\n if (m === element2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"child\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // following\r\n const relation = element1.compareDocumentPosition(element2);\r\n if (relation === 2) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"preceding\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n }\r\n\r\n if (relation === 4) {\r\n rel_xpath = getXpathRelationExpression(\r\n element1,\r\n element2,\r\n \"following\",\r\n xpaths1,\r\n xpaths2,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n }\r\n if (rel_xpath) {\r\n finalXpaths = finalXpaths.concat(rel_xpath);\r\n }\r\n\r\n const descendantXpath = getDescendantXpath(\r\n [element1, element2],\r\n docmt,\r\n xpaths1,\r\n xpaths2,\r\n \"descendant\",\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (descendantXpath) finalXpaths = finalXpaths.concat(descendantXpath);\r\n\r\n const descendantSelfXpath = getDescendantXpath(\r\n [element1, element2],\r\n docmt,\r\n xpaths1,\r\n xpaths2,\r\n \"descedant-or-self\",\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (descendantSelfXpath) {\r\n finalXpaths = finalXpaths.concat(descendantSelfXpath);\r\n }\r\n }\r\n\r\n if (finalXpaths.length) {\r\n if (finalXpaths.length > 1) {\r\n finalXpaths.sort(function (a, b) {\r\n return a.value.length - b.value.length;\r\n });\r\n }\r\n\r\n if (finalXpaths.filter((x) => !x.key?.includes(\"index\"))?.length) {\r\n return [finalXpaths.filter((x) => !x.key?.includes(\"index\"))[0]];\r\n }\r\n return [finalXpaths[0]];\r\n }\r\n};\r\n\r\nconst descendantExpression = (\r\n refExpectElement: Array<HTMLElement | Element>,\r\n xpath2: string,\r\n relation: string,\r\n docmt: Node,\r\n isIndex: any,\r\n expCommonParentXpathElements: string | any[],\r\n step4: string,\r\n refCommonParentXpathElementLength: number = 0,\r\n multiElementReferenceMode: boolean = false\r\n) => {\r\n let finalExpectedElementXpath: string | undefined = \"\";\r\n\r\n if (\r\n xpath2.split(/\\/(?=(?:[^']*\\'[^\\']*\\')*[^\\']*$)/g)?.length >=\r\n expCommonParentXpathElements.length\r\n ) {\r\n const xpaths2Els: string[] = [];\r\n const xpath2Elements = xpath2.split(/\\/(?=(?:[^']*\\'[^\\']*\\')*[^\\']*$)/g);\r\n for (let x = 1; x <= expCommonParentXpathElements.length; x++) {\r\n xpaths2Els.unshift(\r\n x === expCommonParentXpathElements.length\r\n ? expCommonParentXpathElements[\r\n expCommonParentXpathElements.length - x\r\n ]\r\n : xpath2Elements[xpath2Elements.length - x]\r\n );\r\n }\r\n const traverseXpath = getTraverseXpathExpression(\r\n `${step4 +\r\n (refCommonParentXpathElementLength\r\n ? \"]\".repeat(refCommonParentXpathElementLength)\r\n : \"\")\r\n }`,\r\n xpaths2Els,\r\n refExpectElement[refExpectElement.length - 1],\r\n refExpectElement,\r\n docmt,\r\n relation,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (traverseXpath) {\r\n return traverseXpath;\r\n }\r\n } else {\r\n finalExpectedElementXpath = `//${step4 +\r\n (refCommonParentXpathElementLength\r\n ? \"]\".repeat(refCommonParentXpathElementLength)\r\n : \"\")\r\n }/${relation}::${replaceActualAttributes(\r\n xpath2,\r\n refExpectElement[refExpectElement.length - 1]\r\n )}`;\r\n let rel_count = getCountOfXPath(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt\r\n );\r\n if (rel_count === 1) {\r\n return [\r\n {\r\n key: `dynamic ${relation}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n if (rel_count > 1) {\r\n if (isIndex) {\r\n finalExpectedElementXpath = findXpathWithIndex(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt,\r\n rel_count\r\n );\r\n if (finalExpectedElementXpath) {\r\n rel_count = getCountOfXPath(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt\r\n );\r\n if (rel_count === 1) {\r\n return [\r\n {\r\n key: `dynamic ${relation} ${isIndex ? \" index\" : \"\"}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst getDescendantXpath = (\r\n refExpectElement: Array<HTMLElement | Element>,\r\n docmt: Document,\r\n xpaths1: { key: string; value: string }[],\r\n xpaths2: { key: string; value: string }[],\r\n relation: \"descendant\" | \"descedant-or-self\",\r\n isIndex: boolean = false,\r\n multiElementReferenceMode: boolean = false\r\n) => {\r\n const refElement: HTMLElement | Element = refExpectElement[refExpectElement.length - 2];\r\n const expElement: HTMLElement | Element = refExpectElement[refExpectElement.length - 1];\r\n const expElementDocmnt = getShadowRoot(expElement) ?? expElement.ownerDocument;\r\n\r\n const refAbsoluteXpath =\r\n xpaths1.find((x) => x?.key?.includes(\"absolute\"))?.value ||\r\n getAbsoluteXPath(refElement, refElement.ownerDocument);\r\n\r\n const refFullXpathElements: any[] = [];\r\n const refFullXpathElementsWithoutNumber: any[] = [];\r\n refAbsoluteXpath.split(\"/\").map((x) => refFullXpathElements.push(x));\r\n refFullXpathElements.map((x) =>\r\n refFullXpathElementsWithoutNumber.push(x.replace(/\\[([0-9]+)\\]/gm, \"\"))\r\n );\r\n\r\n const expAbsoluteXpath =\r\n xpaths2.find((x) => x?.key?.includes(\"absolute\"))?.value ||\r\n getAbsoluteXPath(expElement, expElement.ownerDocument);\r\n\r\n const expFullXpathElements: any[] = [];\r\n const expFullXpathElementsWithoutNumber: any[] = [];\r\n expAbsoluteXpath.split(\"/\").map((x) => expFullXpathElements.push(x));\r\n expFullXpathElements.map((x) =>\r\n expFullXpathElementsWithoutNumber.push(x.replace(/\\[([0-9]+)\\]/gm, \"\"))\r\n );\r\n\r\n for (\r\n var parentElementNumber = 0;\r\n parentElementNumber < refFullXpathElements.length;\r\n parentElementNumber++\r\n ) {\r\n if (\r\n refFullXpathElements[parentElementNumber] !=\r\n expFullXpathElements[parentElementNumber]\r\n ) {\r\n break;\r\n }\r\n }\r\n\r\n const refCommonParentXpathElements = [];\r\n for (let i = parentElementNumber - 1; i < refFullXpathElements.length; i++) {\r\n if (refFullXpathElements[i]) {\r\n refCommonParentXpathElements.push(refFullXpathElementsWithoutNumber[i]);\r\n }\r\n }\r\n\r\n const expCommonParentXpathElements: string[] = [];\r\n for (\r\n let j =\r\n relation === \"descendant\" ? parentElementNumber : parentElementNumber - 1;\r\n j < expFullXpathElements.length;\r\n j++\r\n ) {\r\n if (expFullXpathElements[j]) {\r\n if (expCommonParentXpathElements.length)\r\n expCommonParentXpathElements.push(expFullXpathElementsWithoutNumber[j]);\r\n else\r\n expCommonParentXpathElements.push(\r\n expFullXpathElementsWithoutNumber[j].replace(/\\[([0-9]+)\\]/gm, \"\")\r\n );\r\n }\r\n }\r\n\r\n xpathData = xpaths2;\r\n\r\n let nodeXpath2;\r\n if (refExpectElement[refExpectElement.length - 2].textContent) {\r\n if (\r\n !reWhiteSpace.test(\r\n refExpectElement[refExpectElement.length - 2].textContent\r\n )\r\n ) {\r\n nodeXpath2 = isSvg(refExpectElement[refExpectElement.length - 2])\r\n ? `*[local-name()='${refExpectElement[refExpectElement.length - 2].tagName\r\n }' and ${getTextXpathFunction(\r\n refExpectElement[refExpectElement.length - 2]\r\n )})]`\r\n : `${refExpectElement[refExpectElement.length - 2].tagName\r\n }[${getTextXpathFunction(\r\n refExpectElement[refExpectElement.length - 2]\r\n )}]`;\r\n } else {\r\n nodeXpath2 = isSvg(refExpectElement[refExpectElement.length - 2])\r\n ? `*[local-name()='${refExpectElement[refExpectElement.length - 2].tagName\r\n }' and .=${escapeCharacters(\r\n getTextContent(refExpectElement[refExpectElement.length - 2])\r\n )}]`\r\n : `${refExpectElement[refExpectElement.length - 2].tagName\r\n }[.=${escapeCharacters(\r\n getTextContent(refExpectElement[refExpectElement.length - 2])\r\n )}]`;\r\n }\r\n\r\n refCommonParentXpathElements[refCommonParentXpathElements.length - 1] =\r\n nodeXpath2;\r\n\r\n const refCommonParentXpath = refCommonParentXpathElements.join(\"[\");\r\n const refCommonParentXpathElementLength =\r\n refCommonParentXpathElements.length - 1;\r\n\r\n const step4 = refCommonParentXpath;\r\n\r\n for (let i = 0; i < xpathData.length; i++) {\r\n let xpath2;\r\n\r\n if (xpathData[i].value.startsWith(\"//\")) {\r\n xpath2 = xpathData[i].value.substring(\r\n xpathData[i].value.indexOf(\"//\") + 2\r\n );\r\n } else {\r\n xpath2 = xpathData[i].value; // No need to modify the value\r\n }\r\n if (xpath2) {\r\n return descendantExpression(\r\n refExpectElement,\r\n xpath2,\r\n relation,\r\n expElementDocmnt || docmt,\r\n isIndex,\r\n expCommonParentXpathElements,\r\n step4,\r\n refCommonParentXpathElementLength,\r\n multiElementReferenceMode\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (refExpectElement[refExpectElement.length - 2].attributes) {\r\n for (const attrName of Array.from(refExpectElement[refExpectElement.length - 2]\r\n .attributes)) {\r\n if (\r\n checkBlockedAttributes(attrName, refExpectElement[refExpectElement.length - 2], false)\r\n ) {\r\n let attrValue = attrName.nodeValue;\r\n if (attrValue) {\r\n attrValue = attrValue.replace(\"removePointers\", \"\");\r\n const elementName = attrName.name;\r\n\r\n nodeXpath2 = isSvg(refExpectElement[refExpectElement.length - 2])\r\n ? `*[local-name()='${refExpectElement[refExpectElement.length - 2].tagName\r\n }' and @${elementName}=${escapeCharacters(attrValue)}]`\r\n : `${refExpectElement[refExpectElement.length - 2].tagName\r\n }[@${elementName}=${escapeCharacters(attrValue)}]`;\r\n\r\n refCommonParentXpathElements[\r\n refCommonParentXpathElements.length - 1\r\n ] = nodeXpath2;\r\n\r\n const refCommonParentXpath = refCommonParentXpathElements.join(\"[\");\r\n const refCommonParentXpathElementLength =\r\n refCommonParentXpathElements.length - 1;\r\n\r\n const step4 = refCommonParentXpath;\r\n\r\n for (let i = 0; i < xpathData.length; i++) {\r\n let xpath2;\r\n if (xpathData[i].value.startsWith(\"//\")) {\r\n xpath2 = xpathData[i].value.substring(\r\n xpathData[i].value.indexOf(\"//\") + 2\r\n );\r\n } else {\r\n xpath2 = xpathData[i].value; // No need to modify the value\r\n }\r\n\r\n return descendantExpression(\r\n refExpectElement,\r\n xpath2,\r\n relation,\r\n expElementDocmnt || docmt,\r\n isIndex,\r\n expCommonParentXpathElements,\r\n step4,\r\n refCommonParentXpathElementLength,\r\n multiElementReferenceMode\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const attrName of Array.from(refExpectElement[refExpectElement.length - 2]\r\n .attributes)) {\r\n if (\r\n checkBlockedAttributes(attrName, refExpectElement[refExpectElement.length - 2], false)\r\n ) {\r\n let attrValue = attrName.nodeValue;\r\n if (attrValue) {\r\n attrValue = attrValue.replace(\"removePointers\", \"\");\r\n const combinationXpath = getCombinationXpath(\r\n attrName,\r\n refExpectElement[refExpectElement.length - 2]\r\n );\r\n if (combinationXpath) {\r\n if (combinationXpath.startsWith(\"//\")) {\r\n nodeXpath2 = combinationXpath.substring(\r\n combinationXpath.indexOf(\"//\") + 2\r\n );\r\n } else {\r\n nodeXpath2 = combinationXpath; // No need to modify the value\r\n }\r\n\r\n refCommonParentXpathElements[\r\n refCommonParentXpathElements.length - 1\r\n ] = nodeXpath2;\r\n\r\n const refCommonParentXpath = refCommonParentXpathElements.join(\"[\");\r\n const refCommonParentXpathElementLength =\r\n refCommonParentXpathElements.length - 1;\r\n\r\n const step4 = refCommonParentXpath;\r\n\r\n for (let i = 0; i < xpathData.length; i++) {\r\n let xpath2;\r\n if (xpathData[i].value.startsWith(\"//\")) {\r\n xpath2 = xpathData[i].value.substring(\r\n xpathData[i].value.indexOf(\"//\") + 2\r\n );\r\n } else {\r\n xpath2 = xpathData[i].value; // No need to modify the value\r\n }\r\n\r\n return descendantExpression(\r\n refExpectElement,\r\n xpath2,\r\n relation,\r\n expElementDocmnt || docmt,\r\n isIndex,\r\n expCommonParentXpathElements,\r\n step4,\r\n refCommonParentXpathElementLength,\r\n multiElementReferenceMode\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const refCommonParentXpath = refCommonParentXpathElements.join(\"[\");\r\n const refCommonParentXpathElementLength =\r\n refCommonParentXpathElements.length - 1;\r\n const step4 = refCommonParentXpath;\r\n const traverseXpath = getTraverseXpathExpression(\r\n `${step4 +\r\n (refCommonParentXpathElementLength\r\n ? \"]\".repeat(refCommonParentXpathElementLength)\r\n : \"\")\r\n }`,\r\n expCommonParentXpathElements,\r\n refExpectElement[refExpectElement.length - 1],\r\n refExpectElement,\r\n docmt,\r\n relation,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n if (traverseXpath) {\r\n return traverseXpath;\r\n }\r\n};\r\n\r\nconst getXpathRelationExpression = (\r\n element1: HTMLElement | Element,\r\n element2: HTMLElement | Element,\r\n relation: string,\r\n xpath1: any[],\r\n xpath2: any[],\r\n isIndex: boolean,\r\n multiElementReferenceMode: boolean\r\n) => {\r\n let xpaths1;\r\n let xpaths2;\r\n console.log('getXpathRelationExpression', relation)\r\n const finalXpaths: { key: string; value: any }[] = [];\r\n\r\n try {\r\n xpaths1 = xpath1.filter((x) => !x?.key?.includes(\"absolute\"));\r\n\r\n xpaths2 = xpath2.filter((x) => !x?.key?.includes(\"absolute\"));\r\n\r\n for (let i = 0; i < xpaths1.length; i++) {\r\n for (let j = 0; j < xpaths2.length; j++) {\r\n let rel_xpath: string | undefined = `//${xpaths1[i].value.indexOf(\"//\") !== 0\r\n ? replaceActualAttributes(xpaths1[i].value, element1)\r\n : replaceActualAttributes(\r\n xpaths1[i].value.substring(xpaths1[i].value.indexOf(\"//\") + 2),\r\n element1\r\n )\r\n }/${relation}::${xpaths2[j].value.indexOf(\"//\") !== 0\r\n ? replaceActualAttributes(xpaths2[j].value, element2)\r\n : replaceActualAttributes(\r\n xpaths2[j].value.substring(xpaths2[j].value.indexOf(\"//\") + 2),\r\n element2\r\n )\r\n }`;\r\n console.log('getXpathRelationExpression', rel_xpath)\r\n const rel_count = getCountOfXPath(\r\n rel_xpath,\r\n element2,\r\n element2.ownerDocument\r\n );\r\n if (rel_count > 1) {\r\n if (isIndex) {\r\n rel_xpath = findXpathWithIndex(\r\n rel_xpath,\r\n element2,\r\n element2.ownerDocument,\r\n rel_count\r\n );\r\n if (rel_xpath) {\r\n finalXpaths.push({\r\n key: `dynamic ${relation}${isIndex ? \" index\" : \"\"}`,\r\n value: replaceTempAttributes(rel_xpath),\r\n });\r\n return finalXpaths;\r\n }\r\n } else if (rel_count > 1) {\r\n if (xpathDataWithIndex.length) {\r\n if (rel_count < xpathDataWithIndex[0].count) {\r\n xpathDataWithIndex.pop();\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative child ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: rel_xpath,\r\n count: rel_count,\r\n });\r\n }\r\n } else {\r\n xpathDataWithIndex.push({\r\n key: `relative xpath by relative child ${isIndex ? \"index\" : \"\"\r\n }`,\r\n value: rel_xpath,\r\n count: rel_count,\r\n });\r\n }\r\n }\r\n } else if (rel_count === 1) {\r\n finalXpaths.push({\r\n key: `dynamic ${relation}`,\r\n value: replaceTempAttributes(rel_xpath),\r\n });\r\n return finalXpaths;\r\n }\r\n }\r\n }\r\n if (!finalXpaths.length) {\r\n for (let i = 0; i < xpaths1.length; i++) {\r\n for (let j = 0; j < xpaths2.length; j++) {\r\n const tempPath = `${xpaths2[j].value.indexOf(\"//\") !== 0\r\n ? xpaths2[j].value\r\n : xpaths2[j].value.substring(xpaths2[j].value.indexOf(\"//\") + 2)\r\n }`;\r\n const xpath2Elements: string[] = tempPath.split(\r\n /\\/(?=(?:[^']*\\'[^\\']*\\')*[^\\']*$)/g\r\n );\r\n if (xpath2Elements.length > 1) {\r\n const traverseXpath = getTraverseXpathExpression(\r\n `${xpaths1[i].value.indexOf(\"//\") !== 0\r\n ? replaceActualAttributes(xpaths1[i].value, element1)\r\n : replaceActualAttributes(\r\n xpaths1[i].value.substring(\r\n xpaths1[i].value.indexOf(\"//\") + 2\r\n ),\r\n element1\r\n )\r\n }`,\r\n xpath2Elements,\r\n element2,\r\n [element1, element2],\r\n element2.ownerDocument,\r\n relation,\r\n isIndex,\r\n multiElementReferenceMode\r\n );\r\n\r\n console.log('getXpathRelationExpression traverseXpath', traverseXpath)\r\n if (traverseXpath) {\r\n finalXpaths.concat(traverseXpath);\r\n return finalXpaths;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n return finalXpaths;\r\n};\r\n\r\nconst getReferenceElementXpath = (element: HTMLElement | Element) => {\r\n let xpaths1: {\r\n key: string;\r\n value: string;\r\n }[] = [];\r\n\r\n xpaths1 = parseDOM(element, element.ownerDocument, false, false);\r\n\r\n if (!xpaths1?.length) {\r\n xpaths1 = parseDOM(element, element.ownerDocument, true, false);\r\n xpaths1 = xpaths1?.map((x) =>\r\n x.value.charAt(0) == \"(\" &&\r\n findMatchingParenthesis(x.value, 0) + 1 === x.value.lastIndexOf(\"[\")\r\n ? { key: \"\", value: removeParenthesis(x.value) }\r\n : { key: \"\", value: x.value }\r\n );\r\n } else {\r\n let xpaths = parseDOM(element, element.ownerDocument, true, false);\r\n if (xpaths?.length) {\r\n xpaths = xpaths?.map((x) =>\r\n x.value.charAt(0) == \"(\" &&\r\n findMatchingParenthesis(x.value, 0) + 1 === x.value.lastIndexOf(\"[\")\r\n ? { key: \"\", value: removeParenthesis(x.value) }\r\n : { key: \"\", value: x.value }\r\n );\r\n xpaths1 = xpaths1.concat(xpaths);\r\n }\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n xpaths1 = [\r\n {\r\n key: \"\",\r\n value: getRelativeXPath(element, element.ownerDocument, false, false, Array.from(element.attributes)),\r\n },\r\n ];\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n xpaths1 = [\r\n {\r\n key: \"\",\r\n value: getRelativeXPath(element, element.ownerDocument, true, false, Array.from(element.attributes)),\r\n },\r\n ];\r\n xpaths1 = xpaths1?.map((x) =>\r\n x.value.charAt(0) == \"(\" &&\r\n findMatchingParenthesis(x.value, 0) + 1 === x.value.lastIndexOf(\"[\")\r\n ? { key: \"\", value: removeParenthesis(x.value) }\r\n : { key: \"\", value: x.value }\r\n );\r\n }\r\n\r\n if (!xpaths1?.length) {\r\n xpaths1 = getReferenceElementsXpath(element, element.ownerDocument, false);\r\n } else {\r\n const xpaths = getReferenceElementsXpath(\r\n element,\r\n element.ownerDocument,\r\n false\r\n );\r\n if (xpaths?.length) {\r\n xpaths1 = xpaths1.concat(xpaths);\r\n }\r\n }\r\n\r\n const referenceXpathElement = getAbsoluteXPath(\r\n element,\r\n element.ownerDocument\r\n );\r\n xpaths1 = xpaths1.filter((x) => x.value !== referenceXpathElement);\r\n\r\n xpaths1.push({\r\n key: \"absolute xpath\",\r\n value: referenceXpathElement.slice(1),\r\n });\r\n\r\n return xpaths1;\r\n};\r\n\r\nconst getTraverseXpathExpression = (\r\n xpathe1: string,\r\n absoluteXpathElements: string[],\r\n element2: HTMLElement | Element,\r\n refExpectElement: Array<HTMLElement | Element>,\r\n docmt: Node,\r\n relation: string,\r\n isIndex: boolean,\r\n multiElementReferenceMode: boolean\r\n) => {\r\n let finalExpectedElementXpath: string | undefined;\r\n if (!multiElementReferenceMode) {\r\n for (let x = 1; x <= absoluteXpathElements.length; x++) {\r\n const xpath2 = absoluteXpathElements\r\n .slice(absoluteXpathElements.length - x, absoluteXpathElements.length)\r\n .join(\"/\");\r\n finalExpectedElementXpath = `//${xpathe1}/${relation}::${replaceActualAttributes(\r\n xpath2,\r\n element2\r\n )}`;\r\n const rel_count = getCountOfXPath(\r\n finalExpectedElementXpath,\r\n element2,\r\n docmt\r\n );\r\n if (rel_count === 1) {\r\n return [\r\n {\r\n key: `dynamic ${relation}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n if (rel_count > 1) {\r\n if (isIndex) {\r\n finalExpectedElementXpath = findXpathWithIndex(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt,\r\n rel_count\r\n );\r\n if (finalExpectedElementXpath) {\r\n return [\r\n {\r\n key: `dynamic ${relation}${isIndex ? \" index\" : \"\"}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const xpath2 = absoluteXpathElements.join(\"/\");\r\n finalExpectedElementXpath = `//${xpathe1}/${relation}::${replaceActualAttributes(\r\n xpath2,\r\n element2\r\n )}`;\r\n const rel_count = getCountOfXPath(\r\n finalExpectedElementXpath,\r\n element2,\r\n docmt\r\n );\r\n if (rel_count === 1) {\r\n return [\r\n {\r\n key: `dynamic ${relation}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n if (rel_count > 1) {\r\n if (isIndex) {\r\n finalExpectedElementXpath = findXpathWithIndex(\r\n finalExpectedElementXpath,\r\n refExpectElement[refExpectElement.length - 1],\r\n docmt,\r\n rel_count\r\n );\r\n if (finalExpectedElementXpath) {\r\n return [\r\n {\r\n key: `dynamic ${relation}${isIndex ? \" index\" : \"\"}`,\r\n value: replaceTempAttributes(finalExpectedElementXpath),\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst referenceXpath = {\r\n findRelativeXpath,\r\n getDescendantXpath,\r\n getXpathRelationExpression,\r\n getTraverseXpathExpression,\r\n getReferenceElementXpath,\r\n};\r\n\r\nexport default referenceXpath;\r\n","import { ElementRecord, Locator } from \"../types/locator.ts\";\r\nimport { parseDOM } from \"./xpath.ts\";\r\nimport { normalizeXPath } from \"./xpathHelpers.ts\";\r\n\r\ntype ElementDetails = {\r\n id?: string | null;\r\n className?: string | null;\r\n xpathByText?: string | null;\r\n xpathById?: string | null;\r\n xpathByClass?: string | null;\r\n xpathAbsolute?: string | null;\r\n xpathByName?: string | null;\r\n xpathByPlaceholder?: string | null;\r\n xpathByType?: string | null;\r\n visibleText?: string | null;\r\n relativeXpath?: string | null;\r\n [key: string]: any;\r\n};\r\n\r\nconst getElementFromShadowRoot = (\r\n el: Element | ShadowRoot,\r\n selector: string\r\n): Element | null => {\r\n // const shadowRoot = (element as HTMLElement).shadowRoot;\r\n // if (shadowRoot && !selector.includes(\"dynamic\")) {\r\n // return shadowRoot.querySelector(selector);\r\n // }\r\n\r\n const elements = Array.from(el.querySelectorAll('*'));\r\n\r\n try {\r\n for (let i = 0; i < elements.length; i++) {\r\n if (elements[i].shadowRoot) {\r\n const { shadowRoot } = elements[i];\r\n if (shadowRoot) {\r\n getElementFromShadowRoot(shadowRoot, selector);\r\n if (shadowRoot && !selector.includes(\"dynamic\")) {\r\n return shadowRoot.querySelector(selector);\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return null;\r\n};\r\n\r\nconst getId = (element: Element | null): string | null => {\r\n return element?.id || null;\r\n};\r\n\r\nconst getClassName = (element: Element): string | null => {\r\n return (element as HTMLElement).className || null;\r\n};\r\n\r\nconst getVisibleText = (element: Element): string | null => {\r\n return element.textContent?.trim() || null;\r\n};\r\n\r\nconst getName = (element: Element): string | null => {\r\n const elementEl = element as HTMLElement;\r\n\r\n if (elementEl.hasAttribute(\"name\")) {\r\n const attrValue = elementEl.getAttribute(\"name\");\r\n const name = `${attrValue}`;\r\n return name || null;\r\n }\r\n return null;\r\n};\r\n\r\nconst relations: string[] = [\r\n \"/preceding-sibling\",\r\n \"/following-sibling\",\r\n \"/parent\",\r\n \"/descendant\",\r\n \"/ancestor\",\r\n \"/self\",\r\n \"/ancestor-or-self\",\r\n \"/child\",\r\n \"/preceding\",\r\n \"/following\",\r\n];\r\n\r\nfunction getElementFromXPath(\r\n docmt: Document,\r\n xpath: string\r\n): Element | null {\r\n const window = docmt.defaultView;\r\n if (!window) return null;\r\n\r\n const xpathEvaluator = new window.XPathEvaluator();\r\n const xpathResult = xpathEvaluator.evaluate(\r\n xpath,\r\n docmt,\r\n null,\r\n window.XPathResult.FIRST_ORDERED_NODE_TYPE,\r\n null\r\n );\r\n return xpathResult.singleNodeValue as Element | null;\r\n}\r\n\r\nfunction checkReferenceElementIsValid(\r\n locator: string,\r\n relation: string,\r\n docmt: Document\r\n): string | null {\r\n if (locator.includes(relation)) {\r\n const locatotSplitArray: string[] = locator.split(relation);\r\n const sourceLoc = locatotSplitArray[0].trim();\r\n const window = docmt.defaultView;\r\n if (!window) return null;\r\n if (!locator.includes(\"dynamic\")) {\r\n const xpathEvaluator = new window.XPathEvaluator();\r\n const xpathResult = xpathEvaluator.evaluate(\r\n sourceLoc,\r\n docmt,\r\n null,\r\n window.XPathResult.FIRST_ORDERED_NODE_TYPE,\r\n null\r\n );\r\n\r\n const sourceElement = xpathResult.singleNodeValue;\r\n if (sourceElement) {\r\n const xpathResultComplete = xpathEvaluator.evaluate(\r\n locator,\r\n docmt,\r\n null,\r\n window.XPathResult.FIRST_ORDERED_NODE_TYPE,\r\n null\r\n );\r\n const completeElement = xpathResultComplete.singleNodeValue;\r\n let relativeXpath: string;\r\n if (completeElement) {\r\n relativeXpath = locator;\r\n return relativeXpath;\r\n } else {\r\n console.error(\"Complete Locator is Invalid:\", locator);\r\n relativeXpath = locator;\r\n return relativeXpath;\r\n }\r\n } else {\r\n console.error(\"Source Locator Not Found:\", sourceLoc);\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nconst getElementsFromHTML = (\r\n record: ElementRecord,\r\n docmt: Document\r\n): ElementDetails | null => {\r\n const elementsToRemove = docmt.querySelectorAll(\r\n \"script, style, link[rel='stylesheet'], meta, noscript, embed, object, param, source, svg\"\r\n );\r\n\r\n if (elementsToRemove) {\r\n elementsToRemove.forEach((tag) => {\r\n (tag as Element).remove();\r\n });\r\n }\r\n\r\n const finalLocatorsSet: Set<string> = new Set();\r\n let finalLocators: any[] = [];\r\n\r\n function createLocator(base: any, overrides: Partial<any> = {}) {\r\n const newLocator: any = {\r\n name: overrides.name ?? base?.name,\r\n type: overrides.type ?? base?.type,\r\n value: overrides.value ?? base?.value,\r\n reference: overrides.reference ?? base?.reference,\r\n status: overrides.status ?? base?.status,\r\n isRecorded: overrides.isRecorded ?? base?.isRecorded,\r\n };\r\n\r\n if (overrides.hasOwnProperty(\"isSelfHealed\")) {\r\n newLocator.isSelfHealed = overrides.isSelfHealed;\r\n } else if (base?.hasOwnProperty(\"isSelfHealed\")) {\r\n newLocator.isSelfHealed = base.isSelfHealed;\r\n }\r\n\r\n pushUniqueLocator(newLocator);\r\n }\r\n\r\n function pushUniqueLocator(obj: any) {\r\n const key = `${obj.name}:${obj.value}`;\r\n if (!finalLocatorsSet.has(key)) {\r\n finalLocatorsSet.add(key);\r\n finalLocators.push(obj);\r\n }\r\n }\r\n\r\n /** Locator Value Cleaner (Handles Special Scenarios) **/\r\n const cleanLocatorValue = (\r\n val: string | null | undefined,\r\n type?: string,\r\n isRecorded?: string\r\n ): string | null => {\r\n if (!val) return null;\r\n\r\n let cleaned = val.trim();\r\n\r\n // Return null for empty or literal \"null\"\r\n if (!cleaned || cleaned.toLowerCase() === \"null\") return null;\r\n\r\n // Unescape any escaped quotes\r\n cleaned = cleaned.replace(/\\\\\"/g, '\"').replace(/\\\\'/g, \"'\");\r\n\r\n // Remove surrounding single or double quotes\r\n cleaned = cleaned.replace(/^['\"](.+?)['\"]$/, \"$1\");\r\n\r\n // Replace double single quotes with a single quote inside XPath\r\n cleaned = cleaned.replace(/''/g, \"'\");\r\n\r\n // Normalize double quotes in XPath attribute selectors [@id=\"\" -> [@id='']\r\n cleaned = cleaned.replace(\r\n /\\[@(id|name)=['\"]{2}(.+?)['\"]{2}\\]/g,\r\n \"[@$1='$2']\"\r\n );\r\n\r\n // For DOM selectors (id or name), remove ALL quotes\r\n if (type === \"id\" || type === \"name\") {\r\n cleaned = cleaned.replace(/['\"]/g, \"\").trim();\r\n }\r\n\r\n if (type === \"xpath\" && isRecorded === \"Y\" && !val.startsWith(\"//\"))\r\n return null;\r\n\r\n // Final check for empty strings\r\n if (!cleaned || /^['\"]{2}$/.test(cleaned)) return null;\r\n\r\n return cleaned;\r\n };\r\n\r\n locators: for (const locator of record.locators) {\r\n try {\r\n const isRecorded = String(locator.isRecorded || \"\");\r\n const recordedNLocators = record.locators.filter((l) => l.isRecorded === \"N\");\r\n\r\n if (recordedNLocators.length > 0) {\r\n for (const locator of recordedNLocators) {\r\n createLocator(locator);\r\n }\r\n }\r\n\r\n const isDynamic = String(locator.value || locator.type || \"\");\r\n if (\r\n isDynamic.includes(\"dynamic\") ||\r\n isDynamic.match(\"dynamic\") ||\r\n isDynamic.includes(\"{\") ||\r\n isDynamic.includes(\"}\")\r\n ) {\r\n createLocator(locator);\r\n continue;\r\n }\r\n\r\n if (record.isShared.includes(\"Y\")) {\r\n break locators;\r\n }\r\n\r\n try {\r\n let targetElement: Element | null = null;\r\n if (locator.value.startsWith(\"iframe\")) {\r\n const iframe = docmt.querySelector(\r\n locator.value\r\n ) as HTMLIFrameElement;\r\n if (iframe) {\r\n const iframeDocument =\r\n iframe.contentDocument || iframe.contentWindow?.document;\r\n if (iframeDocument) {\r\n targetElement = iframeDocument.querySelector(\r\n locator.value.slice(6)\r\n );\r\n }\r\n }\r\n } else {\r\n const selectors = locator.value.split(\">>>\"); // Custom delimiter for shadow DOM\r\n\r\n for (const selector of selectors) {\r\n if (docmt) {\r\n const trimmedSelector = selector.trim();\r\n if (\r\n locator.name.includes(\"id\") ||\r\n trimmedSelector.startsWith(\"#\")\r\n ) {\r\n targetElement = docmt.querySelector(\r\n \"#\" + trimmedSelector\r\n );\r\n } else if (\r\n locator.name.includes(\"className\") ||\r\n trimmedSelector.startsWith(\".\")\r\n ) {\r\n targetElement = docmt.querySelector(\r\n \".\" + trimmedSelector\r\n );\r\n } else if (\r\n (locator.name.includes(\"xpath\") ||\r\n trimmedSelector.startsWith(\"//\")) &&\r\n !locator.type.match(\"dynamic\")\r\n ) {\r\n const normalizedXPath = normalizeXPath(trimmedSelector);\r\n targetElement = getElementFromXPath(\r\n docmt,\r\n normalizedXPath\r\n );\r\n if (targetElement) {\r\n createLocator(locator, {\r\n value: trimmedSelector,\r\n isRecorded: String(locator.isRecorded).includes(\"N\")\r\n ? \"N\"\r\n : \"Y\",\r\n });\r\n }\r\n } else {\r\n targetElement = docmt.querySelector(trimmedSelector);\r\n if (!targetElement) {\r\n targetElement = getElementFromShadowRoot(\r\n docmt.body,\r\n trimmedSelector\r\n );\r\n }\r\n }\r\n } else {\r\n console.error(\"Element not found at:\", selector);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const locatorExists = (name: string, value: string): boolean => {\r\n const key = `${name}:${value}`;\r\n return finalLocatorsSet.has(key);\r\n };\r\n\r\n if (targetElement) {\r\n const idValue = getId(targetElement);\r\n if (idValue && !locatorExists(\"id\", idValue)) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: \"id\",\r\n value: idValue,\r\n isRecorded:\r\n loc.value === idValue && loc.name === \"id\"\r\n ? loc.isRecorded\r\n : \"Y\",\r\n isSelfHealed:\r\n loc.value === idValue && loc.name === \"id\"\r\n ? loc.isSelfHealed\r\n : \"Y\",\r\n });\r\n });\r\n }\r\n\r\n const textValue = getVisibleText(targetElement);\r\n if (textValue) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: \"linkText\",\r\n type: \"static\",\r\n value: textValue,\r\n isRecorded: loc.value === textValue ? loc.isRecorded : \"Y\",\r\n isSelfHealed:\r\n loc.value === textValue ? loc.isSelfHealed : \"Y\",\r\n });\r\n });\r\n }\r\n\r\n const nameLocator = getName(targetElement);\r\n if (nameLocator && !locatorExists(\"name\", nameLocator)) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: \"name\",\r\n type: \"static\",\r\n value: nameLocator,\r\n isRecorded:\r\n loc.value === nameLocator && loc.name === \"name\"\r\n ? loc.isRecorded\r\n : \"Y\",\r\n isSelfHealed:\r\n loc.value === nameLocator && loc.name === \"name\"\r\n ? loc.isSelfHealed\r\n : \"Y\",\r\n });\r\n });\r\n }\r\n\r\n const classValue = getClassName(targetElement);\r\n if (\r\n classValue &&\r\n classValue.trim() !== \"\" &&\r\n !locatorExists(\"className\", classValue)\r\n ) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: \"className\",\r\n value: classValue,\r\n isRecorded:\r\n loc.value === classValue && loc.name === \"className\"\r\n ? loc.isRecorded\r\n : \"Y\",\r\n isSelfHealed:\r\n loc.value === classValue && loc.name === \"className\"\r\n ? loc.isSelfHealed\r\n : \"Y\",\r\n });\r\n });\r\n }\r\n\r\n const xpathResults = parseDOM(targetElement, docmt, false, true);\r\n xpathResults.forEach((result) => {\r\n const fnValue = result.value;\r\n if (fnValue && !locatorExists(result.key.replace('xpath by', '').trim(), fnValue)) {\r\n record.locators.forEach((loc) => {\r\n createLocator(loc, {\r\n name: 'xpath',\r\n value: fnValue,\r\n isRecorded: loc.value === fnValue ? loc.isRecorded : 'Y',\r\n isSelfHealed: loc.value === fnValue ? loc.isSelfHealed : 'Y',\r\n });\r\n });\r\n }\r\n })\r\n\r\n for (const locator of record.locators) {\r\n try {\r\n for (const loc of record.locators) {\r\n if (!loc.value) continue;\r\n\r\n for (const relation of relations) {\r\n if (loc.value.includes(relation)) {\r\n const relativeXpath = checkReferenceElementIsValid(\r\n loc.value,\r\n relation,\r\n docmt\r\n );\r\n if (relativeXpath) {\r\n createLocator(loc, {\r\n name: \"xpath\",\r\n value: relativeXpath,\r\n isRecorded:\r\n locator.isRecorded !== \"\" &&\r\n locator.isRecorded !== null\r\n ? locator.isRecorded\r\n : \"Y\",\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"Error processing locator:\", locator, error);\r\n }\r\n }\r\n\r\n const finalAutoHealedLocators = finalLocators.map((obj) => ({\r\n ...obj,\r\n value: cleanLocatorValue(obj.value, obj.name, obj.isRecorded),\r\n }));\r\n\r\n const finalUniqueAutoHealedLocators: Locator[] =\r\n finalAutoHealedLocators.reduce(\r\n (unique: Locator[], locator: Locator) => {\r\n if (\r\n locator.value &&\r\n !unique.some((l: Locator) => l.value === locator.value)\r\n ) {\r\n unique.push(locator);\r\n }\r\n return unique;\r\n },\r\n [] as Locator[]\r\n );\r\n\r\n const jsonResult = [\r\n {\r\n name: `${record.name}`,\r\n desc: `${record.desc}`,\r\n type: `${record.type}`,\r\n locators: finalUniqueAutoHealedLocators.filter(\r\n (locator) => locator?.value != null && locator.value !== \"\"\r\n ),\r\n isShared: `${record.isShared}`,\r\n projectId: `${record.projectId}`,\r\n projectType: `${record.projectType}`,\r\n isRecorded: `${record.isRecorded}`,\r\n folder: `${record.folder}`,\r\n parentId: `${record.parentId}`,\r\n parentName: `${record.parentName}`,\r\n platform: `${record.platform}`,\r\n licenseId: `${record.licenseId}`,\r\n licenseType: `${record.licenseType}`,\r\n userId: `${record.userId}`,\r\n },\r\n ];\r\n\r\n return jsonResult;\r\n }\r\n } catch (error) {\r\n console.error(\"Error processing locator:\", locator, error);\r\n continue;\r\n }\r\n } catch (error) {\r\n console.error(\"Error processing locator:\", locator, error);\r\n continue;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport { getElementsFromHTML };\r\n","import { isNumberExist } from \"./xpathHelpers.ts\";\r\n\r\nlet modifiedElementAttributes: [] = [];\r\n\r\nexport const parseCssSelectors = (el: HTMLElement | Element, docmt: Document) => {\r\n let cssSelector: { key: string, value: string }[] = [];\r\n\r\n try {\r\n let idCssSelector = getIdCssPath(el, docmt);\r\n\r\n if (\r\n idCssSelector &&\r\n idCssSelector.includes('#') &&\r\n docmt.querySelectorAll(idCssSelector)?.length === 1 &&\r\n !(\r\n idCssSelector.includes('body') ||\r\n idCssSelector.includes('head') ||\r\n idCssSelector.includes('html')\r\n )\r\n ) {\r\n cssSelector.push({ key: 'cssSelector by id', value: idCssSelector });\r\n } else {\r\n idCssSelector = '';\r\n }\r\n\r\n let nameCssSelector = getNameCssPath(el, docmt);\r\n\r\n if (\r\n nameCssSelector &&\r\n nameCssSelector !== idCssSelector &&\r\n nameCssSelector.includes('name') &&\r\n docmt.querySelectorAll(nameCssSelector)?.length === 1 &&\r\n !(\r\n nameCssSelector.includes('body') ||\r\n nameCssSelector.includes('head') ||\r\n nameCssSelector.includes('html')\r\n )\r\n ) {\r\n cssSelector.push({ key: 'cssSelector by name', value: nameCssSelector });\r\n } else {\r\n nameCssSelector = '';\r\n }\r\n\r\n let classCssSelector = getClassCssPath(el, docmt);\r\n\r\n if (\r\n classCssSelector &&\r\n classCssSelector !== idCssSelector &&\r\n nameCssSelector !== classCssSelector &&\r\n classCssSelector.includes('.') &&\r\n docmt.querySelectorAll(classCssSelector)?.length === 1 &&\r\n !(\r\n classCssSelector.includes('body') ||\r\n classCssSelector.includes('head') ||\r\n classCssSelector.includes('html')\r\n )\r\n ) {\r\n cssSelector.push({\r\n key: 'cssSelector by class',\r\n value: classCssSelector,\r\n });\r\n } else {\r\n classCssSelector = '';\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n if (!cssSelector.length) {\r\n let abSelector = getAbsoluteCssPath(el, docmt);\r\n if (\r\n abSelector &&\r\n docmt.querySelectorAll(abSelector)?.length === 1 &&\r\n !(\r\n abSelector.includes('body') ||\r\n abSelector.includes('head') ||\r\n abSelector.includes('html')\r\n )\r\n ) {\r\n cssSelector.push({\r\n key: 'Absolute cssSelector',\r\n value: abSelector,\r\n });\r\n } else {\r\n abSelector = '';\r\n }\r\n }\r\n\r\n return cssSelector;\r\n};\r\n\r\nexport const getIdCssPath = (el: HTMLElement | Element, docmt: Document) => {\r\n const tagName = el.tagName.toLowerCase();\r\n\r\n if (\r\n docmt?.defaultView?.Element &&\r\n !(el instanceof docmt?.defaultView?.Element)\r\n )\r\n return;\r\n if (tagName.includes('style') || tagName.includes('script')) return;\r\n\r\n const path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n let selector = el.nodeName?.toLowerCase();\r\n if (el.id && !isNumberExist(el.id)) {\r\n selector += `#${el.id}`;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n let sib = el;\r\n let nth = 1;\r\n if (sib.previousElementSibling) {\r\n while ((sib = sib.previousElementSibling)) {\r\n if (sib.nodeName?.toLowerCase() === selector) nth++;\r\n }\r\n }\r\n\r\n if (nth !== 1) {\r\n selector += `:nth-of-type(${nth})`;\r\n }\r\n\r\n if (nth === 1 && sib?.parentElement?.childElementCount! > 1) {\r\n selector += `:nth-child(${nth})`;\r\n }\r\n }\r\n path.unshift(selector);\r\n el = el.parentElement!;\r\n }\r\n return path.join(' > ');\r\n};\r\n\r\nexport const getNameCssPath = (el: HTMLElement | Element, docmt: Document) => {\r\n const tagName = el.tagName.toLowerCase();\r\n\r\n if (\r\n docmt?.defaultView?.Element &&\r\n !(el instanceof docmt?.defaultView?.Element)\r\n )\r\n return;\r\n if (tagName.includes('style') || tagName.includes('script')) return;\r\n\r\n const path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n let selector = el.nodeName?.toLowerCase();\r\n let name = el.getAttribute('name');\r\n if (name && !isNumberExist(name)) {\r\n selector += `[name=${name}]`;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n let sib = el;\r\n let nth = 1;\r\n if (sib.previousElementSibling) {\r\n while ((sib = sib.previousElementSibling)) {\r\n if (sib.nodeName?.toLowerCase() === selector) nth++;\r\n }\r\n }\r\n\r\n if (nth !== 1) {\r\n selector += `:nth-of-type(${nth})`;\r\n }\r\n\r\n if (nth === 1 && sib?.parentElement?.childElementCount! > 1) {\r\n selector += `:nth-child(${nth})`;\r\n }\r\n }\r\n path.unshift(selector);\r\n el = el.parentElement!;\r\n }\r\n return path.join(' > ');\r\n};\r\n\r\nexport const getClassCssPath = (el: HTMLElement | Element, docmt: Document) => {\r\n const tagName = el.tagName.toLowerCase();\r\n\r\n if (\r\n docmt?.defaultView?.Element &&\r\n !(el instanceof docmt?.defaultView?.Element)\r\n )\r\n return;\r\n if (tagName.includes('style') || tagName.includes('script')) return;\r\n\r\n const path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n let selector = el.nodeName?.toLowerCase();\r\n\r\n if (\r\n typeof el.className === 'string' &&\r\n el.className &&\r\n !isNumberExist(el.className) &&\r\n !modifiedElementAttributes?.find(\r\n (x: { element: HTMLElement | Element; attributeName: string; }) => x.element === el && x.attributeName === 'class'\r\n )\r\n ) {\r\n el.classList.remove('marked-element-temp');\r\n el.classList.remove('removePointers');\r\n if (el.className) {\r\n selector += `.${el.className.trim().replace(/\\s+/g, '.')}`;\r\n path.unshift(selector);\r\n break;\r\n }\r\n } else {\r\n let sib = el;\r\n let nth = 1;\r\n if (sib.previousElementSibling) {\r\n while ((sib = sib.previousElementSibling)) {\r\n if (sib.nodeName?.toLowerCase() === selector) nth++;\r\n }\r\n }\r\n\r\n if (nth !== 1) {\r\n selector += `:nth-of-type(${nth})`;\r\n }\r\n\r\n if (nth === 1 && sib?.parentElement?.childElementCount! > 1) {\r\n selector += `:nth-child(${nth})`;\r\n }\r\n }\r\n path.unshift(selector);\r\n el = el.parentElement!;\r\n }\r\n return path.join(' > ');\r\n};\r\n\r\nexport const getAbsoluteCssPath = (el: HTMLElement | Element, docmt: Document) => {\r\n const tagName = el.tagName.toLowerCase();\r\n\r\n if (\r\n docmt?.defaultView?.Element &&\r\n !(el instanceof docmt?.defaultView?.Element)\r\n )\r\n return;\r\n if (tagName.includes('style') || tagName.includes('script')) return;\r\n\r\n const path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n let selector = el.nodeName?.toLowerCase();\r\n if (\r\n tagName.includes('body') ||\r\n tagName.includes('head') ||\r\n tagName.includes('html')\r\n ) {\r\n selector += tagName;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n let sib = el;\r\n let nth = 1;\r\n if (sib.previousElementSibling) {\r\n while ((sib = sib.previousElementSibling)) {\r\n if (sib.nodeName?.toLowerCase() === selector) nth++;\r\n }\r\n }\r\n\r\n if (nth !== 1) {\r\n selector += `:nth-of-type(${nth})`;\r\n }\r\n\r\n if (nth === 1 && sib?.parentElement?.childElementCount! > 1) {\r\n selector += `:nth-child(${nth})`;\r\n }\r\n }\r\n path.unshift(selector);\r\n el = el.parentElement!;\r\n }\r\n return path.join(' > ');\r\n};\r\n\r\nexport const cssSelectors = {\r\n parseCssSelectors,\r\n getIdCssPath,\r\n getNameCssPath,\r\n getClassCssPath,\r\n getAbsoluteCssPath\r\n}","import xpath from '../utils/xpath.ts';\r\nimport referenceXpaths from '../utils/referenceXpath.ts';\r\nimport { xpathUtils } from '../utils/xpathHelpers.ts';\r\nimport { getElementsFromHTML } from '../utils/getElementsFromHTML.ts';\r\nimport { cssSelectors } from '../utils/cssSelector.ts';\r\n\r\nexport const createXPathAPI = () => ({\r\n xpath,\r\n referenceXpaths,\r\n xpathUtils,\r\n getElementsFromHTML,\r\n cssSelectors\r\n});\r\n\r\nexport default createXPathAPI;"],"names":["reWhiteSpace","xpathCache","modifiedElementAttributes","xpathData","xpathDataWithIndex","referenceXpaths"],"mappings":"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"}