Skip to content

Releases: sbabcoc/selenium-grid-manager

Add PM2 startup synchronization; ensure that output files are only used once

Choose a tag to compare

@sbabcoc sbabcoc released this 16 Aug 03:26

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

Choose a tag to compare

@sbabcoc sbabcoc released this 12 Aug 20:25
v37.0.3

Update version refs and resolve placeholders for 37.0.3

Resolve issues with remote Edge personalities; fix 'runGrid' task

Choose a tag to compare

@sbabcoc sbabcoc released this 12 Aug 05:04

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

Choose a tag to compare

@sbabcoc sbabcoc released this 10 Aug 05:28

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

Choose a tag to compare

@sbabcoc sbabcoc released this 08 Aug 02:00

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

Choose a tag to compare

@sbabcoc sbabcoc released this 01 Aug 07:41
v36.4.3

Update version refs and resolve placeholders for 36.4.3

Version-only update

Choose a tag to compare

@sbabcoc sbabcoc released this 01 Aug 07:40
v36.4.2

Update version refs and resolve placeholders for 36.4.2

Fix buffer-full execution hand; update documentation

Choose a tag to compare

@sbabcoc sbabcoc released this 01 Aug 07:38
v36.4.1

Update version refs and resolve placeholders for 36.4.1

Fix cross-personality node misrouting; add Slot Matching RFC support

Choose a tag to compare

@sbabcoc sbabcoc released this 29 Jul 00:05

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 reporting platform: MAC; an Espresso node and a UiAutomator2 node both reporting platformName: Android — requests could land on the wrong node. Neither matcher previously checked appium:automationName at all. It's now checked explicitly and bidirectionally in both variants: a request specifying an automationName the target stereotype doesn't declare, or declares differently, is correctly rejected instead of silently passing.

Changed

  • browserVersion matching is now semver-aware (S4 and S3). A request for browserVersion: "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 in options, Options, loggingPrefs, or debuggerAddress — regardless of vendor. This deliberately does not reproduce upstream DefaultSlotMatcher'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 and browserVersion issues.
  • 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

Choose a tag to compare

@sbabcoc sbabcoc released this 28 Jul 19:49

Fixed

  • Standalone runGrid/runSidecar launches no longer trigger a spurious RepositoryNotFoundException warning 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.