Selenium 4 Alpha 6: What’s New for WebDriver Testing
Selenium 4 Alpha 6 introduced Grid CDP remoting, early GraphQL support and TOML Node configuration. Here’s what changed and what developers should use now.
Selenium 4 Alpha 6 was a 2020 prerelease whose main WebDriver testing highlights were Chrome DevTools Protocol (CDP) remoting across Selenium Grid, an early GraphQL support skeleton, and better Node configuration through TOML. Python also recorded an Abstract Base Class addition for WebElement and WebDriver, while a contributor described Ruby’s CDP support as experimental. Alpha 6 is historical; use Selenium’s current stable release line for new projects.
The Selenium announcement was published June 1, 2020. The official downloads archive dates the Alpha 6 artifacts to May 28, 2020. Those are different dates: the archive’s artifact date precedes the announcement.
What changed in Alpha 6
| Area | What the release said | What it meant for testing | Maturity and limits |
|---|---|---|---|
| CDP and Grid | “Full remoting of the CDP protocol across the Grid.” | It addressed using Chrome DevTools Protocol capabilities when browser sessions were distributed through Grid, rather than treating CDP as local-only. | The announcement did not provide benchmarks or quantify performance gains. |
| GraphQL | A “skeleton” of GraphQL support. | It signaled early infrastructure for interacting with Grid information and operations. | This was not described as a finished, polished Grid management experience. The announcement said fleshing it out and adding a user interface for its endpoint remained future work. |
| Node configuration | Better configuration options for Nodes, particularly through TOML. | It pointed toward configuring Grid Nodes with TOML rather than relying only on the previous configuration approach. | The release note did not enumerate settings or provide a migration guide, so do not infer specific TOML keys from this announcement alone. |
| Python binding | The Python changelog recorded an Abstract Base Class added to WebElement and WebDriver. | This was a binding-level API or structure change relevant to Python users and integrations. | Keep the claim specific to Python. Alpha 6 Post 2 later corrected abstract-base-class usage and the release build step. |
| Ruby binding | A contributor called Chrome DevTools Protocol support experimental in selenium-webdriver 4.0.0.alpha6. |
Ruby users were beginning to access DevTools features through the binding. | “Experimental” matters: this was not a promise of mature or stable support. |
The announcement also mentioned general improvements and fixes, using the informal phrase “A bajillion improvements & fixes.” It did not itemize that phrase or attach a measurable count to it.
Why Grid CDP remoting mattered
WebDriver is the standard automation interface used to control browsers. Chrome DevTools Protocol exposes browser-specific capabilities beyond the ordinary WebDriver commands. In a distributed test setup, the browser may run on a remote Grid Node while the test client runs elsewhere. Remoting CDP across Grid was therefore the most directly infrastructure-focused Alpha 6 highlight: it aimed to make CDP communication work through that distributed arrangement.
The announcement establishes the capability direction, not a performance result. It does not specify which CDP commands were supported, compatibility boundaries, or a setup recipe. Treat it as a release-era milestone rather than a complete implementation guide. For current behavior, consult the documentation for the Selenium version you actually install.
GraphQL and TOML: early Grid work
GraphQL was a starting point
The project called GraphQL support a skeleton. That wording describes an initial foundation, not a complete administrative interface or a finished replacement for existing Grid workflows. The announcement specifically noted follow-up work to flesh out support and provide a UI for the endpoint. Avoid basing a new Grid management integration on an assumption that Alpha 6 already supplied those later pieces.
TOML improved Node configuration options
Alpha 6 highlighted TOML as a route to better Node configuration. The announcement does not list the setting names or say how every prior configuration maps to TOML. If maintaining an Alpha 6-era deployment, consult version-matched documentation and release history before changing configuration. Do not copy keys from a newer Selenium release and assume that they existed in Alpha 6.
Language-specific changes and scope
- Python: the recorded Alpha 6 change added abstract base classes to
WebElementandWebDriver. The Python changelog also lists two Alpha 6 Post 2 corrections: abstract-base-class usage and the release build step. - Ruby: the announcement reproduced a contributor’s description of experimental Chrome DevTools Protocol support in
selenium-webdriver 4.0.0.alpha6. - Other bindings: the available announcement and changelog evidence does not establish a complete cross-language list. Do not generalize the Python or Ruby details to Java, JavaScript, or every binding.
Should you install Alpha 6 today?
No, not for a new project. Alpha 6 was a prerelease from 2020. The official Selenium downloads page showed Selenium 4.49.0 as stable in September 2026; check the page when installing because the stable version can change.
- Open the official Selenium Downloads page.
- Choose the current stable release and the binding you use.
- Use documentation for that same release when configuring Grid, CDP, or language-specific APIs.
- If reproducing an old Alpha 6 issue, pin the exact prerelease artifact and isolate it from production dependencies.
The historical archive listed Alpha 6 artifacts including the Selenium HTML Runner JAR, Java ZIP, and Selenium Server JAR. These identify what was archived, not a recommendation to use those artifacts now.
Capture screenshots from WebDriver tests
For a direct WebDriver screenshot, use the binding’s screenshot API and save its returned bytes or file. The following Python example uses Selenium’s WebDriver API to capture the current viewport. Install the current Selenium package in your environment and provide a compatible browser and driver setup.
from pathlib import Path
from selenium import webdriver
options = webdriver.ChromeOptions()
# Uncomment to run without opening a visible browser window.
# options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://example.com")
driver.save_screenshot("shot.png")
finally:
driver.quit()
print(Path("shot.png").resolve())
For a remote session, configure a Grid URL and create a Remote WebDriver with the options supported by your Selenium version. The browser then runs on a remote Node; screenshot behavior and available browser features depend on that session and Grid configuration. Alpha 6’s announcement does not give a complete remote screenshot recipe.
ScreenshotNeo for a URL screenshot
If the test needs a rendered screenshot of a public URL rather than browser interaction or application state, a screenshot API can avoid managing a browser session. ScreenshotNeo is a website screenshot API and MCP server from ScreenshotNeo. Its GET endpoint returns PNG, JPEG, WebP, or PDF output. See the ScreenshotNeo API documentation for request options.
Or skip the browser setup
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
Python:
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)
Node.js:
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()));
Replace YOUR_API_KEY with your key. In Node.js environments without Bun, write the response bytes with the runtime’s filesystem API. ScreenshotNeo removes cookie and consent banners, newsletter popups, and chat widgets before capture; each of those cleanup steps can be turned off. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000, and every feature is available on every plan.
Start with 1,000 free screenshots a month, no card required.
Options for screenshot and PDF capture
When the job requires an actual browser session, Selenium remains useful because it can interact with pages and capture state reached through test actions. ScreenshotNeo is useful when the input is a URL and the desired output is a clean image or PDF without maintaining browser infrastructure. Its options include:
- Full-page capture with lazy images loaded, or capture one element by CSS selector.
- Dark mode, 12 device presets, arbitrary viewport dimensions, and retina scale.
- PDF paper size, margins, landscape orientation, and page ranges.
- HTML/CSS to image, custom CSS and JavaScript, clicks before capture, hidden selectors, and waits for a selector, delay, or network idle.
- Blocking ads, trackers, requests, or resource types; custom headers, cookies, user agent, and Authorization; timezone and geolocation.
- Transparent backgrounds, image resizing, caching with a chosen TTL, 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 spec.
Parameter names used by other screenshot APIs also work, which can make migration easier. Check the documentation for exact parameter values and response behavior.
Troubleshooting
| Symptom | Likely cause | What to do |
|---|---|---|
| Alpha 6 package or artifact cannot be found | It is an old prerelease and may not be exposed by current package defaults. | Use the official historical downloads archive for archaeology; use the current stable line for new work. |
| GraphQL endpoint lacks expected operations or interface | Alpha 6 described only a support skeleton, with more work still planned. | Do not assume a finished UI or feature set. Check version-matched Grid documentation and later release history. |
| CDP command fails through Grid | CDP behavior depends on browser, driver, Grid, and binding versions; Alpha 6’s announcement does not specify a universal command matrix. | Verify compatible versions and current documentation, then reproduce against a local browser session to isolate Grid routing. |
| Python integration breaks around WebDriver/WebElement abstractions | The Python binding changed abstract base class behavior, and Post 2 recorded corrections. | Check the exact binding version and its changelog; avoid assuming Alpha 6 and later versions have identical APIs. |
| Screenshot is blank or captured too early | Navigation completion may precede the page’s meaningful visual state, or the target is blocked or unavailable. | Wait for a known selector or application condition before capture. For an API capture, inspect its page verdict and billing headers. |
| ScreenshotNeo returns an unexpected format or an HTTP error | Request parameters, access key, target URL, or output settings may be invalid. | Check the status and response headers, confirm the key and URL, and compare parameters with the API docs. Do not save an error body as an image. |
Performance, reliability, and cost
The Alpha 6 announcement makes no speed, reliability, or test coverage claims. CDP remoting was a capability change; it should not be presented as a benchmarked performance improvement. For Selenium suites, browser startup, page readiness, network conditions, and Grid capacity can affect run time. Reuse sessions where the test design allows it, wait for specific page conditions instead of arbitrary long delays, and keep browser and driver versions aligned.
ScreenshotNeo pricing is based on clean shots: only clean screenshots are billed, while bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing. Plans are Free for 1,000 shots/month, Starter $5 for 3,000, Growth $15 for 15,000, Pro $39 for 60,000, Scale $99 for 250,000, and Business $249 for 1,000,000. Yearly billing gives two months free. Every feature is on every plan. For recurring captures, caching with a chosen TTL can reduce repeat work; bulk capture supports 100 URLs per call, and async jobs with signed webhooks suit longer workflows.
Frequently asked questions
Was Alpha 6 the first Selenium 4 release?
No. It was one prerelease in the Selenium 4 development cycle.
Did Alpha 6 make GraphQL a complete way to manage Grid?
No. The project described the support as a skeleton and said additional work remained.
Did every language binding receive the same changes?
The cited evidence does not establish that. The abstract base class entry is Python-specific, and the experimental CDP note concerns Ruby.
Can ScreenshotNeo replace WebDriver in an interaction test?
No. It captures a URL as an image or PDF; it does not replace WebDriver’s role in driving interactive browser test steps.
Sources
- Selenium Project: Selenium 4.0 Alpha 6 is out! (June 1, 2020), including the release highlights and reproduced contributor notes.
- Selenium Downloads, including the historical artifact listing and current stable release information.
- Python binding changelog at Selenium 4.29.0 tag, for the Alpha 6 and Alpha 6 Post 2 entries.


