VISUAL REGRESSION TESTING

See every unintended UI changebefore your users do.

Verity writes Playwright visual tests that reach a stable state of each key screen, mask volatile regions like timestamps and avatars, and compare a screenshot against a baseline committed in your repository. A change over your threshold is flagged as changed — you approve the new baseline or fix the regression.

Free plan · no credit card · 15 AI tests a month · unlimited CI runs

What it checks

Layout and styling drift

Broken grids, overlapping elements, missing icons, wrong colours after a CSS or dependency change.

Key screens and components

Full pages or a single component, each in its own focused spec.

Noise-free comparisons

Dynamic content is masked and one suite-wide threshold controls how much pixel drift is allowed.

First-run baselines

A new test captures its baseline in CI and hands it back as an artifact to commit — same OS as later runs.

How it works

  1. 01

    Paste a URL

    Verity picks stable states worth snapshotting and writes one spec per state.

  2. 02

    Run once to capture baselines

    Download the captured images from the CI artifact and commit them next to the specs.

  3. 03

    Every PR compares

    Changes over your threshold are reported as changed snapshots with the diff.

tests/verity/visual/pricing.visual.spec.tsEXAMPLE
import { test, expect } from "@playwright/test";

test("pricing page looks right", async ({ page }) => {
  await page.goto("https://staging.example.com/pricing");
  await page.getByRole("heading", { name: "Pricing" }).waitFor();
  await expect(page).toHaveScreenshot("pricing.png", {
    fullPage: true,
    mask: [page.getByTestId("live-chat")],
  });
});

Why teams choose Verity

Unlimited snapshots

Baselines live in your repo and run in your CI, so there is no per-screenshot fee.

Standard Playwright

toHaveScreenshot, the same API your team already knows.

One threshold to tune

Set the allowed drift once in CI Setup instead of in every test.

One place for every test type

UI, API, visual, AI-agent, load and security results share one run history and one verdict per release. Every plan includes all six.

Frequently asked questions

Where are visual baselines stored?

In your repository, next to each spec. CI compares against them; you update them by committing new images.

Why do baselines need to be captured on the CI OS?

Fonts and anti-aliasing render slightly differently per operating system. Capturing baselines on the same OS as CI (Linux on GitHub-hosted runners) avoids false diffs — Verity's first run does exactly that.

How do you avoid flaky visual tests?

Specs wait for the key element, mask volatile regions, and use a suite-wide pixel-drift threshold rather than an exact match.

Related

Try it on your own app.

Free plan, no credit card: 15 AI-written tests a month and unlimited runs in your CI.

Free plan · no credit card · 15 AI tests a month · unlimited CI runs