Skip to content

Commit

Permalink
[grid] Removing browserVersion before sending payload to driver
Browse files Browse the repository at this point in the history
Fixes #12663
  • Loading branch information
diemol committed Sep 4, 2023
1 parent cc41a88 commit 0178bb1
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
Expand Up @@ -127,11 +127,6 @@ public Either<WebDriverException, ActiveSession> apply(CreateSessionRequest sess
Capabilities capabilities =
sessionCapabilitiesMutator.apply(sessionRequest.getDesiredCapabilities());

Optional<Platform> platformName = Optional.ofNullable(capabilities.getPlatformName());
if (platformName.isPresent()) {
capabilities = removePlatform(capabilities);
}

CAPABILITIES.accept(span, capabilities);
CAPABILITIES_EVENT.accept(attributeMap, capabilities);
attributeMap.put(
Expand All @@ -145,6 +140,17 @@ public Either<WebDriverException, ActiveSession> apply(CreateSessionRequest sess
capabilities = setBrowserBinary(capabilities, result.getBrowserPath());
}
}

Optional<Platform> platformName = Optional.ofNullable(capabilities.getPlatformName());
if (platformName.isPresent()) {
capabilities = removeCapability(capabilities, "platformName");
}

Optional<String> browserVersion = Optional.ofNullable(capabilities.getBrowserVersion());
if (browserVersion.isPresent()) {
capabilities = removeCapability(capabilities, "browserVersion");
}

try {
service.start();

Expand Down Expand Up @@ -179,7 +185,10 @@ public Either<WebDriverException, ActiveSession> apply(CreateSessionRequest sess

Capabilities caps = new ImmutableCapabilities((Map<?, ?>) response.getValue());
if (platformName.isPresent()) {
caps = setInitialPlatform(caps, platformName.get());
caps = setInitialCapabilityValue(caps, "platformName", platformName.get());
}
if (browserVersion.isPresent()) {
caps = setInitialCapabilityValue(caps, "browserVersion", browserVersion.get());
}

caps = readDevToolsEndpointAndVersion(caps);
Expand Down Expand Up @@ -319,16 +328,17 @@ private Capabilities readVncEndpoint(Capabilities requestedCaps, Capabilities re
return returnedCaps;
}

// We remove the platform before sending the caps to the driver because some drivers will
// reject session requests when they cannot parse the platform.
private Capabilities removePlatform(Capabilities caps) {
// We remove a capability before sending the caps to the driver because some drivers will
// reject session requests when they cannot parse the specific capabilities (like platform or
// browser version).
private Capabilities removeCapability(Capabilities caps, String capability) {
MutableCapabilities noPlatformName = new MutableCapabilities(new HashMap<>(caps.asMap()));
noPlatformName.setCapability("platformName", (String) null);
noPlatformName.setCapability(capability, (String) null);
return new PersistentCapabilities(noPlatformName);
}

private Capabilities setInitialPlatform(Capabilities caps, Platform platform) {
return new PersistentCapabilities(caps).setCapability("platformName", platform);
private Capabilities setInitialCapabilityValue(Capabilities caps, String key, Object value) {
return new PersistentCapabilities(caps).setCapability(key, value);
}

private String getHost() {
Expand Down
7 changes: 5 additions & 2 deletions java/src/org/openqa/selenium/manager/SeleniumManager.java
Expand Up @@ -31,7 +31,6 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openqa.selenium.Beta;
Expand Down Expand Up @@ -258,7 +257,11 @@ public Result getDriverPath(Capabilities options, boolean offline) {
if (!options.getBrowserVersion().isEmpty()) {
arguments.add("--browser-version");
arguments.add(options.getBrowserVersion());
((MutableCapabilities) options).setCapability("browserVersion", Optional.empty());
// We know the browser binary path, we don't need the browserVersion.
// Useful when "beta" is specified as browserVersion, but the browser driver cannot match it.
if (options instanceof MutableCapabilities) {
((MutableCapabilities) options).setCapability("browserVersion", (String) null);
}
}

String browserBinary = getBrowserBinary(options);
Expand Down

0 comments on commit 0178bb1

Please sign in to comment.