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 Configuration.headless = true before the first browser is opened, select Chrome, and use a fixed viewport. The equivalent project and command-line settings are selenide.headless=true and -Dselenide.headless=true. Use Selenium’s ChromeOptions only when you need Chrome-specific switches such as --headless=new, preferences, extensions, or a custom binary.

Minimal Selenide headless Chrome test

Selenide exposes headless mode as a first-class boolean setting. The documented default is false; the setting is documented for Chrome 59 and newer and Firefox 56 and newer. Set it before any call that creates a WebDriver session.

import static com.codeborne.selenide.Selenide.open;

import com.codeborne.selenide.Configuration;
import org.junit.jupiter.api.Test;

public class LoginTest {
  static {
    Configuration.headless = true;
    Configuration.browser = "chrome";
    Configuration.browserSize = "1366x768";
  }

  @Test
  void pageLoads() {
    open("https://example.test");
  }
}

The static block is convenient for a small test class. In a larger suite, put the same assignments in your test setup or shared configuration, but make sure they run before the first browser is opened. A deterministic browserSize matters when responsive breakpoints, screenshots, or visual assertions are involved.

Choose the configuration surface

Method Example Best use
Java API Configuration.headless = true; Settings controlled by test code or a shared test base.
selenide.properties selenide.headless=true Project-wide defaults kept outside Java source.
System property -Dselenide.headless=true CI jobs and one-off Maven or Gradle runs.
ChromeOptions options.addArguments("--headless=new") Chrome switches, preferences, extensions, or a custom binary.

Project-wide properties

Create src/test/resources/selenide.properties (or the location your build places on the test classpath) with:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Samsung 14" Galaxy Chromebook Go Laptop PC Computer, Intel Celeron N4500 Processor, 4GB RAM, 64GB Storage, ChromeOS, XE340XDA-KA2US, Student Laptop, Silver
  • SLIM. LIGHTWEIGHT. READY TO GO: The all-new slim design is perfect for busy lives on the go.
  • SKILLFULLY DESIGNED. MILITARY TOUGH: Built with premium craftsmanship to withstand the occasional drop or ding.
  • ALL-DAY, ALL-IN-ONE CHARGING: Power through your school day – and beyond – with a long-lasting 12-hour battery.¹
  • 3X FASTER THAN THE PREVIOUS GENERATION OF WIFI: Crush your schoolwork in record time with Wi-Fi that’s three times faster than the previous generation of Wi-Fi.
  • YOUR PHONE AND CHROMEBOOK WORK BETTER TOGETHER: Easily transfer files between devices, and control your phone right from your Chromebook.
selenide.headless=true
selenide.browser=chrome
selenide.browserSize=1366x768

This keeps the test code unchanged while making the default execution headless.

Command-line and CI override

For Maven, pass the settings as system properties:

mvn test -Dselenide.headless=true -Dselenide.browser=chrome -Dselenide.browserSize=1366x768

Use the equivalent -D properties in your Gradle test task or CI command. Keep the viewport explicit instead of relying on a display manager or a runner’s default window size.

When ChromeOptions is the right choice

The Selenide boolean is enough to turn headless mode on. Add ChromeOptions when the browser session also needs Chrome-specific command-line arguments, preferences, extensions, or another executable. Selenium’s current browser-options documentation identifies ChromeOptions as the Chrome capability object and lists --headless=new as a common argument.

import com.codeborne.selenide.Configuration;
import org.openqa.selenium.chrome.ChromeOptions;

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless=new");
options.addArguments("--window-size=1366,768");

Configuration.browser = "chrome";
Configuration.browserCapabilities = options;

Assign the options object directly to Configuration.browserCapabilities. Selenide release guidance shows this as the supported pattern; older code that wraps Chrome options in Selenium DesiredCapabilities should be modernized. Selenium 4 requires browser-specific Options classes for capability configuration.

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

Do not configure the same capability in competing places

If you assign Configuration.browserCapabilities, Selenide warns that capabilities can override values supplied through system properties. Decide where each setting lives, then inspect the effective session if a command-line value appears to be ignored. A simple pattern is to keep Chrome arguments in one Java factory and use system properties only for values that genuinely vary by environment.

Make CI runs reproducible

  1. Enable headless mode before session creation. Use the Java setting, the properties file, or -Dselenide.headless=true.
  2. Select a known viewport. Set Configuration.browserSize or -Dselenide.browserSize=1366x768 so responsive layouts behave consistently.
  3. Pin the browser image where practical. Record the Chrome and ChromeDriver versions used by the runner and update them together.
  4. Set the executable explicitly when needed. Use Configuration.browserBinary or -Dselenide.browserBinary=/path/to/chrome if Chrome is not at the standard location.
  5. Add only runtime-required flags. Headless mode and a fixed window size are the portable baseline. The official guidance does not define one universal Docker flag set; extra switches should be justified by the image or security policy you run.

