Skip to Content

API Methods

levelAnalyze

levelAnalyze(page: Page, config?: LaunchConfig): Promise<AnalysisResultData>

Runs a static accessibility analysis on the current page and generates a folder with analysis result data.

Properties

PropertyTypeDefaultDescription
pagePuppeteer.PagePuppeteer Page object to analyze
configLaunchConfig{}Optional configuration object

Returns

Returns a Promise, which should resolve, otherwise return value will contain error object.

Usage

const page = await browser.newPage() await page.goto('http://localhost:5000') await levelAnalyze(page, { reportPath: './custom-reports-folder', })

Important: Make sure to use levelAnalyze after your tests have run successfully. If you add it to a teardown or cleanup hook, add a condition to check the success of execution. Otherwise, every rerun will produce a new report that is to be uploaded and processed, even when the run fails in the middle.


levelSetup

levelSetup(config: LaunchConfig): void

Configure global settings for all Level CI analysis runs. Use this in a setup file or before your scripts for a clean setup.

Properties

PropertyTypeDefaultDescription
configLaunchConfigGlobal configuration object

Returns

No return value (void). Configuration is stored globally and applied to all subsequent levelAnalyze calls.

Note: Global configuration can be overridden per run. For this provide config per levelAnalyze call. Arrays and objects are merged with run-level config.

Usage

Call levelSetup once in a setup file or at the start of your script:

// e2e/setup.ts import { levelSetup } from '@level-ci/a11y-puppeteer' levelSetup({ reportPath: 'level-ci-reports-custom', stableSelectorAttributes: ['data-testid'], })

Then in your scripts:

// e2e/demo.ts import puppeteer from 'puppeteer' import { levelAnalyze } from '@level-ci/a11y-puppeteer' import './setup' ;(async () => { const browser = await puppeteer.launch() const page = await browser.newPage() await page.goto('/') const config = {} await levelAnalyze(page, config) await browser.close() })()

Override config per run:

await levelAnalyze(page, { reportPath: './per-run-reports', customTags: ['smoke'], })

Config

LaunchConfig

interface LaunchConfig { switchOff?: boolean reportPath?: string ignoreUrls?: RegExp[] customTags?: string[] stableSelectorAttributes?: string[] }

switchOff   boolean

Disable rules check globally or per specific run.

Default: false
Environment variable: LEVEL_CI_SWITCH_OFF
Example value: true
See code examples here.

reportPath   string

Folder path to store analysis artifacts.

Default: 'level-ci-reports'
Environment variable: LEVEL_CI_REPORT_PATH
Example value: 'my-custom-report-path'
See code examples here.

ignoreUrls   RegExp[]

Skip analysis for URLs matching these patterns.

Example value: [/home/, /settings\/privacy/, /articles\/*/]
See code examples here.

customTags   string[]

Add custom tags for scan identification.

Example values: ['alpha', 'beta', 'scenario-1']
See code examples here.

If you pass ‘scenario-1’ as a custom tag, you will see it among the other tags for the newly found issues on the dashboard. This way you can identify which issue appeared, while testing scenario-1.

stableSelectorAttributes   string[]

Add to reliably identify elements with dynamic IDs.

Example values: ['data-testid']
See code examples here

Why is this needed? Flaky issues often occur when elements have dynamic IDs. Level CI tracks elements across scans to monitor accessibility issues, but if an element’s id changes between scans, it treats it as a new element. This causes old issues to close and new issues to open for the same element.

Usage:

  1. Add a stable attribute to elements with dynamic IDs, e.g.:
<p data-testid="hello-paragraph-element"> Hello from an element with a dynamic id attribute </p>
  1. Configure Level CI to use this attribute in levelAnalyze:
await levelAnalyze(page, { stableSelectorAttributes: ['data-testid'], })

Examples

Set custom report path

Option 1: Globally with levelSetup

levelSetup({ reportPath: './custom-reports-folder', })

Option 2: Per run with levelAnalyze

await levelAnalyze(page, { reportPath: './custom-reports-folder', })

Option 3: Using environment variable

LEVEL_CI_REPORT_PATH=./custom-reports

Add stable selector attributes

Option 1: Globally with levelSetup

levelSetup({ stableSelectorAttributes: ['data-testid', 'data-qa'], })

Option 2: Per run with levelAnalyze

await levelAnalyze(page, { stableSelectorAttributes: ['data-testid', 'data-qa'], })

Disable rule check

Option 1: Globally with levelSetup

levelSetup({ switchOff: true, })

Option 2: Per run with levelAnalyze

await levelAnalyze(page, { switchOff: true, })

Option 3: Using environment variable

LEVEL_CI_SWITCH_OFF=true

Add specific tags for this analysis run

Option 1: Globally with levelSetup

levelSetup({ customTags: ['my-tag', 'regression'], })

Option 2: Per run with levelAnalyze

await levelAnalyze(page, { customTags: ['my-tag', 'regression'], })

Ignore specific URLs during analysis

Option 1: Globally with levelSetup

levelSetup({ ignoreUrls: [/localhost:3000/, /example.com/], })

Option 2: Per run with levelAnalyze

await levelAnalyze(page, { ignoreUrls: [/localhost:3000/, /example.com/], })
Last updated on