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

    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)
    })