From 2f2400dffab8bffd3f3ea6c22409967eb7654249 Mon Sep 17 00:00:00 2001 From: yuyutaotao <167746126+yuyutaotao@users.noreply.github.com> Date: Mon, 10 Feb 2025 20:51:43 +0800 Subject: [PATCH] fix: correctly collect elements in absolute container (#373) --- packages/shared/src/extractor/util.ts | 22 ++++- .../__snapshots__/web-extractor.test.ts.snap | 86 +++++++++++++++++- .../fixtures/web-extractor/index.html | 11 +++ .../fixtures/web-extractor/input.png | Bin 625601 -> 611609 bytes .../fixtures/web-extractor/output.png | Bin 845851 -> 787272 bytes 5 files changed, 114 insertions(+), 5 deletions(-) diff --git a/packages/shared/src/extractor/util.ts b/packages/shared/src/extractor/util.ts index 5b779d042..8f8ecd595 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 fa3e86f13..a1c221cb9 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": "