diff --git a/packages/playwright-core/src/server/injected/roleUtils.ts b/packages/playwright-core/src/server/injected/roleUtils.ts index 727bf5487f..b7a4eeed61 100644 --- a/packages/playwright-core/src/server/injected/roleUtils.ts +++ b/packages/playwright-core/src/server/injected/roleUtils.ts @@ -473,18 +473,15 @@ export function getElementAccessibleErrorMessage(element: Element): string { if (isAriaInvalid) { const errorMessageId = element.getAttribute('aria-errormessage'); if (errorMessageId) { - // Ensure the ID is valid (no whitespace) - if (!/\s+/.test(errorMessageId)) { - // Retrieve the element referenced by aria-errormessage. - const errorElement = element.ownerDocument.getElementById(errorMessageId); - if (errorElement) { - accessibleErrorMessage = asFlatString( - getTextAlternativeInternal(errorElement, { - visitedElements: new Set(), - embeddedInDescribedBy: { element: errorElement, hidden: isElementHiddenForAria(errorElement) }, - }) - ); - } + const errorMessages = getIdRefs(element, errorMessageId); + if (errorMessages.length) { + const parts = errorMessages.map(errorMessage => asFlatString( + getTextAlternativeInternal(errorMessage, { + visitedElements: new Set(), + embeddedInDescribedBy: { element: errorMessage, hidden: isElementHiddenForAria(errorMessage) }, + }) + )); + accessibleErrorMessage = parts.join(' ').trim(); } } }