Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Use Playwright Test’s expect(page).toHaveScreenshot() for a whole-page contract or expect(locator).toHaveScreenshot() for a component. The first run writes a reference image; subsequent runs capture the same state and compare it with that committed baseline. Reliable results depend less on the assertion itself than on controlling browser state, rendering environment, animation, and dynamic content.

What Playwright image snapshots test

Playwright’s screenshot assertions are part of the Playwright Test runner. A page assertion checks composition across the viewport, while a locator assertion limits the contract to one element or component. Both produce an image that can be reviewed in a code change.

Page-level snapshot

import { test, expect } from '@playwright/test';

test('landing page visual state', async ({ page }) => {
  await page.goto('/');
  await expect(page).toHaveScreenshot('landing.png');
});

Use this when layout, navigation, typography, and interactions across the page are intentionally part of the visual contract.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Locator-level snapshot

import { test, expect } from '@playwright/test';

test('continue button appearance', async ({ page }) => {
  await page.goto('/checkout');
  await expect(page.getByRole('button', { name: 'Continue' }))
    .toHaveScreenshot('continue-button.png');
});

A locator snapshot is usually more focused and less vulnerable to unrelated page changes. Choose a stable locator rather than a generated class name.

#1 Best Overall
Sale
Ishihara Test Chart Books, for Color Deficiency
  • Grafco Ishihara Test Chart Book
  • Package Info: Each
  • Includes four special plates for tests to determine the kind and degree of defect in color vision.
  • Image may not reflect actual product sold. Please read description carefully.
  • GHF1254

How baselines are created and maintained

Create the first reference deliberately

  1. Write the assertion and put the application in the intended state.
  2. Run the test. If the snapshot is missing, Playwright reports that fact and writes the captured image as the initial expectation.
  3. Inspect the generated file at the snapshot location before accepting it.
  4. Commit the snapshot directory with the test so CI and reviewers use the same reference.

The initial image is not proof that the UI is correct; it is only the starting contract. Verify content, font loading, viewport, and state before committing it.

Review an intentional change

When a designed change is ready, update snapshots explicitly:

npx playwright test --update-snapshots

Review every changed image and the source-code change together, then commit only the expected updates. Updating snapshots without inspection can turn a regression into the new baseline.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep snapshot names and locations understandable

Use names such as dashboard-dark.png or profile-empty.png, and keep related snapshots near their tests. A descriptive name tells a reviewer which state is covered and makes stale files easier to remove.

Rank #2
Ishihara Colour Vision Test Book for Color Deficiency 24 Plates with User Manual
  • individuals with color vision defect should see a different figure from individuals with normal color vision.
  • Makes use of the peculiarity that in red-green blindness, blue and yellow appear remarkably bright compared with red and green
  • Diagnostic plates: intended to determine the type of color vision defect
  • Ishihara Test Chart Books for Color Deficiency 24 Plates with usar manual

Make captures repeatable before tuning thresholds

Playwright waits for two consecutive screenshots to match before comparing them. That settling check helps with late layout changes, but it cannot make different machines render identically. The Playwright Visual comparisons documentation warns: “Browser rendering can vary based on the host OS, version, settings, hardware, power source (battery vs. power adapter), headless mode, and other factors.”

Standardize the rendering environment

  • Generate and compare baselines on the same operating system and browser version.
  • Keep viewport, device scale factor, browser launch settings, and headless mode consistent.
  • Use the same hardware class where practical; power state can affect rendering.
  • Pin the Playwright version in your project and confirm behavior against the installed version, especially when documentation is labeled “Next.”

Control application state

  • Seed deterministic test data instead of relying on production-like changing records.
  • Freeze or control dates, random values, IDs, and feature flags used in the rendered page.
  • Wait for the page’s meaningful readiness condition, such as a visible heading or loaded table, before asserting.
  • Move the pointer to an inert area so an accidental hover state is not captured.
  • Ensure web fonts and critical images have loaded before the screenshot.

A stable test state is more valuable than a permissive pixel threshold. If CI uses a different browser image from local development, generate the baseline in CI’s image and review changes there.

Reduce animation and dynamic noise

Screenshot options can control animation behavior, caret visibility, scaling, clipping, and stylesheets. Use them to remove volatility that is irrelevant to the visual contract, not to hide a real defect.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Disable transitions and blinking effects

Pass a stylesheet that turns off transitions, animations, and caret blinking for the capture. For example:

