Skip to content

Commit cca2c28

Browse files
committed
Only ignore extension caps with object/array values
1 parent 05bce9b commit cca2c28

File tree

4 files changed

+33
-54
lines changed

4 files changed

+33
-54
lines changed

java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
package org.openqa.selenium.grid.data;
1919

2020
import java.io.Serializable;
21-
import java.util.Arrays;
22-
import java.util.List;
2321
import java.util.Objects;
2422
import org.openqa.selenium.Capabilities;
2523

@@ -44,13 +42,6 @@
4442
*/
4543
public class DefaultSlotMatcher implements SlotMatcher, Serializable {
4644

47-
/*
48-
List of prefixed extension capabilities we never should try to match, they should be
49-
matched in the Node or in the browser driver.
50-
*/
51-
private static final List<String> EXTENSION_CAPABILITIES_PREFIXES =
52-
Arrays.asList("goog:", "moz:", "ms:", "se:");
53-
5445
@Override
5546
public boolean matches(Capabilities stereotype, Capabilities capabilities) {
5647

@@ -97,18 +88,16 @@ private Boolean initialMatch(Capabilities stereotype, Capabilities capabilities)
9788
.filter(name -> !name.contains(":"))
9889
// Platform matching is special, we do it later
9990
.filter(name -> !"platformName".equalsIgnoreCase(name))
91+
.filter(name -> capabilities.getCapability(name) != null)
10092
.map(
10193
name -> {
102-
if (capabilities.getCapability(name) instanceof String) {
103-
return stereotype
104-
.getCapability(name)
105-
.toString()
106-
.equalsIgnoreCase(capabilities.getCapability(name).toString());
107-
} else {
108-
return capabilities.getCapability(name) == null
109-
|| Objects.equals(
110-
stereotype.getCapability(name), capabilities.getCapability(name));
94+
if (stereotype.getCapability(name) instanceof String
95+
&& capabilities.getCapability(name) instanceof String) {
96+
return ((String) stereotype.getCapability(name))
97+
.equalsIgnoreCase((String) capabilities.getCapability(name));
11198
}
99+
return Objects.equals(
100+
stereotype.getCapability(name), capabilities.getCapability(name));
112101
})
113102
.reduce(Boolean::logicalAnd)
114103
.orElse(true);
@@ -145,27 +134,22 @@ private Boolean platformVersionMatch(Capabilities stereotype, Capabilities capab
145134
}
146135

147136
private Boolean extensionCapabilitiesMatch(Capabilities stereotype, Capabilities capabilities) {
148-
/*
149-
We match extension capabilities when they are not prefixed with any of the
150-
EXTENSION_CAPABILITIES_PREFIXES items. Also, we match them only when the capabilities
151-
of the new session request contains that specific extension capability.
152-
*/
153137
return stereotype.getCapabilityNames().stream()
154138
.filter(name -> name.contains(":"))
155-
.filter(name -> capabilities.asMap().containsKey(name))
156-
.filter(name -> EXTENSION_CAPABILITIES_PREFIXES.stream().noneMatch(name::contains))
139+
.filter(name -> capabilities.getCapability(name) != null)
157140
.map(
158141
name -> {
159-
if (capabilities.getCapability(name) instanceof String) {
160-
return stereotype
161-
.getCapability(name)
162-
.toString()
163-
.equalsIgnoreCase(capabilities.getCapability(name).toString());
164-
} else {
165-
return capabilities.getCapability(name) == null
166-
|| Objects.equals(
167-
stereotype.getCapability(name), capabilities.getCapability(name));
142+
if (stereotype.getCapability(name) instanceof String
143+
&& capabilities.getCapability(name) instanceof String) {
144+
return ((String) stereotype.getCapability(name))
145+
.equalsIgnoreCase((String) capabilities.getCapability(name));
146+
}
147+
if (capabilities.getCapability(name) instanceof Number
148+
|| capabilities.getCapability(name) instanceof Boolean) {
149+
return Objects.equals(
150+
stereotype.getCapability(name), capabilities.getCapability(name));
168151
}
152+
return true;
169153
})
170154
.reduce(Boolean::logicalAnd)
171155
.orElse(true);

java/src/org/openqa/selenium/grid/node/relay/RelaySessionFactory.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import java.util.logging.Logger;
4141
import org.openqa.selenium.Capabilities;
4242
import org.openqa.selenium.ImmutableCapabilities;
43-
import org.openqa.selenium.MutableCapabilities;
4443
import org.openqa.selenium.SessionNotCreatedException;
4544
import org.openqa.selenium.WebDriverException;
4645
import org.openqa.selenium.grid.data.CreateSessionRequest;
@@ -50,7 +49,6 @@
5049
import org.openqa.selenium.internal.Debug;
5150
import org.openqa.selenium.internal.Either;
5251
import org.openqa.selenium.internal.Require;
53-
import org.openqa.selenium.remote.CapabilityType;
5452
import org.openqa.selenium.remote.Command;
5553
import org.openqa.selenium.remote.Dialect;
5654
import org.openqa.selenium.remote.DriverCommand;
@@ -149,15 +147,6 @@ public Either<WebDriverException, ActiveSession> apply(CreateSessionRequest sess
149147
"New session request capabilities do not " + "match the stereotype."));
150148
}
151149

152-
// remove browserName capability if 'appium:app' is present as it breaks appium tests when app
153-
// is provided
154-
// they are mutually exclusive
155-
MutableCapabilities filteredStereotype = new MutableCapabilities(stereotype);
156-
if (capabilities.getCapability("appium:app") != null) {
157-
filteredStereotype.setCapability(CapabilityType.BROWSER_NAME, (String) null);
158-
}
159-
160-
capabilities = capabilities.merge(filteredStereotype);
161150
LOG.info("Starting session for " + capabilities);
162151

163152
try (Span span = tracer.getCurrentContext().createSpan("relay_session_factory.apply")) {

java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
import static org.assertj.core.api.Assertions.assertThat;
2121

22+
import java.util.List;
23+
import java.util.Map;
2224
import org.junit.jupiter.api.Test;
2325
import org.openqa.selenium.Capabilities;
2426
import org.openqa.selenium.ImmutableCapabilities;
@@ -433,10 +435,10 @@ void vendorExtensionPrefixedCapabilitiesAreIgnoredForMatching() {
433435
"84",
434436
CapabilityType.PLATFORM_NAME,
435437
Platform.WINDOWS,
436-
"goog:cheese",
437-
"amsterdam",
438-
"ms:fruit",
439-
"mango");
438+
"food:dairy",
439+
Map.of("cheese", "amsterdam"),
440+
"food:fruit",
441+
List.of("mango"));
440442

441443
Capabilities capabilities =
442444
new ImmutableCapabilities(
@@ -446,10 +448,10 @@ void vendorExtensionPrefixedCapabilitiesAreIgnoredForMatching() {
446448
"84",
447449
CapabilityType.PLATFORM_NAME,
448450
Platform.WINDOWS,
449-
"goog:cheese",
450-
"gouda",
451-
"ms:fruit",
452-
"orange");
451+
"food:dairy",
452+
Map.of("cheese", "gouda"),
453+
"food:fruit",
454+
List.of("orange"));
453455
assertThat(slotMatcher.matches(stereotype, capabilities)).isTrue();
454456
}
455457

java/test/org/openqa/selenium/grid/node/config/NodeOptionsTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import org.openqa.selenium.internal.Either;
6464
import org.openqa.selenium.json.Json;
6565
import org.openqa.selenium.net.NetworkUtils;
66+
import org.openqa.selenium.remote.Browser;
6667
import org.openqa.selenium.safari.SafariDriverInfo;
6768

6869
@SuppressWarnings("DuplicatedCode")
@@ -148,7 +149,10 @@ boolean isDownloadEnabled(WebDriverInfo driver, String customMsg) {
148149
reported.add(caps);
149150
return Collections.singleton(HelperFactory.create(config, caps));
150151
});
151-
String expected = driver.getDisplayName();
152+
String expected =
153+
"Edge".equals(driver.getDisplayName())
154+
? Browser.EDGE.browserName()
155+
: driver.getDisplayName();
152156

153157
Capabilities found =
154158
reported.stream()

0 commit comments

Comments
 (0)