diff --git a/packages/playwright-core/src/server/injected/injectedScript.ts b/packages/playwright-core/src/server/injected/injectedScript.ts index ab803d203d..49d7ffaad7 100644 --- a/packages/playwright-core/src/server/injected/injectedScript.ts +++ b/packages/playwright-core/src/server/injected/injectedScript.ts @@ -328,7 +328,7 @@ export class InjectedScript { let labels: Element[] | NodeListOf | null | undefined = getAriaLabelledByElements(element); if (labels === null) { const ariaLabel = element.getAttribute('aria-label'); - if (ariaLabel !== null) + if (ariaLabel !== null && !!ariaLabel.trim()) return matcher({ full: ariaLabel, immediate: [ariaLabel] }); } if (labels === null) diff --git a/tests/page/selectors-get-by.spec.ts b/tests/page/selectors-get-by.spec.ts index d8ec170f55..a95edc8900 100644 --- a/tests/page/selectors-get-by.spec.ts +++ b/tests/page/selectors-get-by.spec.ts @@ -117,6 +117,11 @@ it('getByLabel should work with aria-label', async ({ page }) => { expect(await page.getByLabel('Name').evaluate(e => e.id)).toBe('target'); }); +it('getByLabel should ignore empty aria-label', async ({ page }) => { + await page.setContent(``); + expect(await page.getByLabel('Last Name').evaluate(e => e.id)).toBe('target'); +}); + it('getByLabel should prioritize aria-labelledby over aria-label', async ({ page }) => { await page.setContent(``); expect(await page.getByLabel('Other').evaluate(e => e.id)).toBe('target');