Rank #3
Ishihara Test Chart Books for Color Deficiency 38 Plates with User Manual and One Eye Occluder by KASHSURG
  • Vanishing design: Only people with good color vision can see the sign. If you are colorblind you won’t see anything.
  • Transformation design: Color blind people will see a different sign than people with no color vision handicap.
  • Hidden digit design: Only colorblind people are able to spot the sign. If you have perfect color vision, you won’t be able to see it.
  • Classification design: This is used to differentiate between red- and green-blind persons. The vanishing design is used on either side of the plate, one side for deutan defects an the other for protans.
await expect(page).toHaveScreenshot('settings.png', {
  animations: 'disabled',
  caret: 'hide',
  style: `
    *, *::before, *::after {
      animation-duration: 0s !important;
      animation-delay: 0s !important;
      transition: none !important;
      caret-color: transparent !important;
    }
  `
});

Use the documented option supported by your installed Playwright version. A stylesheet can also hide a known volatile region, such as a rotating advertisement or an embedded third-party panel:

await expect(page).toHaveScreenshot('article.png', {
  style: '[data-visual-noise] { visibility: hidden !important; }'
});

Do not hide prices, validation messages, user-facing status, or any region whose appearance is part of the requirement. If a dynamic area matters, make its data deterministic instead.

Choose page or locator scope intentionally

A locator assertion naturally excludes unrelated banners and sidebars. A page assertion catches regressions in the overall composition, including spacing changes caused by a component. Many teams use locator snapshots for reusable components and a smaller number of page snapshots for key journeys.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set comparison tolerances carefully

Playwright uses pixel matching for screenshot comparisons. The official configuration reference lists a pixelmatch color threshold default of 0.2, on a scale from 0 (strict) to 1 (lax). You can also configure a maximum differing-pixel count or ratio; these limits are unset by default.

await expect(page).toHaveScreenshot('report.png', {
  threshold: 0.2,
  maxDiffPixels: 100,
  maxDiffPixelRatio: 0.001
});

Use one appropriate limit rather than stacking generous allowances. A threshold can absorb anti-aliasing differences, but a high color threshold or large pixel allowance can conceal a changed icon, text color, or border. Start strict, inspect real diffs, and loosen only for a documented rendering variation.

Rank #4
NCE Visual Study Guide & Activity Book by Lindsay Braman - Spiral-Bound Test Prep for National Counselor Exam & CPCE - Illustrated Interactive Studying to Engage Creative, Neurodiverse, & ADHD Minds.
  • This illustrated & interactive study guide for the National Counselor Exam (NCE) uses images, colors, mnemonics, and humor to engage brains in effective study.
  • 150+ page activity book including coloring book pages, fill in the blank sheets, and tear-out flashcards with content addressing all domains covered in the NCE + CPCE counselor exams.
  • Full size 8.5x11, spiral-bound for lie-flat studying.
  • Printed on premium, 80lb textured paper you can color and highlight with no bleed.
  • Drawn by (human!) hand. Printed and bound in the USA.

Useful capture options

  • Animations and caret: disable motion and hide the text caret when they are not under test.
  • Scale: choose the screenshot scale consistently with the project’s browser configuration.
  • Clip: capture a defined rectangle when a page region, rather than a locator, is the contract.
  • Stylesheets: inject narrowly scoped rules for known noise.
  • Maximum differences: set a count or ratio only after measuring what harmless rendering variation looks like in your controlled environment.

What to do when a diff appears

  1. Decide whether the change is intentional. Check the design or implementation change before touching the baseline.
  2. Verify state and data. Confirm the same route, account, seed data, feature flags, date, and network responses were used.
  3. Check the environment. Compare operating system, browser version, Playwright version, viewport, device scale, headless mode, and hardware or power conditions.
  4. Look for transient UI. Inspect hover, focus, caret, animation, delayed fonts, lazy images, skeletons, timestamps, ads, and third-party embeds.
  5. Read the diff alongside source changes. A one-pixel edge shift may indicate environment drift; a changed text block or missing control usually indicates an application issue.
  6. Fix the cause, then rerun. Do not use --update-snapshots until the new appearance is understood and expected.

Keep the actual image, expected image, and diff artifact from CI when investigating. The location and artifact format depend on your Playwright configuration, so preserve whatever your runner emits rather than relying on a local reproduction alone.

Common failure modes and fixes

