fix: resolve unnamed element refs matching multiple elements (#573)

* fix: resolve unnamed element refs matching multiple elements (#500)

When a page has one unnamed button among several named buttons,
clicking its ref fails with "matched N elements" because the
locator `getByRole('button')` matches all buttons on the page.

Normalize unnamed interactive elements to `name: ""` so the
selector becomes `getByRole('button', { name: "", exact: true })`
which matches only buttons with empty accessible names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: remove dead code branch in buildSelector

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: make RefMap.name required string, remove dead code branches

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: hyunjinee <leehj0110@kakao.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jin.2
2026-03-01 09:42:05 -06:00
committed by GitHub
co-authored by Claude Opus 4.6 hyunjinee
parent 79d8dfe34c
commit 7238b7da4c
4 changed files with 45 additions and 23 deletions
+4 -6
View File
@@ -226,12 +226,10 @@ export class BrowserManager {
}
// Build locator with exact: true to avoid substring matches
let locator: Locator;
if (refData.name) {
locator = page.getByRole(refData.role as any, { name: refData.name, exact: true });
} else {
locator = page.getByRole(refData.role as any);
}
let locator: Locator = page.getByRole(refData.role as any, {
name: refData.name,
exact: true,
});
// If an nth index is stored (for disambiguation), use it
if (refData.nth !== undefined) {