diff --git a/packages/shared/src/extractor/util.ts b/packages/shared/src/extractor/util.ts index 5b779d04..8f8ecd59 100644 --- a/packages/shared/src/extractor/util.ts +++ b/packages/shared/src/extractor/util.ts @@ -330,6 +330,19 @@ export function visibleRect( // check if the element is hidden by an ancestor let parent: HTMLElement | Node | null = el; + const parentUntilNonStatic = (currentNode: HTMLElement | Node | null) => { + // find a parent element that is not static + let parent = currentNode?.parentElement; + while (parent) { + const style = currentWindow.getComputedStyle(parent); + if (style.position !== 'static') { + return parent; + } + parent = parent.parentElement; + } + return null; + }; + while (parent && parent !== currentDocument.body) { if (!(parent instanceof currentWindow.HTMLElement)) { parent = parent.parentElement; @@ -354,10 +367,15 @@ export function visibleRect( } } // if the parent is a fixed element, stop the search - if (parentStyle.position === 'fixed') { + if (parentStyle.position === 'fixed' || parentStyle.position === 'sticky') { break; } - parent = parent.parentElement; + + if (parentStyle.position === 'absolute') { + parent = parentUntilNonStatic(parent); + } else { + parent = parent.parentElement; + } } return { diff --git a/packages/web-integration/tests/unit-test/__snapshots__/web-extractor.test.ts.snap b/packages/web-integration/tests/unit-test/__snapshots__/web-extractor.test.ts.snap index fa3e86f1..a1c221cb 100644 --- a/packages/web-integration/tests/unit-test/__snapshots__/web-extractor.test.ts.snap +++ b/packages/web-integration/tests/unit-test/__snapshots__/web-extractor.test.ts.snap @@ -602,6 +602,20 @@ exports[`extractor > basic 1`] = ` }, "content": "", }, + { + "attributes": { + "htmlTagName": "