Symptom Likely cause Fix
Every pixel differs after a browser upgrade Changed browser or rendering stack Pin versions, run in the baseline environment, and regenerate snapshots only after reviewing the full set of changes.
Only text edges differ Font, operating-system, scale, or anti-aliasing variation Use the same environment and fonts; do not immediately raise the threshold.
Header or menu appears intermittently Hover, focus, animation, or asynchronous state Move the pointer, set focus deliberately, disable motion, and wait for a stable locator.
Images are blank or shifted Lazy loading or network timing Wait for the relevant image or content condition and make test data/network responses deterministic.
Baseline is missing First run or incorrect snapshot path/name Run the test intentionally, inspect the generated image, and commit the expected directory.
Diff is accepted despite an obvious change Threshold or differing-pixel allowance is too lax Reduce tolerance and scope the assertion; keep allowances tied to a known rendering variation.

Run visual checks efficiently in CI

Visual tests are most useful when they run against the same controlled project and browser image on every pull request. Keep the assertion state concise, avoid unnecessary full-page captures, and use locator snapshots for components that can be tested independently. Full-page checks are appropriate when page composition itself is the requirement, but they create larger artifacts and more places for unrelated noise.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Separate intentional baseline updates from ordinary test runs in your review policy. A pull request that changes application code and snapshots should explain why the visual change is expected. Retain failed-image artifacts long enough for reviewers to distinguish a layout regression from environment drift.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

When a hosted visual service is useful

The built-in assertion is the direct starting point for teams already using Playwright Test: snapshots stay with the code, the test controls the browser, and review can happen in the normal pull request. A hosted service becomes relevant when you need a cloud review dashboard, collaboration or approval workflows, or provider-managed cross-browser and viewport coverage. Percy documents hosted Playwright and cross-browser workflows, and Chromatic documents a Playwright extension and cloud review workflow. Their current commercial availability, limits, and pricing can change, so check the providers’ current terms before selecting one.

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server for developers. One request returns a PNG, JPEG, WebP, or PDF, and it can handle capture work without you maintaining a browser runner for that request.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo documentation for request options and response details. ScreenshotNeo removes cookie-consent banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, with the response identifying the page verdict and billing status in headers. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf to Claude, Cursor, and other MCP clients.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan. Create a free ScreenshotNeo account to try it.

Python and Node.js alternatives for the same capture endpoint

Python

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
    timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)

Node.js

const q = new URLSearchParams({
  access_key: 'YOUR_API_KEY',
  url: 'https://stripe.com'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot failed: ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));

These API captures complement, rather than replace, Playwright assertions when your test must verify an interaction sequence, browser state, or a committed visual baseline.

Frequently Asked Questions

Should I use a page snapshot or a locator snapshot?

Use a page snapshot when the whole composition is the requirement; use a locator snapshot when one component or control is the visual contract.

Can Playwright snapshots replace functional tests?

No. They detect rendered visual changes, but they do not prove keyboard behavior, navigation, accessibility semantics, or business logic.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Is a failed screenshot assertion always a UI bug?

No. Environment drift, fonts, animation, hover state, asynchronous data, and other unstable inputs can produce a diff. Diagnose those causes before changing the baseline.

Quick Recap

SaleBestseller No. 1
Ishihara Test Chart Books, for Color Deficiency
Ishihara Test Chart Books, for Color Deficiency
Grafco Ishihara Test Chart Book; Package Info: Each; Image may not reflect actual product sold. Please read description carefully.
$19.00
Bestseller No. 2
Ishihara Colour Vision Test Book for Color Deficiency 24 Plates with User Manual
Ishihara Colour Vision Test Book for Color Deficiency 24 Plates with User Manual
Diagnostic plates: intended to determine the type of color vision defect; Ishihara Test Chart Books for Color Deficiency 24 Plates with usar manual
$30.00
Bestseller No. 4
NCE Visual Study Guide & Activity Book by Lindsay Braman - Spiral-Bound Test Prep for National Counselor Exam & CPCE - Illustrated Interactive Studying to Engage Creative, Neurodiverse, & ADHD Minds.
NCE Visual Study Guide & Activity Book by Lindsay Braman - Spiral-Bound Test Prep for National Counselor Exam & CPCE - Illustrated Interactive Studying to Engage Creative, Neurodiverse, & ADHD Minds.
Full size 8.5x11, spiral-bound for lie-flat studying.; Printed on premium, 80lb textured paper you can color and highlight with no bleed.
$48.99

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.