--- id: test-annotations title: "Annotations" --- Sadly, tests do not always pass. Luckily, Playwright Test supports test annotations to deal with failures, flakiness and tests that are not yet ready. ```js js-flavor=js // example.spec.js const { test, expect } = require('@playwright/test'); test('some feature', async ({ page, browserName }) => { test.skip(browserName !== 'webkit', 'This feature is iOS-only'); // Test goes here. }); test('another feature', async ({ page }) => { test.fail(true, 'Broken, need to fix!'); // Test goes here. }); ``` ```js js-flavor=ts // example.spec.ts import { test, expect } from '@playwright/test'; test('some feature', async ({ page, browserName }) => { test.skip(browserName !== 'webkit', 'This feature is iOS-only'); // Test goes here. }); test('broken feature', async ({ page }) => { test.fail(); // Test goes here. }); ``` Annotations apply when the condition is truthy, or always when no condition is passed, and may include a description. Annotations may depend on test fixtures. There could be multiple annotations on the same test, possibly in different configurations. Available annotations: - `skip` marks the test as irrelevant. Playwright Test does not run such a test. Use this annotation when the test is not applicable in some configuration. - `fail` marks the test as failing. Playwright Test will run this test and ensure it does indeed fail. If the test does not fail, Playwright Test will complain. - `fixme` marks the test as failing. Playwright Test will not run this test, as opposite to the `fail` annotation. Use `fixme` when running the test is slow or crashy. - `slow` marks the test as slow and triples the test timeout.