Use storageState() for Authentication

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard

Authenticating tests using Playwright's saved session cookies

Not for use with personal data

If your tests require authenticated sessions, you can use Playwright's storageState() to load previously saved authentication cookies into the browser context. Because Axe Watcher uses its own Playwright fixtures, you must merge the authentication fixture with Axe Watcher's fixture using mergeTests.

Fixtures File

Create a fixtures.ts file that reads cookies from a saved storageState.json file and injects them into the Playwright BrowserContext:

import { readFileSync } from 'fs'
import { test as base, type BrowserContext, mergeTests } from '@playwright/test'
import { playwrightTest } from '@axe-core/watcher/playwright-test'

// Environment variables for Axe Developer Hub
const ACCESSIBILITY_API_KEY = process.env.ACCESSIBILITY_API_KEY
const PROJECT_ID = process.env.PROJECT_ID
const SERVER_URL = process.env.SERVER_URL

// Configure Axe Watcher
const { test: watcherTest, expect } = playwrightTest({
  axe: {
    apiKey: ACCESSIBILITY_API_KEY,
    projectId: PROJECT_ID,
    serverURL: SERVER_URL
  },
  headless: false
})

// Custom fixture: Cookie-based authentication
class AuthCookie {
  #context: BrowserContext

  constructor(context: BrowserContext) {
    this.#context = context
  }

  async inject() {
    await this.#context.addCookies(
      JSON.parse(readFileSync('storageState.json', 'utf-8')).cookies
    )
  }
}

// Define auth cookie fixture
const authCookieFixture = base.extend<{ authCookie: AuthCookie }>({
  authCookie: async ({ context }, use) => {
    const auth = new AuthCookie(context)
    await use(auth)
  }
})

// Merge fixtures
const test = mergeTests(authCookieFixture, watcherTest)

// Export merged test and expect
export { test, expect }

Usage in Tests

In your test files, call authCookie.inject() before navigating to authenticated pages:

import { test, expect } from './fixtures'

test('should display accessible authenticated page', async ({ page, authCookie }) => {
  await authCookie.inject()
  await page.goto('https://example.com/authenticated-page')

  // Accessibility testing happens automatically
})
note

Generate storageState.json before running your tests using Playwright's global setup. This file contains authentication cookies and should not be committed to source control.

See Also