1818package org .openqa .selenium .remote ;
1919
2020import com .google .common .collect .ImmutableMap ;
21-
2221import org .openqa .selenium .Capabilities ;
2322import org .openqa .selenium .Cookie ;
2423import org .openqa .selenium .Dimension ;
2524import org .openqa .selenium .Point ;
2625import org .openqa .selenium .WindowType ;
2726import org .openqa .selenium .interactions .Sequence ;
27+ import org .openqa .selenium .internal .Require ;
2828import org .openqa .selenium .print .PrintOptions ;
2929
3030import java .time .Duration ;
3131import java .util .Collection ;
3232import java .util .Collections ;
3333import java .util .List ;
3434import java .util .concurrent .TimeUnit ;
35+ import java .util .stream .Collectors ;
3536
3637/**
3738 * An empty interface defining constants for the standard commands defined in the WebDriver JSON
@@ -44,7 +45,24 @@ public interface DriverCommand {
4445 String GET_CAPABILITIES = "getCapabilities" ;
4546 String NEW_SESSION = "newSession" ;
4647 static CommandPayload NEW_SESSION (Capabilities capabilities ) {
47- return new CommandPayload (NEW_SESSION , ImmutableMap .of ("desiredCapabilities" , capabilities ));
48+ Require .nonNull ("Capabilities" , capabilities );
49+ return new CommandPayload (
50+ NEW_SESSION ,
51+ ImmutableMap .of (
52+ "capabilities" , CapabilitiesUtils .makeW3CSafe (capabilities ).collect (Collectors .toSet ()),
53+ "desiredCapabilities" , capabilities ));
54+ }
55+ static CommandPayload NEW_SESSION (Collection <Capabilities > capabilities ) {
56+ Require .nonNull ("Capabilities" , capabilities );
57+ if (capabilities .isEmpty ()) {
58+ throw new IllegalArgumentException ("Capabilities for new session must not be empty" );
59+ }
60+
61+ return new CommandPayload (
62+ NEW_SESSION ,
63+ ImmutableMap .of (
64+ "capabilities" , capabilities .stream ().flatMap (CapabilitiesUtils ::makeW3CSafe ).collect (Collectors .toSet ()),
65+ "desiredCapabilities" , capabilities .iterator ().next ()));
4866 }
4967
5068 String STATUS = "status" ;
0 commit comments