Skip to content

Migrate remaining grid management functionality to 'selenium-grid-manager'

Choose a tag to compare

@sbabcoc sbabcoc released this 18 Jul 05:20

Selenium Foundation 36.0.0 Release Notes

Breaking Changes

Removed Settings

  • GRID_LIFECYCLE — replaced by unconditional LifecycleServlet registration on S3 nodes
  • GRID_SERVLETS — replaced by HUB_SERVLETS (S3 only) and NODE_SERVLETS (S3 only)
  • GRID_EXAMPLES — replaced by SERVE_EXAMPLE_SITE

New Settings

Setting Key Default Description
SERVE_EXAMPLE_SITE selenium.grid.serve.example.site true Whether to serve the example page site alongside the local Grid instance
HUB_SERVLETS selenium.hub.servlets (none) Comma-delimited list of servlet classes to host on the S3 hub server
NODE_SERVLETS selenium.grid.node.servlets (none) Comma-delimited list of servlet classes to host on S3 node servers
SIDECAR_PORT selenium.grid.sidecar.port 9001 Port on which the sidecar servlet container listens
SIDECAR_STOP_TOKEN selenium.grid.sidecar.stop.token (none) Token required to authorize sensitive sidecar operations
SIDECAR_AUTH_STRATEGY selenium.grid.sidecar.auth DefaultSidecarAuthStrategy Fully-qualified class name of the SidecarAuthStrategy implementation
SIDECAR_SESSION_TTL selenium.grid.sidecar.session.ttl 30 Session TTL in minutes for authenticated sidecar browser sessions
SIDECAR_MONITOR_FILE selenium.grid.sidecar.monitor.file monitored-grids.json File used to persist monitored remote Grid URLs across sidecar restarts
SIDECAR_SCAN_INTERVAL selenium.grid.sidecar.scan.interval 10 Interval in seconds between background scan chunks
SIDECAR_SCAN_START selenium.grid.sidecar.scan.start 4444 First port in the range scanned for unmanaged Grid instances
SIDECAR_SCAN_END selenium.grid.sidecar.scan.end 65535 Last port in the range scanned for unmanaged Grid instances
SIDECAR_SCAN_STEP selenium.grid.sidecar.scan.step 10 Port step size used during normal scans
SIDECAR_SCAN_CHUNK_DURATION selenium.grid.sidecar.scan.chunk.duration 30000 Maximum duration in milliseconds of each scan chunk
GRID_PUB_PORT selenium.grid.pub.port auto-allocated Event bus publisher port for the local Selenium 4 Grid hub
GRID_SUB_PORT selenium.grid.sub.port auto-allocated Event bus subscriber port for the local Selenium 4 Grid hub
GRID_PORT_ALLOCATOR selenium.grid.port.allocator DefaultGridPortAllocationStrategy Fully-qualified class name of the GridPortAllocationStrategy implementation

Removed APIs

  • IGridServer interface — replaced by GridServer base class throughout
  • IGridServerFactory interface and SeleniumGrid.registerGridServerFactory()
  • AbstractSeleniumConfig.createHubConfig() — moved to selenium-grid-manager
  • AbstractSeleniumConfig.createNodeConfig() — moved to selenium-grid-manager
  • AbstractSeleniumConfig.getHubConfigPath() — moved to selenium-grid-manager
  • AbstractSeleniumConfig.getNodeConfigPath() — moved to selenium-grid-manager
  • AbstractSeleniumConfig.getAppiumConfigPath() — moved to selenium-grid-manager
  • AbstractSeleniumConfig.appiumWithPM2() — PM2 is now unconditionally required for Appium
  • GridServer.getGridProxies(SeleniumConfig, URL)SeleniumConfig parameter removed
  • GridServer.getNodeCapabilities(SeleniumConfig, URL, URL)SeleniumConfig parameter removed
  • ExamplePageLauncher — example page site now hosted by sidecar
  • Version-specific GridServer implementations — consolidated to src/main/java
  • Version-specific HostUtils implementations — consolidated to src/main/java with pure Java network interface detection
  • Version-specific AndroidPage implementations — consolidated to src/main/java
  • Version-specific ExamplePageServlet implementations — consolidated to src/main/java
  • Version-specific DataUtils implementations — consolidated to src/main/java

Moved Classes

  • NodeStatusV4, NodesV4, GridProxyResponseV3 moved to new com.nordstrom.automation.selenium.grid package
  • FoundationSlotMatcher moved to selenium-grid-manager
  • Hub/node configuration templates moved to selenium-grid-manager

Modified APIs

  • AbstractSeleniumConfig.getConfigPath() — made public
  • AbstractSeleniumConfig.getDefaults() — now correctly copies superclass map before adding entries

New Features

Grid API Provider Infrastructure

A new ServiceLoader-based API for version-agnostic Grid inspection:

  • GridApiProvider — interface for version-specific Grid interaction
  • GridApiProviderRegistry — registry of discovered providers keyed by API version
  • GridApiProviderV3 — Selenium 3 implementation using proxy API and console scraping
  • GridApiProviderV4 — Selenium 4 implementation using GraphQL API

Hub Detection

  • GridUtility.isSelenium3Hub(URL) — discriminating Selenium 3 hub detection via /grid/api/hub/
  • GridUtility.isSelenium4Hub(URL) — discriminating Selenium 4 hub detection via GraphQL grid{uri} query
  • GridUtility.getRawHttpResponse(String) — URL-encoding-safe HTTP GET for endpoints with literal query parameters

Wait Support

  • SearchContextWait.until(ExpectedCondition) — version-agnostic overload bridging FluentWait<SearchContext> and WebDriver-based ExpectedCondition

Additional Improvements

  • AbstractSeleniumConfig.fromJson() — version-agnostic JSON deserialization
  • GridServer.isHubActive() — now checks both S3 and S4 hub endpoints, supporting cross-version hub detection
  • GridServer.isNodeRegistered() and getGridProxies() delegate to GridApiProviderRegistry