Skip to main content

What Is Visual Regression Testing?

Functional tests verify that your application behaves correctly. Visual regression tests verify that it looks correct. The two complement each other — a functional test can confirm a button is clickable while a visual regression test catches that the button turned invisible after a CSS change.

The Problem It Solves

Frontend codebases are fragile in ways that are hard to catch with functional tests. A developer changes a shared CSS variable, and suddenly ten components have the wrong colour. A library upgrade changes a default font size. A layout refactor shifts elements by a few pixels. None of these break functionality — everything still clicks — but users notice immediately.

Visual regression testing catches these changes automatically by comparing screenshots of your UI against a set of approved baseline images.

How It Works

The basic workflow:

  1. Take baseline screenshots of your UI in a known-good state
  2. After every code change, take new screenshots
  3. Compare the new screenshots against the baseline pixel by pixel
  4. Flag differences as potential regressions for human review
  5. If the change was intentional, approve the new screenshots as the new baseline

The comparison step produces a diff image highlighting exactly what changed — making it easy to see at a glance whether a change is a bug or an intentional update.

What Visual Regression Catches

  • Unintended colour changes from CSS variable modifications
  • Layout shifts from flexbox or grid changes
  • Text overflow when content is longer than the design anticipated
  • Component style changes from library upgrades
  • Responsive breakpoint regressions
  • Font rendering differences across browsers
  • Animation states frozen at unexpected positions

What It Doesn't Catch

Visual regression is not a replacement for functional tests. It catches visual differences — not broken logic, failed API calls, or incorrect data. Use it alongside functional tests, not instead of them.

Tools in 2026

Percy (now part of BrowserStack): CI-integrated, cloud-hosted screenshot comparison. Connects to your existing Playwright or Cypress tests.

Chromatic: Purpose-built for Storybook. If you maintain a component library, Chromatic is the natural choice.

Playwright snapshots: Built-in screenshot comparison in Playwright — no additional service required. Snapshots stored in your repository.

Applitools: AI-powered visual testing that's smart about what counts as a meaningful visual difference (ignores font rendering noise, antialiasing differences between machines).

In this course, you will learn Playwright's built-in snapshots (free, no additional tools) and how to integrate with Percy for team workflows.