Selenium’s Chrome documentation states that Selenium 4 is compatible with Chrome 75 and newer and that the Chrome and ChromeDriver major versions must match. Treat that as a startup prerequisite. When a runner image changes, log the actual browser and driver versions rather than assuming the labels stayed in sync.

Rank #2
HP Chromebook 14 Laptop, Intel Celeron N4120, 4 GB RAM, 64 GB eMMC, 14" HD Display, Chrome OS, Thin Design, 4K Graphics, Long Battery Life, Ash Gray Keyboard (14a-na0226nr, 2022, Mineral Silver)
  • FOR HOME, WORK, & SCHOOL – With an Intel processor, 14-inch display, custom-tuned stereo speakers, and long battery life, this Chromebook laptop lets you knock out any assignment or binge-watch your favorite shows..Voltage:5.0 volts
  • HD DISPLAY, PORTABLE DESIGN – See every bit of detail on this micro-edge, anti-glare, 14-inch HD (1366 x 768) display (1); easily take this thin and lightweight laptop PC from room to room, on trips, or in a backpack.
  • ALL-DAY PERFORMANCE – Reliably tackle all your assignments at once with the quad-core, Intel Celeron N4120—the perfect processor for performance, power consumption, and value (2).
  • 4K READY – Smoothly stream 4K content and play your favorite next-gen games with Intel UHD Graphics 600 (3) (4).
  • MEMORY AND STORAGE – Enjoy a boost to your system’s performance with 4 GB of RAM while saving more of your favorite memories with 64 GB of reliable flash-based eMMC storage (5).

Use a non-standard Chrome binary

For a custom installation, point Selenide at the executable directly:

Configuration.headless = true;
Configuration.browser = "chrome";
Configuration.browserBinary = "/opt/google/chrome/chrome";

The same setting from a shell is:

mvn test 
  -Dselenide.headless=true 
  -Dselenide.browser=chrome 
  -Dselenide.browserBinary=/opt/google/chrome/chrome

Verify that the path is executable by the account running the test. A correctly installed driver cannot start a browser binary that is missing, inaccessible, or built for a different architecture.

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

Run the same test through remote WebDriver

You do not need a local Chrome installation when a Selenium Grid or hosted WebDriver endpoint supplies the session. Set Configuration.remote in Java or pass -Dselenide.remote=...:

Configuration.headless = true;
Configuration.browser = "chrome";
Configuration.browserSize = "1366x768";
Configuration.remote = "https://grid.example.test/wd/hub";

For a CI secret, keep the remote URL out of source and provide it as a protected system property. The Selenide FAQ documents the same approach for hosted services, while the API defines remote for Selenium Grid-style execution. Headless is still useful on the remote node, but the node—not your test machine—must have a compatible Chrome and driver.

Verify what Selenide actually used

  • Check that headless was assigned before the first open, element lookup, or other operation that creates a session.
  • Confirm the selected browser is Chrome rather than a value inherited from a properties file or CI variable.
  • Print or inspect the resolved browser-binary path when multiple Chrome installations exist.
  • Capture the runner’s Chrome and ChromeDriver version output on startup so a later failure can be tied to a specific image.
  • For layout-sensitive tests, assert the intended viewport instead of assuming a headless default.

Troubleshooting headless startup and test failures

The test opens a visible window

Usually the headless setting was applied after the first browser session was created, or a different configuration source overrode it. Move Configuration.headless = true ahead of the first browser operation and remove conflicting capability assignments. If you use a properties file or CI flag, verify the file is on the test classpath and that the command actually passes -Dselenide.headless=true.

SessionNotCreatedException or a Chrome session that exits immediately

Check the Chrome and ChromeDriver major versions first, then check that the executable path points to a runnable Chrome binary. On remote execution, perform those checks on the node that creates the session. If the failure began after adding arguments, temporarily reduce the options to --headless=new and the fixed window size, then add other switches one at a time.

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

Chrome cannot be found

Install Chrome in the runner image or set Configuration.browserBinary (or -Dselenide.browserBinary=...) to the real path. Check permissions and architecture as well as the spelling of the path. A remote configuration requires the browser on the remote node, not merely on the machine launching Maven.

The page has the wrong responsive layout

Headless Chrome still follows viewport dimensions. Set Configuration.browserSize or the corresponding system property and keep that value stable across local and CI runs. If a test changes the window size later, make that change explicit in the test and restore it for subsequent cases.

ChromeOptions settings appear to be ignored

Ensure the object is assigned directly to Configuration.browserCapabilities and that no later setup replaces it. Remember that an assigned capabilities object can take precedence over values supplied through Selenide system properties. Consolidating option creation in one place avoids silent conflicts.

