ScreenshotNeo

BlogComparisons

Chrome vs. Chromium: What’s the Difference for Web Testing?

Choose Chrome for Testing for repeatable automation, regular Chrome for the browser users have today, and Chromium when a specific open-source build is your target.

By the ScreenshotNeo team4 October 20269 min read

Short answer: For repeatable web automation, use a version-pinned Chrome for Testing build with its matching ChromeDriver. Use regular Google Chrome when you need to test the auto-updating browser people use. Use Chromium when the Chromium project or a particular Chromium revision is itself your test target. The right choice depends on whether you need reproducibility, current-user fidelity, or a specific open-source build.

Chrome is Google’s browser, built and distributed using the Chromium project. The names are related, but the binaries are not interchangeable in every testing scenario. This guide explains which to choose, how to set up Selenium and headless runs, how to diagnose common failures, and when a screenshot API can avoid managing a browser locally.

1. Chrome, Chromium, and Chrome for Testing

Chromium is an open-source browser project and a family of browser builds. Google Chrome is a browser Google builds, packages, and distributes using Chromium. Differences depend on operating system and distribution; for example, the official comparison documents differences on Linux in codecs, packaging, profile and cache paths, and crash and usage reporting. Treat those as Linux-specific examples, not universal rules.

Chrome for Testing (CfT) is a Chrome build aimed at browser automation. It has versioned downloads and does not auto-update, which makes it useful for repeatable test runs. The Chrome team recommends pairing it with the matching ChromeDriver. Chrome’s automation overview groups CfT, ChromeDriver, Puppeteer, and Headless mode as parts of its testing ecosystem.

Build Best fit Version behavior Key consideration
Regular Chrome Checking the current user-facing Chrome experience Auto-updates A test may use a different version on a later run.
Chrome for Testing CI, stable automation, and reproducing a browser-specific bug Versioned; does not auto-update Pin and update deliberately; use its matching driver.
Chromium build Testing Chromium or a specific Chromium revision Depends on the chosen build Arbitrary revisions may not correspond to a consumer Chrome release.

2. Which browser should you use?

For reproducible CI runs: Chrome for Testing

Pin the browser version and its matching ChromeDriver. That gives a stable environment for rerunning a commit and comparing results over time. CfT exists partly to solve the mismatch created when regular Chrome auto-updates while a test environment is expected to stay fixed.

For the current browser your users run: regular Chrome

Use regular Chrome when the goal is to follow the browser users currently receive, including its normal update behavior. Record the browser version with test results and expect it to change. For release-critical coverage, consider keeping a pinned CfT run as well, so a newly observed failure can be reproduced.

For Chromium development: Chromium

Use a Chromium build when you are testing Chromium itself or targeting a particular revision. Chromium downloads are best-effort builds from revisions; availability can vary, and an arbitrary build may not map cleanly to a user-facing Chrome release.

For Selenium compatibility

Selenium can automate Chrome or Chromium when the browser binary and driver are compatible. For stable Chrome automation, use Chrome for Testing and the matching ChromeDriver. If using Chromium, explicitly point Selenium at the browser binary and supply a compatible driver. Selenium is the automation framework; choosing a browser binary does not decide whether your test is a UI journey, integration test, or rendered-output comparison.

3. Set up a pinned Selenium test in Python

The following example assumes Chrome for Testing and its matching ChromeDriver are installed. Set the paths for your machine or CI image. The test opens a page, checks its title, prints the browser version, and closes the session.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

CHROME_BINARY = "/opt/chrome-for-testing/chrome"
CHROMEDRIVER = "/opt/chromedriver/chromedriver"

options = Options()
options.binary_location = CHROME_BINARY
options.add_argument("--headless=new")
options.add_argument("--window-size=1440,1000")

service = Service(CHROMEDRIVER)
driver = webdriver.Chrome(service=service, options=options)
try:
    driver.get("https://example.com")
    print("Chrome:", driver.capabilities.get("browserVersion"))
    print("Title:", driver.title)
    assert "Example Domain" in driver.title
finally:
    driver.quit()

Install Selenium in the environment with python -m pip install selenium. Download Chrome for Testing and ChromeDriver for the same version using the official availability dashboard linked below. In CI, cache or provision those exact binaries and record their versions alongside test output.

  1. Choose the browser channel and exact version you want to test.
  2. Download the matching browser and driver for the operating system and architecture of the runner.
  3. Set CHROME_BINARY and CHROMEDRIVER to the installed paths.
  4. Run the test in the same container or host configuration used by CI.
  5. When upgrading, change the pinned browser and driver together, then review any rendering or behavior changes.

For Chromium, change CHROME_BINARY to the Chromium executable and provide a compatible ChromeDriver. Do not assume a driver from an unrelated Chrome release will work.

4. Headless mode and screenshots

Current Chrome Headless mode runs Chrome without showing a visible UI. Starting with Chrome 112, the updated headless mode uses Chrome itself and creates platform windows without displaying them. This makes it suitable when the test should match full Chrome behavior while running without a desktop.

The older headless shell is a separate, lighter wrapper around Chromium’s //content module. It has fewer dependencies and may suit lightweight screenshot or scraping tasks. For high-fidelity end-to-end or extension tests, use full Chrome Headless. Choose based on what the test needs to represent.

Chrome’s command-line screenshot mode is useful for a quick visual check:

/opt/chrome-for-testing/chrome \
  --headless=new \
  --no-first-run \
  --window-size=1440,1000 \
  --screenshot=page.png \
  https://example.com

