Przejdź do treści
SilktidePomoc

Brakująca rola podrzędna ARIA

Silktide sprawdza widżety kontenerowe zbudowane z użyciem ról ARIA, takie jak listy kart, menu i pola listy, oraz weryfikuje, czy każde z nich zawiera odpowiedni rodzaj elementów, które powinno zawierać. Lista kart bez kart lub menu bez elementów menu jest ogłaszane jako widżet, ale nie oferuje niczego, czym można sterować.

<!-- Problem: a tablist must contain elements with role="tab" -->
<div role="tablist">
  <button>Overview</button>
</div>

<!-- Fix: give the children their required role -->
<div role="tablist">
  <button role="tab">Overview</button>
</div>

Dlaczego jest to ważne

Złożone role opisują widżet jako całość: tablist wymaga kart, listbox wymaga opcji, a menu wymaga elementów menu. przełączają się na wyspecjalizowaną nawigację dla tych widżetów, oczekując obiecanych elementów podrzędnych. Gdy elementy podrzędne nie mają swoich ról, widżet ogłasza się, a następnie zachowuje się jak pusta powłoka — użytkownicy mogą do niego dotrzeć, ale nie znajdują w nim niczego, podczas gdy użytkownicy widzący widzą w pełni działającą kontrolkę.

Jak to naprawić

  1. Dodaj wymaganą rolę do każdego elementu w kontenerze — na przykład role="tab" do każdej kontrolki wewnątrz role="tablist".
  2. Jeśli elementy muszą znajdować się w innym miejscu kodu, połącz je za pomocą aria-owns w kontenerze.
  3. Jeśli kontener nie jest w rzeczywistości tego rodzaju widżetem, usuń lub popraw jego rolę.

Typowe pary: tablist wymaga tab; listbox wymaga option; menu i menubar wymagają menuitem (lub jego wariantów wyboru i opcji); radiogroup wymaga radio; tree wymaga treeitem; grid i table wymagają row; row wymaga komórek lub nagłówków.

Jak Silktide to testuje

  1. Znajdź każdy element, którego rola ARIA wymaga określonych ról podrzędnych.
  2. Pomiń kontenery oznaczone aria-busy="true", które nadal ładują swoje elementy.
  3. Przeszukaj elementy potomne każdego pozostałego kontenera, w tym wszelkie elementy dołączone za pomocą aria-owns, aby znaleźć co najmniej jeden element z wymaganą rolą podrzędną. Elementy natywne są uwzględniane z rolą, którą mają domyślnie: wiersz tabeli (<tr>) spełnia wymaganie dzięki komórkom <td> i <th>.
  4. Zgłoś kontenery, w których nie znaleziono żadnego takiego elementu.

Rozwiązywanie problemów

Elementy są ładowane później przez skrypt

Silktide testuje stronę podczas jej ładowania. Jeśli pole listy lub menu jest wypełniane tylko na żądanie, do tego czasu jest ogłaszane jako puste; tam, gdzie to możliwe, wyrenderuj przynajmniej początkowe elementy razem ze stroną. Gdy kontener nadal ładuje swoje elementy, oznacz go za pomocą aria-busy="true" i usuń ten atrybut, gdy wszystkie elementy znajdą się na miejscu. Silktide nie zgłasza kontenera oznaczonego jako zajęty.

Dowiedz się więcej

Ostatnio zaktualizowano

Czy ta strona była pomocna?