The local machine has no display

Use Selenide headless mode or the --headless=new Chrome argument; do not add a virtual display solely because a headed session was the default. If the browser is not available locally, set remote and run on a Grid or hosted WebDriver endpoint instead.

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

Performance, reliability, and cost considerations

Headless mode removes the need for a desktop display, which makes it suitable for CI workers and containers, but it does not remove browser startup, page loading, JavaScript execution, or network latency. Reuse a browser session when your test isolation model permits it, avoid unnecessary extensions and arguments, and keep the viewport and browser image stable so failures are comparable. Remote execution trades local installation work for network and queue latency; collect the remote endpoint and node details in failure logs.

Selenide itself does not add a separate headless-mode charge. Your costs come from the machines, hosted Grid capacity, browser-image maintenance, and CI time. If the only output you need is a clean page image or PDF rather than an interactive test, a screenshot API can avoid maintaining a browser runner.

Rank #4
HP 14" HD Chromebook Laptop for Students, Intel Quad-Core N4120(> N4020), 4GB RAM, 64GB eMMC, WiFi, Webcam, HDMI, USB-A&C, 14 Hours Battery Life, Zoom, Chrome OS, CUE Accessories
  • Intel Celeron N4120: 4 Cores & Threads, 1.1GHz Base Clock, Up to 2.6GHz Boost Clock, 4MB Cache, Intel UHD Graphics 600. The perfect combination of performance, power consumption, and value helps your device handle multitasking smoothly and reliably with four processing cores to divide up the work.
  • 14" HD Display: 14.0-inch diagonal, HD (1366 x 768), micro-edge, anti-glare. See your digital world in a whole new way. Enjoy movies and photos with the great image quality and high-definition detail of 1 million pixels.
  • Memory & Storage: 4 GB LPDDR4x & 64 GB eMMC Storage. Adequate high-bandwidth RAM to smoothly run multiple applications and browser tabs all at once. An embedded multimedia card provides reliable flash-based storage.
  • Ports:2 x USB 3.0 Type-A,1 x USB 3.0 Type-C,1 x HDMI,1 x Headphone Jack
  • Chrome OS: Chromebook is a computer for the way the modern world works, with thousands of apps. Enjoy the seamless simplicity that comes with Google Chrome and Android apps, all integrated into one laptop. It’s fast, simple, and secure.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request returns a PNG, JPEG, WebP, or PDF, so you can capture a page without installing Chrome, ChromeDriver, or Selenide. Before capture it accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers.

Use the ScreenshotNeo API documentation for the complete option list. The basic calls below are ready to adapt by changing the target URL.

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.

cURL

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

Python

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
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}`);

What you can configure

  • Full-page captures with lazy images loaded, or one element selected by CSS.
  • Dark mode, 12 device presets, arbitrary viewports, and retina scale.
  • PDF paper size, margins, landscape mode, and page ranges.
  • HTML/CSS-to-image, custom CSS and JavaScript, pre-capture clicks, hidden selectors, and waits for a selector, delay, or network idle.
  • Ad, tracker, request, and resource-type blocking; custom headers, cookies, user agents, Authorization, timezone, and geolocation.
  • Transparent backgrounds, image resizing, chosen cache TTLs, signed links for public <img> tags, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification.

Parameter names used by other screenshot APIs also work, which can reduce migration changes. ScreenshotNeo also provides an MCP server with take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.

Plan Included shots Price
Free 1,000 per month No charge; no card
Starter 3,000 $5
Growth 15,000 $15
Pro 60,000 $39
Scale 250,000 $99
Business 1,000,000 $249

Yearly billing gives two months free, and every feature is available on every plan. Create a free ScreenshotNeo account to get 1,000 screenshots a month with no card; paid plans start at $5 for 3,000.

Frequently Asked Questions

Can I switch between headed and headless runs without changing the test code?

Yes. Keep the test actions unchanged and set selenide.headless from the properties file or CI command for each environment. Use a headed run only when you need visual debugging.

Does headless Chrome use a different DOM or JavaScript engine?

It is still Chrome driven through WebDriver. Differences usually come from viewport, timing, permissions, installed fonts, or runtime flags, so keep those inputs controlled when comparing environments.

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

Should I use a local browser or a remote Grid?

Use a local, pinned browser when startup speed and simple diagnostics matter. Use remote when the runner should not contain Chrome or when browser execution belongs on a shared Grid or hosted service.

What is the safest way to diagnose an intermittent CI failure?

Record the effective headless setting, viewport, binary path, Chrome and ChromeDriver versions, remote URL or node identity, and the final Chrome arguments. That makes environment drift distinguishable from a page or test defect.

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.