Skip to content

Commit

Permalink
Allow the new session command from the remote webdriver to take more …
Browse files Browse the repository at this point in the history
…than one capability
  • Loading branch information
shs96c committed Apr 27, 2021
1 parent 854ac60 commit d9bb0fb
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
22 changes: 20 additions & 2 deletions java/client/src/org/openqa/selenium/remote/DriverCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,21 @@
package org.openqa.selenium.remote;

import com.google.common.collect.ImmutableMap;

import org.openqa.selenium.Capabilities;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.internal.Require;
import org.openqa.selenium.print.PrintOptions;

import java.time.Duration;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

/**
* An empty interface defining constants for the standard commands defined in the WebDriver JSON
Expand All @@ -44,7 +45,24 @@ public interface DriverCommand {
String GET_CAPABILITIES = "getCapabilities";
String NEW_SESSION = "newSession";
static CommandPayload NEW_SESSION(Capabilities capabilities) {
return new CommandPayload(NEW_SESSION, ImmutableMap.of("desiredCapabilities", capabilities));
Require.nonNull("Capabilities", capabilities);
return new CommandPayload(
NEW_SESSION,
ImmutableMap.of(
"capabilities", CapabilitiesUtils.makeW3CSafe(capabilities).collect(Collectors.toSet()),
"desiredCapabilities", capabilities));
}
static CommandPayload NEW_SESSION(Collection<Capabilities> capabilities) {
Require.nonNull("Capabilities", capabilities);
if (capabilities.isEmpty()) {
throw new IllegalArgumentException("Capabilities for new session must not be empty");
}

return new CommandPayload(
NEW_SESSION,
ImmutableMap.of(
"capabilities", capabilities.stream().flatMap(CapabilitiesUtils::makeW3CSafe).collect(Collectors.toSet()),
"desiredCapabilities", capabilities.iterator().next()));
}

String STATUS = "status";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.util.Collections.singleton;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.openqa.selenium.remote.CapabilityType.LOGGING_PREFS;
import static org.openqa.selenium.remote.CapabilityType.PLATFORM;
Expand Down Expand Up @@ -248,7 +249,7 @@ protected void setSessionId(String opaqueKey) {
}

protected void startSession(Capabilities capabilities) {
Response response = execute(DriverCommand.NEW_SESSION(capabilities));
Response response = execute(DriverCommand.NEW_SESSION(singleton(capabilities)));

if (response == null) {
throw new SessionNotCreatedException(
Expand All @@ -269,7 +270,7 @@ protected void startSession(Capabilities capabilities) {
response.toString());
}

Map<String, Object> rawCapabilities = (Map<String, Object>) responseValue;
@SuppressWarnings("unchecked") Map<String, Object> rawCapabilities = (Map<String, Object>) responseValue;
MutableCapabilities returnedCapabilities = new MutableCapabilities(rawCapabilities);
String platformString = (String) rawCapabilities.getOrDefault(
PLATFORM,
Expand Down

0 comments on commit d9bb0fb

Please sign in to comment.