ViraStack
  • Akademi
  • Hakkında
  • Destek
Genel BakışKaynaklarKatkı
ViraStack

Frontend geliştiricileri için DX odaklı araç seti: starter’lar, ajan kuralları, form hook’ları ve rehber.

Ürünler

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Keşfet

  • Akademi
  • Hakkında
  • Marka
  • Destek

© 2026 ViraStack.

Açık kaynak · MIT

Performans ve Erişilebilirlik

09 / 09

Erişilebilirlik testi

Otomatik tarama ve ekran okuyucuyla elle kontrol.

Erişilebilirlik Testi Nedir

Erişilebilirlik testi, sayfanın klavye, ekran okuyucu ya da büyütme gibi farklı yollarla kullanılabildiğini kontrol etmektir. İki katmanı vardır: otomatik tarama (bir aracın kuralları DOM üzerinde çalıştırması) ve elle kontrol (sayfayı gerçekten klavyeyle ve ekran okuyucuyla kullanmak). İkisi birbirinin yerine geçmez, birbirini tamamlar.

Otomatik Araçlar Neyi Yakalar

Otomatik araçlar eksik alt, etiketsiz form alanı, düşük kontrast ya da geçersiz ARIA gibi kodda görülebilen sorunları hızlıca bulur. Ama "Bu alt metni görseli doğru anlatıyor mu?" ya da "Odak sırası mantıklı mı?" gibi bağlam isteyen soruları cevaplayamaz. Oranlar ölçüm yöntemine göre değişir:

ÇalışmaBulgu
Deque, 2021 (2.000'den fazla denetim)Sorunların ortalama %57'si otomatik testle bulundu. Oran sorun sayısına göre hesaplandı ve sık görülen hata türleri oranı yukarı çeker.1
GOV.UK, 2017 (143 hatalı test sayfası)En iyi araç hataların %41'ini buldu; 42 hatayı (%29) 10 aracın hiçbiri bulamadı.2
Adrian Roselli, 2023 (tek sayfa, WCAG 2.1 AA)Elle inceleme 37 hata buldu; axe 2, en iyi ücretsiz araç 5 hata buldu.3

WebAIM'in 2026 taramasında bir milyon ana sayfanın %95,9'unda otomatik olarak tespit edilen WCAG hatası vardı. Rapor aynı zamanda şunu hatırlatıyor: hata bulunmaması, sayfanın erişilebilir olduğu anlamına gelmez.4

Uyarı

Temiz bir tarama raporu "erişilebilir" demek değildir. Otomatik test, elle kontrolün başlangıç noktasıdır.

axe-core

axe-core, Deque'in açık kaynak erişilebilirlik kural motorudur. WCAG 2.0, 2.1 ve 2.2'nin A, AA ve AAA kurallarını kapsar ve sıfır yanlış pozitif hedefler: bir şeyi hata diye raporluyorsa gerçekten hatadır.5 Playwright entegrasyonu, tarayıcı eklentileri ve birçok başka araç bu motoru kullanır.

Temel kullanım tek fonksiyondur: axe.run() bir Promise döner, sonuçtaki violations dizisi boşsa otomatik yakalanabilen bir hata bulunmamıştır.5

Vitest ile Component Taraması

Component testlerinde render edilen DOM'u axe ile taramak için ek bir matcher paketine gerek yoktur; axe-core'u doğrudan çağırabilirsiniz. Vitest ve React Testing Library kurulumu Vitest track'inde anlatılıyor.

$ pnpm add -D axe-core
import { render } from '@testing-library/react'
import axe from 'axe-core'
import { expect, test } from 'vitest'
import { SignupForm } from './SignupForm'

test('SignupForm otomatik bulunabilen a11y hatası içermez', async () => {
  const { container } = render(<SignupForm />)
  const results = await axe.run(container)
  expect(results.violations).toEqual([])
})

Bilmeniz gereken iki sınır var. axe-core'un JSDOM desteği sınırlıdır ve color-contrast kuralı JSDOM'da çalışmaz; kontrastı gerçek tarayıcıda (Playwright ile) test edin.56 Component portal ile render ediliyorsa container yerine baseElement'i tarayın.6

İpucu

toHaveNoViolations() gibi bir matcher isterseniz vitest-axe, jest-axe'in Vitest için çatallanmış (fork) halidir ve aynı API'yi kullanır.7 Ancak paketin son sürümü 2022'de yayımlandı; eklemeden önce bakım durumuna bakın.8

Playwright ile Sayfa Taraması

Gerçek tarayıcıda tüm sayfayı taramak için @axe-core/playwright paketindeki AxeBuilder kullanılır.9 Playwright kurulumu Playwright track'inde anlatılıyor.

$ pnpm add -D @axe-core/playwright
import { test, expect } from '@playwright/test'
import AxeBuilder from '@axe-core/playwright'

test('ana sayfada otomatik bulunabilen a11y hatası yok', async ({ page }) => {
  await page.goto('/')
  const results = await new AxeBuilder({ page })
    .withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'])
    .analyze()
  expect(results.violations).toEqual([])
})

withTags taramayı belirli WCAG seviyeleriyle sınırlar; bazı axe kuralları WCAG'de karşılığı olmayan "best practice" kurallarıdır.9 Sayfanın bir bölümünü taramak için .include('#menu'), bilinen bir sorunu geçici olarak dışarıda bırakmak için .exclude() ya da .disableRules(['duplicate-id']) kullanılır. Açılır menü gibi etkileşimle görünen bir bölümü taramadan önce o bölümün görünmesini bekleyin.9

Yap

  • Menü, modal gibi durumları açıp öyle tarayın; kapalı bir menüdeki hata taramada görünmez.

Yapma

  • exclude ile sorunları kalıcı olarak gizlemeyin; seçilen elemanın tüm alt elemanları da taranmaz.9

eslint-plugin-jsx-a11y

eslint-plugin-jsx-a11y, JSX'i kod çalışmadan statik olarak inceler ve hataları editörde, yazarken gösterir. Yalnızca statik koda baktığı için çalışan DOM'u test eden bir araçla ve yardımcı teknolojiyle test edilerek tamamlanmalıdır.10

// eslint.config.js
import jsxA11y from 'eslint-plugin-jsx-a11y'

export default [
  jsxA11y.flatConfigs.recommended,
  // files ve globals ayarlarını ayrı bir nesnede ekleyin
]

Paylaşılan config files ya da globals ayarlamaz, bunları kendiniz eklersiniz.10 Next.js'in eslint-config-next paketi React, React Hooks ve Next.js kural setlerini getirir; zaten jsx-a11y gibi bir plugin kurduysanız çakışmayı önlemek için @next/eslint-plugin-next'i doğrudan kullanmanız önerilir.11

Lighthouse Skorunun Sınırı

Lighthouse erişilebilirlik skoru, otomatik denetimlerin ağırlıklı ortalamasıdır. Ağırlıklar axe'in kullanıcı etkisi değerlendirmesine göre verilir, her denetim ya geçer ya kalır. Elle yapılması gereken denetimler skora hiç girmez.12 Lighthouse'u çalıştırmayı Ölçüm dersinde gördünüz.

Manuel Matuzović, içeriği ekran okuyucudan gizleyen, odak çerçevesini kaldıran ve fareyi devre dışı bırakan, buna rağmen Lighthouse'tan 100 alan bir sayfa yaptı. Vardığı sonuç: otomatik test yalnızca ilk adımdır.13

Elle Kontrol: Klavyeyle Tur

Fareyi bir kenara bırakın ve sayfayı yalnızca klavyeyle kullanın:14

  • Tab ile ileri, Shift+Tab ile geri gidin. Link, buton, form alanı ve medya kontrollerinin hepsine ulaşabiliyor musunuz?

  • Girdiğiniz her elemandan Tab ile çıkabiliyor musunuz (klavye tuzağı yok mu)?

  • Odak mantıklı okuma sırasıyla mı ilerliyor?

  • Odaklanan eleman her zaman net görünüyor mu?

macOS'ta önce sistem ayarlarından klavyeyle tüm kontrollere gezinmeyi açmanız gerekebilir.14 Bu kontrollerin nasıl düzeltileceği Klavye ve odak yönetimi dersinde.

DevTools Accessibility Tree

Ekran okuyucunun okuduğu şey DOM değil, tarayıcının ürettiği erişilebilirlik ağacıdır (HTML dersinden hatırlayın). Chrome DevTools'ta görmek için:15

  1. Elements panelinde bir eleman seçin.

  2. Accessibility sekmesini açın (görünmüyorsa "More Tabs" altında).

  3. "Show accessibility tree" seçeneğini açın; DOM ağacı tüm sayfanın erişilebilirlik ağacıyla yer değiştirir.

Bir düğümü seçince tarayıcının hesapladığı özellikler Computed Properties altında görünür. Aynı sekmedeki Source Order Viewer, elemanların kaynak sırasını numaralarla gösterir.15

Ekran Okuyucuya İlk Adım

Ekran okuyucu bir yetenek gibi pratikle gelişir. Başlamak için birkaç kısayol yeterlidir.

VoiceOver (macOS'ta yerleşik, en iyi Safari ile çalışır):16

İşlemKısayol
Aç / kapatCmd+F5
VO tuşuControl+Option
Sonraki öğeVO+Sağ ok
Rotor (başlık, link, landmark listesi)VO+U
Sonraki başlıkVO+Cmd+H
Konuşmayı durdurControl

NVDA (Windows için ücretsiz):17

İşlemKısayol
BaşlatCtrl+Alt+N
Konuşmayı durdurCtrl
Sonraki satırAşağı ok
Sonraki başlık / landmarkH / D
Element listesiNVDA+F7
Browse ve focus modu arasında geçNVDA+Space

NVDA tuşu olarak kurulumda Caps Lock'u seçebilirsiniz.17

İpucu

İlk turda yalnızca üç şeye bakın: sayfanın başlıkları rotor ya da H ile anlamlı bir liste oluşturuyor mu, butonlar ve linkler adlarıyla okunuyor mu, form alanları etiketleriyle duyuruluyor mu?

Detaylı Öğrenmek İçin

  • Konuşma: Manuel Matuzović, "Building the most inaccessible site possible with a perfect Lighthouse score" (Access All Areas 21).18

  • Elle ilk inceleme: W3C'nin Easy Checks rehberi, araç gerektirmeyen kontroller.14

  • Araç karşılaştırması: Adrian Roselli'nin elle inceleme ile dört ücretsiz aracı karşılaştırdığı yazı.3

  • Ekran okuyucu rehberi: WebAIM'in VoiceOver makalesi, iOS dahil daha fazla kısayol.16

Kaynaklar

  • 1AraştırmaDeque: Automated Testing Study Identifies 57 Percent of Digital Accessibility Issues

    2.000'den fazla denetime dayanan, sorun sayısına göre hesaplanmış otomatik test kapsamı.

  • 2AraştırmaGOV.UK Accessibility Blog: What we found when we tested tools on the world's least-accessible webpage

    10 otomatik aracın 143 hatalı bir sayfada ne kadarını bulduğu.

  • 3MakaleAdrian Roselli: Comparing Manual and Free Automated WCAG Reviews

    Aynı sayfada elle inceleme ile axe, ARC, WAVE ve Equal Access sonuçları.

  • 4AraştırmaWebAIM Million 2026

    Bir milyon ana sayfadaki otomatik tespit edilen hatalar ve otomatik aracın sınırı.

  • 5Repodequelabs/axe-core

    axe-core'un kapsadığı WCAG sürümleri, `axe.run` kullanımı ve JSDOM sınırları.

  • 6Repojest-axe README

    React Testing Library ile axe kullanımı, JSDOM'da kontrast ve portal notu.

  • 7Dokümannpm: vitest-axe

    jest-axe'in Vitest için fork'u ve matcher kurulumu.

  • 8DokümanDepScope: vitest-axe

    vitest-axe paketinin sürüm geçmişi ve bakım durumu.

  • 9DokümanPlaywright: Accessibility testing

    `AxeBuilder`, `withTags`, `include`/`exclude` ve otomatik testin sınırları.

  • 10Repojsx-eslint/eslint-plugin-jsx-a11y

    JSX'i statik inceleyen kurallar ve flat config kullanımı.

  • 11DokümanNext.js: ESLint Plugin

    `eslint-config-next` içeriği ve başka plugin'lerle çakışmayı önleme.

  • 12DokümanChrome for Developers: Lighthouse accessibility score

    Erişilebilirlik skorunun ağırlıklı ortalamayla hesaplanması.

  • 13MakaleManuel Matuzović: Building the most inaccessible site possible with a perfect Lighthouse score

    100 puan alan ama kullanılamayan bir sayfa ve kullanılan hileler.

  • 14DokümanW3C WAI: Easy Checks, A First Review of Web Accessibility

    Klavye erişimi ve görünür odak dahil araçsız ilk kontroller.

  • 15DokümanChrome for Developers: Accessibility features reference

    Accessibility sekmesi, tam sayfa erişilebilirlik ağacı ve Source Order Viewer.

  • 16MakaleWebAIM: Using VoiceOver to Evaluate Web Accessibility

    VoiceOver'ı açma, VO tuşları, rotor ve temel gezinme kısayolları.

  • 17MakaleWebAIM: Using NVDA to Evaluate Web Accessibility

    NVDA kurulumu, browse/focus modu ve temel kısayollar.

  • 18VideoManuel Matuzović: Building the most inaccessible site possible with a perfect Lighthouse score (Access All Areas 21)

    Mükemmel otomatik skorun neden yeterli olmadığını gösteren konuşma.

Bu sayfayı düzenle

Son güncelleme tarihi: 17 Ekim 2026

Önceki adım08. Renk, kontrast ve hareket