This captures the page at the requested window size. A command-line viewport screenshot is not automatically a full-page capture, and pages with lazy-loaded content may need scrolling or explicit wait logic in an automation script.

5. Keep the test environment reproducible

  • Pin both components: keep the Chrome for Testing version and ChromeDriver version matched.
  • Record versions: log the browser and driver versions with each CI run to make failures diagnosable.
  • Control the runner: browser output can depend on the OS, fonts, display configuration, and installed libraries, so keep the runner image stable when comparing screenshots.
  • Update intentionally: CfT does not auto-update. Schedule browser updates and validate them rather than allowing test binaries to become stale.
  • Separate test purposes: use a pinned run for repeatability and a regular Chrome run when following the moving user browser matters.

Chrome’s internal testing documentation distinguishes browser tests for integration and end-to-end coverage from web tests that compare rendered or JavaScript output with expected results. Choose the browser and test method for the coverage you need; they are separate decisions.

6. Security, platform differences, and version freshness

Chrome for Testing does not auto-update, so it should be treated as a test binary that needs deliberate refreshes, not as a daily browser. Chromium security guidance warns that Chromium builds may lack recent fixes and says to use them only for browser automation and testing with trustworthy content. Keep test binaries refreshed and avoid using an old test build for general browsing.

Codec support, packaging, profile paths, and reporting behavior can vary by platform. The cited official feature comparison is specifically for Linux. If your test depends on media playback, installed codecs, or profile locations, verify behavior for your target operating system and exact build rather than assuming all Chrome and Chromium distributions behave alike.

The Chrome for Testing dashboard is the source for current version availability. Its snapshot on October 3, 2026 listed Stable 154.0.8037.92 (revision r1689415), with Beta, Dev, and Canary builds available. This is release metadata, not a performance measure, and will change. Check the live Chrome for Testing availability dashboard before pinning a version.

7. Or skip the browser setup

If your task is capturing a website image or PDF rather than testing browser behavior, ScreenshotNeo is a website screenshot API and MCP server for developers. It returns PNG, JPEG, WebP, or PDF from a URL, with one GET request. See the ScreenshotNeo API documentation for parameters and options.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://example.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
await Bun.write("shot.webp", new Uint8Array(await res.arrayBuffer()));

Cookie banners, newsletter popups, and chat widgets are removed before the shot. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed; response headers indicate the page verdict and billing status. Its MCP server lets AI agents use take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month, with no card required.

8. Troubleshooting common browser-test failures

Symptom Likely cause Fix
Session cannot be created or driver reports a version mismatch ChromeDriver and browser versions are incompatible. Use the matching ChromeDriver for the pinned Chrome for Testing version; log both versions.
Browser binary cannot be found Configured path does not exist in the runner or container. Check the installed executable path and set Selenium’s binary_location explicitly.
Works locally but fails in CI Different OS image, architecture, libraries, fonts, or browser binary. Use the same runner image, provision the intended build, and capture browser and driver version details.
Test changes between runs Regular Chrome auto-updated, or another environment detail drifted. Use pinned Chrome for Testing for repeatability; record versions and keep the runner stable.
Headless screenshot differs from visible test Test is using a different headless implementation or viewport/environment. Use current full Chrome Headless when fidelity matters; match viewport and runner settings.
Media test behaves differently on Linux Codec or packaging differences in that Linux build. Check the official Linux comparison and validate the exact build and codec requirements.
Old Chromium build has a security concern Chromium may lack recent security fixes. Refresh the test binary and restrict its use to automation against trustworthy content.

9. Cost, performance, and reliability considerations

The browser comparison does not establish a universal speed winner. Runtime depends on the test, page, machine, browser revision, and runner configuration; the research sources provide no comparative performance benchmark. Choose the build for the test purpose, then measure your own suite if runtime is important.

For reliability, pinned binaries reduce version drift, while regular Chrome tracks the changing browser users get. Pinning also creates an update responsibility: stale binaries can miss fixes. Keep both goals covered with separate runs when needed. Browser binaries and automation libraries are software; the source review did not identify a relevant physical product or supported paid partner recommendation.

For simple recurring screenshots, a screenshot API can avoid installing and maintaining a browser and driver in your own runner. ScreenshotNeo offers 1,000 free shots monthly, then plans from $5 for 3,000; yearly billing gives two months free. All listed product features are available on every plan. If you need browser interaction, extension behavior, or Selenium assertions, use browser automation instead.

10. Frequently asked questions

Can I use Chromium instead of Chrome for Selenium?

Yes, when Selenium is pointed at the Chromium binary and you provide a compatible driver. For a stable Chrome-aligned test environment, Chrome for Testing with its matching ChromeDriver is the more straightforward choice.

What is Chrome for Testing?

It is a versioned Chrome build intended for automation and testing. It does not auto-update, making it practical to pin for reproducible runs.

Is Chrome for Testing safe as my everyday browser?

It is intended for browser automation and testing and does not auto-update. Use regularly updated Chrome for normal browsing.

Which should I use for a screenshot test?

Use full Chrome Headless when the screenshot should reflect full Chrome behavior. The older headless shell may suit lightweight captures with fewer dependencies. For URL-to-image capture without browser automation, consider ScreenshotNeo.

Does Chromium always have fewer features than Chrome?

There is no universal platform-independent difference list. The documented comparison here is Linux-specific, and distributions can vary.