testing-library / testing-library/dom-testing-library
*ByRole reads hidden element names as ""
- Dominant language
- JavaScript
- Stars
- 3.3k
- Forks
- 474
- PR merge metrics
- No merged PRs in 30d
Description
@testing-library/domversion: 7.28.1- Testing Framework and version: Jest 26.6.3
- DOM Environment: jsdom 16.4.0
Relevant code or config:
import { render } from "@testing-library/react";
import { getByRole } from "@testing-library/dom";
const { container } = render(
<>
<input aria-label="Input" style={{ display: "none" }} />
<button aria-label="Button" style={{ display: "none" }} />
</>,
);
expect(
getByRole(container, "textbox", { name: "Input", hidden: true }),
).toBeInTheDocument();
expect(
getByRole(container, "button", { name: "Button", hidden: true }),
).toBeInTheDocument();
What you did:
Attempted to test the presence of accessible elements with display: none;
What happened:
The Testing Library error reporter claims the name of these elements is "" and fails to match them against the provided name:
TestingLibraryElementError: Unable to find an element with the role "textbox" and name "Input"
Here are the available roles:
textbox:
Name "":
<input
aria-label="Input"
style="display: none;"
/>
--------------------------------------------------button:
Name "":
<button
aria-label="Button"
style="display: none;"
/>
--------------------------------------------------
Reproduction:
Hopefully the provided code is sufficient, let me know if not
Problem description:
The example I've given is a little simplified–the real code I'm testing contains elements that are visible in desktop-width viewports, and if I understand correctly media query parsing is out-of-scope for Testing Library–but the issue is the same: these elements will become part of the accessibility tree under certain circumstances and I'm ignoring their invisibility in order to check that they have the correct accessible names. I would expect that I'd be able to do that with the hidden: true option set.
Suggested solution:
I don't have the time to spare to figure out the cause of this right now :( it might be related to recent changes around https://github.com/testing-library/dom-testing-library/pull/804 ?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the provided getByRole reproduction using hidden elements and review linked pull request #1161 for the current work. Trace how hidden elements are assigned accessible names, then add or update regression coverage so hidden: true matches the aria-label values and the existing role output remains correct.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- testing-qa
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100