From fbff3f37b355fec1c2f06e1f670fed1faa5c2f2e Mon Sep 17 00:00:00 2001 From: Daniel Graham Date: Mon, 31 Aug 2026 10:03:18 -0700 Subject: [PATCH] fix(plugin-autocapture-browser): fix nearest label CSS coping --- .../src/data-extractor.ts | 2 +- .../test/data-extractor.test.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/plugin-autocapture-browser/src/data-extractor.ts b/packages/plugin-autocapture-browser/src/data-extractor.ts index 8b46e265bb..f704753b16 100644 --- a/packages/plugin-autocapture-browser/src/data-extractor.ts +++ b/packages/plugin-autocapture-browser/src/data-extractor.ts @@ -179,7 +179,7 @@ export class DataExtractor { } let labelElement: Element | null; try { - labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6'); + labelElement = parent.querySelector(':scope>span,:scope>h1,:scope>h2,:scope>h3,:scope>h4,:scope>h5,:scope>h6'); } catch { /* istanbul ignore next */ labelElement = null; diff --git a/packages/plugin-autocapture-browser/test/data-extractor.test.ts b/packages/plugin-autocapture-browser/test/data-extractor.test.ts index 92b7177536..ffdd8e11d0 100644 --- a/packages/plugin-autocapture-browser/test/data-extractor.test.ts +++ b/packages/plugin-autocapture-browser/test/data-extractor.test.ts @@ -467,6 +467,20 @@ describe('data extractor', () => { expect(result).toEqual('nearest label'); }); + test('should not return a deeply nested label of the element (regression test)', () => { + const container = document.createElement('div'); + const heading = document.createElement('h1'); + heading.innerText = 'My App'; + const form = document.createElement('form'); + const input = document.createElement('input'); + container.appendChild(heading); + form.appendChild(input); + container.appendChild(form); + + const result = dataExtractor.getNearestLabel(input); + expect(result).toEqual(''); + }); + test('should return masked nearest label when content is sensitive', () => { const div = document.createElement('div'); const span = document.createElement('span');