getUniqueSelector function exported ✓ 84.2%

Last updated: 2026-02-24T21:07:57.586Z

Metrics

LOC: 32 Complexity: 7 Params: 1 Coverage: 84.2% (16/19 lines, 66x executed)

Signature

getUniqueSelector(element: Element): : string

Summary

Builds a unique, stable CSS selector for a DOM element. Traverses parent chain using tag + :nth-of-type, shortcuts on id.

Tags

#@param element - The element to build a selector for#@returns A CSS selector string that uniquely identifies the element

Source Code

export function getUniqueSelector(element: Element): string {
  if (element.id) return `#${CSS.escape(element.id)}`;

  const parts: string[] = [];
  let current: Element | null = element;

  while (current && current !== document.body) {
    let selector = current.tagName.toLowerCase();

    if (current.id) {
      selector = `#${CSS.escape(current.id)}`;
      parts.unshift(selector);
      break;
    }

    const parent: Element | null = current.parentElement;
    if (parent) {
      const siblings = Array.from(parent.children).filter(
        (c: Element) => c.tagName === current!.tagName,
      );
      if (siblings.length > 1) {
        const index = siblings.indexOf(current) + 1;
        selector += `:nth-of-type(${index})`;
      }
    }

    parts.unshift(selector);
    current = parent;
  }

  return parts.join(" > ");
}

Dependencies (Outgoing)

graph LR getUniqueSelector["getUniqueSelector"] Extractor["Extractor"] getUniqueSelector -->|uses| Extractor style getUniqueSelector fill:#dbeafe,stroke:#2563eb,stroke-width:2px click getUniqueSelector "7276f3807435c3b4.html" click Extractor "5386f4a2b1ff68ed.html"
TargetType
Extractor uses

Impact (Incoming)

graph LR getUniqueSelector["getUniqueSelector"] handleRuleButtonClick["handleRuleButtonClick"] isFillableField["isFillableField"] initFieldIcon["initFieldIcon"] NativeElement["NativeElement"] matches["matches"] findAntLabel["findAntLabel"] handleRuleButtonClick -->|uses| getUniqueSelector isFillableField -->|uses| getUniqueSelector initFieldIcon -->|uses| getUniqueSelector NativeElement -->|uses| getUniqueSelector matches -->|uses| getUniqueSelector matches -->|uses| getUniqueSelector matches -->|uses| getUniqueSelector matches -->|uses| getUniqueSelector findAntLabel -->|uses| getUniqueSelector matches -->|uses| getUniqueSelector style getUniqueSelector fill:#dbeafe,stroke:#2563eb,stroke-width:2px click getUniqueSelector "7276f3807435c3b4.html" click handleRuleButtonClick "302ac6e6209ebb8e.html" click isFillableField "a14a36f7857211ba.html" click initFieldIcon "fcc910dd0c6d49b0.html" click NativeElement "8fb34e112c670c35.html" click matches "19835198bf6ff31b.html" click findAntLabel "4446526a4a01afd7.html"