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.

First identify where the failure occurs: browser installation, Chrome launch, page navigation, or screenshot comparison. A Puppeteer update can also change the browser binary, so a test that still runs may render different pixels. Check the installed Puppeteer version and its supported browser, then match the fix to the exact error and environment.

Classify the failure before changing dependencies

Record the complete error, the command that triggers it, and whether it happens locally, in CI, or in both places. BackstopJS uses browser automation for visual regression tests, but an unsuccessful run is not automatically a Backstop scenario problem.

What you see Likely area to investigate
“Could not find Chrome” or a missing executable Browser download, install scripts, cache location, or executable path.
Chrome starts and then exits, or Puppeteer reports a launch error Host libraries, container permissions, sandbox configuration, or writable profile/cache directories.
The browser launches but a page errors or times out Navigation, network access, target site behavior, and timeout settings.
Tests finish but image comparisons fail Rendering differences such as browser build, operating system, fonts, viewport, or page state.

Before editing the config, capture the Node.js version, BackstopJS and Puppeteer versions, operating system or CI image, and relevant stack trace. Without those details, there is no reliable universal version pin or config patch.

Check which browser your Puppeteer version expects

Puppeteer versions are associated with specific browser versions. The Puppeteer team explains: “Every Puppeteer release is tightly bundled with a specific browser release to ensure compatibility with the implementation of the underlying protocols, the Chrome DevTools Protocol and WebDriver BiDi.” See the supported browsers table and compare it with the version actually installed in the project.

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.
  1. Inspect package.json and the lockfile for BackstopJS, puppeteer, and puppeteer-core. A dependency may be transitive, so check the resolved dependency tree rather than relying only on direct declarations.
  2. Check the installed package version using your package manager’s dependency listing, and compare it against Puppeteer’s browser compatibility table.
  3. If the project supplies a separate Chrome or Chromium binary, verify its version and the exact executable path configured for the run.
  4. Reproduce from a clean dependency installation where practical, keeping the lockfile and Node version fixed. This helps distinguish a dependency-resolution change from a machine-specific browser or cache issue.

The standard puppeteer package downloads a browser; puppeteer-core is intended for projects that manage the browser themselves. Choosing an external browser can give a team explicit control over the executable, but it also makes browser-version compatibility and local/CI consistency the project’s responsibility. The official installation guide describes the package and browser setup.

Fix a missing Chrome or Chromium executable

A missing-browser error commonly means the browser download did not happen, not that a Backstop scenario is malformed. Package managers or build policies can block install scripts, which Puppeteer uses to download its browser.

  1. Check whether the package installation process allowed Puppeteer’s install script to run.
  2. Check the user account and cache directory available to the process, especially in CI or a container.
  3. When appropriate for the installed Puppeteer package, install its browser explicitly with npx puppeteer browsers install.
  4. If the browser was installed in a non-default location, configure the expected cache or executable path consistently for local development and CI.

Puppeteer documents PUPPETEER_CACHE_DIR for controlling the browser cache location; consult its troubleshooting guide before changing cache paths. Avoid reinstalling BackstopJS as a reflex: it will not fix a browser download that install policy or cache configuration prevented.

Fix a browser that is present but will not launch

When Chrome exists but exits or crashes, investigate the actual host rather than copying flags from an unrelated issue. The BackstopJS Puppeteer engine accepts additional or overriding browser launch settings through engineOptions; its project documentation describes the engine configuration.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Inspect the active Backstop config and confirm which engine it uses. Check existing engineOptions before adding new settings.
  2. On Linux, use the error output and Puppeteer’s troubleshooting documentation to identify missing system libraries and install the dependencies required by the chosen image.
  3. In containers or restricted CI workers, confirm that the process can write to its browser cache and profile directories and has the permissions the browser needs.
  4. For Alpine-based images, check the specific compatibility requirements documented by Puppeteer; do not assume a fix for a Debian-based image applies.
  5. Only adjust launch arguments, such as sandbox-related flags, when the environment and error justify them. Backstop supports configurable arguments, but a flag is not a substitute for diagnosing missing libraries, permissions, or paths.

For reproducible CI, keep the Node version, dependency lockfile, operating-system image, browser source, and relevant environment configuration aligned between runs. If local tests pass while CI fails, compare those items before changing scenario definitions.

Handle navigation errors and timeouts separately

If the browser launches but a scenario cannot load its target, first verify that the target is reachable from the same environment and that the failure is a navigation problem rather than a process crash. Inspect the full error and the page or request where it occurs. A timeout can reflect network access, a slow or changed target, or a scenario waiting for a state that no longer appears; increasing a timeout without identifying which condition is unmet can hide the underlying problem.

Rank #4
The Web Testing Handbook
  • Used Book in Good Condition
  • Check whether CI can reach the target URL, including any authentication or network restrictions.
  • Confirm the configured wait condition still matches the page’s behavior.
  • Compare the failure with a local run using the same dependencies and browser build.
  • Change only the relevant navigation or wait configuration once the failing condition is clear.

When tests run but screenshot diffs change

A successful run with changed snapshots is different from a launch failure. Since Puppeteer releases are paired with browser releases, a browser update can affect rendering even when the automation code works. Before accepting new reference images, verify that the environment and capture conditions are comparable:

  • Browser build and executable source
  • Operating-system or container image
  • Installed fonts
  • Viewport and device scale settings
  • Target page state, data, and timing

If those conditions changed intentionally, review the differences and update references only when the new output is expected. If they did not, restore a consistent browser/environment first; do not treat a widespread image change as proof that the application itself regressed.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

When to consider changing BackstopJS engines

BackstopJS also documents a Playwright engine. Treat an engine switch as a deliberate compatibility change, not the first response to one Puppeteer update. Its documentation says to switch the engine and the corresponding onBefore/onReady scripts together. Before migrating, confirm that the project’s scenarios and setup scripts are compatible with the selected engine.

Or skip the browser setup

If your goal is to capture a page rather than maintain a local browser automation stack, ScreenshotNeo provides a screenshot API and MCP server. A single GET request returns an image or PDF; cookie banners, newsletter popups, and chat widgets are removed before capture. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status. AI agents can use its MCP server, and the free plan includes 1,000 screenshots a month without a card; paid plans start at $5 for 3,000 shots.

For API options and parameters, see the ScreenshotNeo documentation.

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

Sign up for 1,000 free screenshots a month, with no card required.

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

Frequently Asked Questions

Can I use a Chrome version different from the one bundled with Puppeteer?

Yes, if the project manages that browser explicitly, but verify compatibility against Puppeteer’s supported browser table and configure the executable path. Using an external browser makes version control your responsibility.

Should I switch from Puppeteer to Playwright to fix one failing update?

Not as a first-line fix. Diagnose whether the failure is installation, launch, navigation, or rendering drift; consider an engine migration only if it addresses a deliberate compatibility need.

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.