Free tools Windows power users keep installed
One-click scans. No signup required.
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:
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errors#1 Best Overall
- 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.
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
- Enable headless mode before session creation. Use the Java setting, the properties file, or
-Dselenide.headless=true. - Select a known viewport. Set
Configuration.browserSizeor-Dselenide.browserSize=1366x768so responsive layouts behave consistently. - Pin the browser image where practical. Record the Chrome and ChromeDriver versions used by the runner and update them together.
- Set the executable explicitly when needed. Use
Configuration.browserBinaryor-Dselenide.browserBinary=/path/to/chromeif Chrome is not at the standard location. - 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
- 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.
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
headlesswas assigned before the firstopen, 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.
Rank #3
- Storage: 16GB Flash Memory
- OS: Chrome OS
- Screen Size: 11.6"
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.
Recommended Free Tools
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
- 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.
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.
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.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →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.
Quick Recap
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.

