role=linkBug (ENG-1744): Access Engine test 220 (a target="_blank" link should warn that it opens a new window) scoped its candidate set to a[data-ae_vis][data-ae_avat][data-ae_ar="null"][target="_blank"] — anchors with no ARIA role at all. Any role attribute took the anchor out of scope, including role="link", which does not change what the element is. Markup such as <a href="foo" target="_blank" role="link">Testing this out</a> was silently skipped — a false negative.
Impact: A screen reader user following an unannounced target="_blank" link lands in a new window with no back history and no announcement of the context change. Those links went unreported whenever the anchor also spelled out role="link".
A elements with target="_blank", without an ARIA-assigned role or with role=link, not intentionally hidden in the DOM and available to assistive technologies.new window or tab.aria-label, or a description source such as title — any of them satisfies the test.role="button", role="presentation", …) remain out of scope — they are no longer being exposed as links.target="_blank" is not a failure in itself, the missing warning is what is reported.A with an href carrying a role attribute) fires on most cases below because they deliberately set role="link". That is expected and unrelated to test 220.role="link" alongside href, hiding the omission from the test.data-ae_computed_role, the explicit-or-implicit ARIA role):
a[data-ae_vis][data-ae_avat][data-ae_ar="null"][target="_blank"], a[data-ae_vis][data-ae_avat][data-ae_computed_role="link"][target="_blank"]
data-ae_ar="null" branch is retained so role-less anchors stay in scope exactly as before. The test also needed a second change to avoid trading a false negative for a false positive: accessible descriptions were only calculated for a[target='_blank']:not([data-ae_ar]), so a newly in-scope role="link" anchor would have carried no description and a warning supplied by title would have been invisible to the test. That markdown step now selects a[target='_blank']:not([data-ae_ar]), a[target='_blank'][data-ae_ar='link'], mirroring the scope already used for accessible names.
role="button" and target="_blank", no warning other roleThe anchor is exposed as a button, not a link, so test 220 does not apply. Only role=link (or no role) is in scope. Should not be flagged.
role="presentation" and target="_blank", no warning other roleAn explicit presentational role removes the link semantics the test is about. Out of scope, unchanged by ENG-1744. Should not be flagged.
role="link" and no target attribute no targetNo new window is opened, so there is nothing to warn about. Should not be flagged.
role="link" and target="_blank" hidden with display:none hidden(Anchor is present but hidden via display:none.)
Test 220 only evaluates elements that are not intentionally hidden: the selector requires [data-ae_vis]. Should not be flagged.
role="link", target="_blank" and aria-hidden="true" not exposedNot available to assistive technologies, so the selector's [data-ae_avat] requirement excludes it. Should not be flagged.
The accessible name comes from the link text and contains the warning. Should not be flagged.
role="link" whose text carries the warning role=linkNewly in scope after ENG-1744, and compliant. Should not be flagged.
role="link" warned through aria-label nameThe warning is in the accessible name. Should not be flagged.
role="link" warned through its accessible description descriptionThe name is the link text and the title supplies the description, which is where the warning lives. This is the case that required the accessible-description markdown step to include role=link anchors — without that, this compliant link would have become a false positive. Should not be flagged.
role="link" anchor with target="_blank" and no warning role=linkThe markup from ENG-1744. Pre-fix: not flagged ❌. Post-fix: flagged ✓.
role="LINK" anchor with target="_blank" and no warning caseARIA role tokens are case-insensitive and the computed role is normalised to lower case. Pre-fix: not flagged ❌. Post-fix: flagged ✓.
role="link" anchor whose aria-label omits the warning name onlyA label that renames the link but still says nothing about the new window. Pre-fix: not flagged ❌. Post-fix: flagged ✓.
role="link" anchor whose title description omits the warning descriptionA description is now calculated for this anchor, and it does not mention a new window either. Pre-fix: not flagged ❌. Post-fix: flagged ✓. (Note the test matches the bare substring tab, so a description wording such as "Portable document format" would suppress the finding — avoid words containing tab when adding cases here.)
target="_blank" and no warning no roleThe original test 220 case. Must stay flagged ✓.
The most common form: an external or document link that changes context without saying so. Pre-fix: not flagged ❌. Post-fix: flagged ✓.
Icon links are labelled with the destination name and rarely mention the new window. Pre-fix: not flagged ❌. Post-fix: flagged ✓.