Releases: sbabcoc/selenium-grid-manager
Release list
Add PM2 startup synchronization; ensure that output files are only used once
In this release, I fixed an issue related to launching grids with multiple Appium nodes. If the pm2 process manager daemon wasn't active prior to starting up the grid, only the last Appium server to be started would end up in the pm2 task list. This meant that the other Appium servers couldn't be shut down gracefully, and often these servers didn't ever get launched. To resolve this issue, we now ensure that the pm2 daemon is running prior to launching the Appium servers.
While diagnosing the launch failure, I realized that the process used to acquire server log output paths could result in assigning the same path to multiple servers. We now reserve each output path by creating an empty file at the point where we acquire the path.
Finally, I resolved an issue wherein the maximum session count for Appium nodes was not set to 1. Previously, this count would be 2 for UiAutomator2 and XCUITest nodes in Selenium 4. This count for Selenium 3 Appium nodes was defaulted to 5. The actual maximum should always be set to 1.
Upgrade to Selenium 4.47.0 and HtmlUnit 5.4.0
v37.0.3 Update version refs and resolve placeholders for 37.0.3
Resolve issues with remote Edge personalities; fix 'runGrid' task
In this release, I resolved issues with the personality declaration for the Microsoft Edge browser. The ms:edgeChromium capability is version-specific to Selenium 3 and specifying this capability in a "new session" request to a Selenium 4 grid results in slot matching failure. In the process of diagnosing this issue, I discovered that the runGrid task of the project build script didn't actually work. This issue has also been resolved.
Resolve WIndows command line quoting nightmare
In this release, I resolved issues from the previous release caused by the pathological handling of embedded quotes in Windows and PM2 command lines. The new APPIUM_DEFAULT_CAPS option wasn't being handled correctly on Windows, and the core of the fix was to leverage the fact that the Appium --default-capabilities option will accept a file path as its value. By using this facility, I was able to avoid all of the fruitless escaping of embedded quotes.
Optimize Android device provisioning; refactor to optimize constructor/method args
In this release, I added functionality to migrate Android device provisioning from per-session initialization to pre-suite provisioning.
As part of this optimization, I added persistence of the browser name associated with each GridServer object, as well as the collection of supported "personality" records. In the process, I noticed redundancy in constructor and method arguments. For example, I was specifying both the associated hub URL and the hub port (which is encapsulated in the URL).
NOTE: This is a major-version release because revisions include breaking changes to public interfaces.
Version-only update
v36.4.3 Update version refs and resolve placeholders for 36.4.3
Version-only update
v36.4.2 Update version refs and resolve placeholders for 36.4.2
Fix buffer-full execution hand; update documentation
v36.4.1 Update version refs and resolve placeholders for 36.4.1
Fix cross-personality node misrouting; add Slot Matching RFC support
Fixes a real-world node misrouting bug in FoundationSlotMatcher — both the Selenium 4 SlotMatcher and Selenium 3 CapabilityMatcher implementations — where automation requests could intermittently match the wrong node on a grid running more than one Appium personality.
Fixed
- Cross-personality node misrouting (S4 and S3). On a grid whose stereotypes share a platform family — a Windows-automation node and an Edge browser node both reporting
platformName: Windows; an HtmlUnit node and a Mac2 node both reportingplatform: MAC; an Espresso node and a UiAutomator2 node both reportingplatformName: Android— requests could land on the wrong node. Neither matcher previously checkedappium:automationNameat all. It's now checked explicitly and bidirectionally in both variants: a request specifying anautomationNamethe target stereotype doesn't declare, or declares differently, is correctly rejected instead of silently passing.
Changed
browserVersionmatching is now semver-aware (S4 and S3). A request forbrowserVersion: "131"now matches a stereotype reporting"131.0.6778.85", instead of requiring an exact string match. Segments are compared left-to-right; a mismatch in any shared segment (e.g."131.0.6778.95"vs."131.0.6778.85") still fails the match.- Extension-capability categorization (S4) now follows the Selenium 4 Grid Slot Matching RFC. A capability is excluded from identity matching if it has the
se:prefix, or ends inoptions,Options,loggingPrefs, ordebuggerAddress— regardless of vendor. This deliberately does not reproduce upstreamDefaultSlotMatcher's hardcoded vendor-prefix exclusion list (goog:/moz:/ms:/safari:), which treats identical capability shapes differently depending on which vendor owns the prefix.
⚠️ Breaking: capability shape for Appium personalities
Non-identity, per-session Appium capabilities — app, bundleId, deviceName, noReset, forceEspressoRebuild, showGradleLog, and similar — must now be nested inside the vendor's options object (e.g. appium:options) rather than sent as bare appium:-namespaced keys. A bare appium:-namespaced capability outside options is treated as an identity value and matched against the node stereotype; since stereotypes don't declare per-session values like these, a bare appium:app or appium:bundleId will now cause the request to be rejected by every node.
Before:
{"platformName":"Android","appium:automationName":"UiAutomator2","appium:app":"https://.../app.apk"}After:
{"platformName":"Android","appium:automationName":"UiAutomator2","appium:options":{"app":"https://.../app.apk"}}platformName and appium:automationName stay outside options — those are the identity capabilities that differentiate node types and need to be matched.
Compatibility
- S4 (
FoundationSlotMatcher implements SlotMatcher) and S3 (FoundationSlotMatcher implements CapabilityMatcher) both received equivalent fixes for the misrouting andbrowserVersionissues. - S3's implementation remains Java 8-compatible — no external version-parsing libraries were introduced for the semver comparison.
- Extension-capability categorization (the RFC piece) applies to S4 only. Selenium 3's capability model predates the extension-capability concept entirely, so there's no S3 equivalent to change.
Faster, quieter standalone launches
Fixed
- Standalone
runGrid/runSidecarlaunches no longer trigger a spuriousRepositoryNotFoundExceptionwarning from axion-release/jgit when run outside a git repository - Standalone launches are noticeably faster — the runtime build no longer configures axion-release, publishing, signing, or jacoco, none of which are needed to launch a grid
No functional or API changes.