Can I use BDD with Playwright?
Testing with Behavior-Driven Development (BDD) is not supported by default with the Playwright integration, and you’ll have to rely on a third-party integration such as Playwright BDD. To enable it, you’ll need to adjust your fixture file to compose the Playwright BDD API with Chromatic via the mergeTests function.
import { test as chromaticTest } from "@chromatic-com/playwright";
import { test as base, createBdd } from "playwright-bdd";
import { mergeTests } from "@playwright/test";
const FIXTURES = {
  // Custom fixtures go here
} as const;
export const test = mergeTests(chromaticTest, base).extend<typeof FIXTURES>(
  FIXTURES,
);
export const { Given, When, Then } = createBdd(test);Configure Playwright BDD with Chromatic
If you need to include any of the available configuration options supported by Chromatic in your BDD tests, you’ll need to provide a custom tag to the feature file and adjust your fixture file to override the required option as needed.
@noAutoSnapshot
Feature: Homepage
  Scenario: Homepage loads
    Given I am on the homepage
    Then I see the title "Welcome"import { test as chromaticTest } from "@chromatic-com/playwright";
import { test as base, createBdd } from "playwright-bdd";
import { mergeTests } from "@playwright/test";
export const test = mergeTests(chromaticTest, base).extend({
  disableAutoSnapshot: async ({ $tags }, use) => {
    await use($tags.includes('@noAutoSnapshot'));
  },
  // Add additional options here
});
export const { Given, When, Then } = createBdd(test);Enabling targeted snapshots with BDD
To enable targeted snapshots with BDD, adjust your test steps file to use the $testInfo fixture to pass the test information to the takeSnapshot function allowing you to take a snapshot of the page at a specific point in the test.
import { expect, takeSnapshot } from "@chromatic-com/playwright";
import { Given, Then } from "./fixtures";
Given("I am on the homepage", async ({ page }) => {
  await page.goto("/");
});
Then("I see the title {string}", async ({ page }, keyword: string) => {
  await expect(page).toHaveTitle(new RegExp(keyword));
  await takeSnapshot(page, "Page Loaded", $testInfo);
});