≪ Today I learned. RSS購読
公開日
タグ
JavaScript , HTML , Accessibility
著者
ダーシノ(@bc_rikko)

PlaywrightとAxeでE2Eテストにアクセシビリティチェックを組み込む

ReactやVueなどでコンポーネントを分割しながら開発していると、文書全体の整合性チェックができない。そのため、E2Eテストに組み込むことでレンダリング後のHTMLを確認する。

準備、インストール

# playwright のセットアップ
$ npm init playwright
$ npm i -D @axe-core/playwrigh

Playwrightの設定ファイル

雛形が作られているのでカスタマイズする。

// playwright.config.ts  
export default defineConfig({
  projects: [
    {
      name: 'chromium',
      use: {
        ...devices['Desktop Chrome'],
        ignoreHTTPSErrors: true,  // ← 自己署名証明書を使っている場合はtrue
      },
    },
    ...
  },
  webServer: {
    command: 'npm run dev',  // ← viteで開発用Webサーバを起動する
    reuseExistingServer: !process.env.CI,
  },
})

テスト

import { expect, test } from '@playwright/test'

test('ログインページ', async ({ page }) => {
  await page.goto('/')
  await expect(page).toHaveTitle('ログイン')

  // レンダリングされるまで待機
  await expect(page.getByRole('heading', { name: 'ログイン', level: 1 })).toBeVisible()

  // アクセシビリティチェック
  const accessibilityScanResults = await new AxeBuilder({ page }).analyze()

  // results#violationsにチェック結果が含まれているので必要に応じてconsoleに出力する
  await expect(accessibilityScanResults.violations.length).toBe(0)
})