Skip to content

TabPanel role with a incorrectly name when using getByRole (but works using getByText) #912

Closed
@smblee

Description

@smblee

"@testing-library/react": "11.0.2",
"@testing-library/user-event": "^13.0.2",
"@testing-library/jest-dom": "5.11.4"
I am using jest with latest version of CRA.
default Jest environment (JSDom)

Node version 14

Relevant code or config:

Here is the error I get when I try

    render(<Test />);

    const tab1 = screen.getByRole('tab', { name: /Tab 1/ });
    const tab2 = screen.getByRole('tab', { name: /Tab 2/ });
    const panel1 = screen.getByRole('tabpanel', { name: /Panel 1/ });
    const panel2 = screen.getByRole('tabpanel', { name: /Panel 2/ });

    userEvent.click(tab2);
    expect(tab1).not.toHaveFocus();
    expect(panel1).not.toBeVisible();
    expect(tab2).toHaveFocus();
    expect(panel2).toBeVisible();

I have been refactoring to use screen.getByRole with getByText and previous this test was working, but now it doesn't seem to work. Mainly the error I am getting is the following

Unable to find an accessible element with the role "tabpanel" and name /Panel 1/

and here are the rest of the error (notice the tabpanel where it expects Name as "Tab 1" instead of "Panel 1"):

Here are the accessible roles:

  tablist:

  Name "Pages":
  <div
    aria-label="Pages"
    aria-orientation="horizontal"
    id="id-iqb0tk"
    role="tablist"
    variant="graph"
  />

  --------------------------------------------------
  tab:

  Name "Tab 1":
  <button
    aria-controls="id-iqb0tk-3"
    aria-selected="true"
    class="css-vurnku"
    id="id-iqb0tk-1"
    role="tab"
    tabindex="0"
  />

  Name "Tab 2":
  <button
    aria-controls="id-iqb0tk-4"
    aria-selected="false"
    class="css-vurnku"
    id="id-iqb0tk-2"
    role="tab"
    tabindex="-1"
  />

  --------------------------------------------------
  tabpanel:

  Name "Tab 1":
  <div
    aria-labelledby="id-iqb0tk-1"
    id="id-iqb0tk-3"
    role="tabpanel"
    style=""
    tabindex="0"
    variant="graph"
  />

  --------------------------------------------------

<body>
  <div>
    <div
      aria-label="Pages"
      aria-orientation="horizontal"
      id="id-iqb0tk"
      role="tablist"
      variant="graph"
    >
      <div
        class="css-vurnku"
      >
        <button
          aria-controls="id-iqb0tk-3"
          aria-selected="true"
          class="css-vurnku"
          id="id-iqb0tk-1"
          role="tab"
          tabindex="0"
        >
          Tab 1
        </button>
        <button
          aria-controls="id-iqb0tk-4"
          aria-selected="false"
          class="css-vurnku"
          id="id-iqb0tk-2"
          role="tab"
          tabindex="-1"
        >
          Tab 2
        </button>
      </div>
    </div>
    <div
      aria-labelledby="id-iqb0tk-1"
      id="id-iqb0tk-3"
      role="tabpanel"
      style=""
      tabindex="0"
      variant="graph"
    >
      <div>
        Panel 1
      </div>
    </div>
    <div
      aria-labelledby="id-iqb0tk-2"
      hidden=""
      id="id-iqb0tk-4"
      role="tabpanel"
      style="display: none;"
      tabindex="0"
      variant="graph"
    >
      Panel 2
    </div>
  </div>
</body>
TestingLibraryElementError: Unable to find an accessible element with the role "tabpanel" and name `/Panel 1/`

Here are the accessible roles:

  tablist:

  Name "Pages":
  <div
    aria-label="Pages"
    aria-orientation="horizontal"
    id="id-iqb0tk"
    role="tablist"
    variant="graph"
  />

  --------------------------------------------------
  tab:

  Name "Tab 1":
  <button
    aria-controls="id-iqb0tk-3"
    aria-selected="true"
    class="css-vurnku"
    id="id-iqb0tk-1"
    role="tab"
    tabindex="0"
  />

  Name "Tab 2":
  <button
    aria-controls="id-iqb0tk-4"
    aria-selected="false"
    class="css-vurnku"
    id="id-iqb0tk-2"
    role="tab"
    tabindex="-1"
  />

  --------------------------------------------------
  tabpanel:

  Name "Tab 1":
  <div
    aria-labelledby="id-iqb0tk-1"
    id="id-iqb0tk-3"
    role="tabpanel"
    style=""
    tabindex="0"
    variant="graph"
  />

  --------------------------------------------------

<body>
  <div>
    <div
      aria-label="Pages"
      aria-orientation="horizontal"
      id="id-iqb0tk"
      role="tablist"
      variant="graph"
    >
      <div
        class="css-vurnku"
      >
        <button
          aria-controls="id-iqb0tk-3"
          aria-selected="true"
          class="css-vurnku"
          id="id-iqb0tk-1"
          role="tab"
          tabindex="0"
        >
          Tab 1
        </button>
        <button
          aria-controls="id-iqb0tk-4"
          aria-selected="false"
          class="css-vurnku"
          id="id-iqb0tk-2"
          role="tab"
          tabindex="-1"
        >
          Tab 2
        </button>
      </div>
    </div>
    <div
      aria-labelledby="id-iqb0tk-1"
      id="id-iqb0tk-3"
      role="tabpanel"
      style=""
      tabindex="0"
      variant="graph"
    >
      <div>
        Panel 1
      </div>
    </div>
    <div
      aria-labelledby="id-iqb0tk-2"
      hidden=""
      id="id-iqb0tk-4"
      role="tabpanel"
      style="display: none;"
      tabindex="0"
      variant="graph"
    >
      Panel 2
    </div>
  </div>
</body>
var your => (code) => here;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions