@@ -45,44 +45,47 @@ protected function methods()
4545 /**
4646 * {@inheritdoc}
4747 */
48- public function session ($ requiredCapabilities = Browser::FIREFOX , $ desiredCapabilities = array () )
48+ public function session ($ browserName = Browser::FIREFOX , $ desiredCapabilities = null , $ requiredCapabilities = null )
4949 {
50- if ($ this ->legacy ) {
51- // for backwards compatibility when the only required capability was browser name
52- if (! is_array ($ requiredCapabilities )) {
53- $ desiredCapabilities [Capability::BROWSER_NAME ] = $ requiredCapabilities ?: Browser::FIREFOX ;
50+ // default to W3C WebDriver API
51+ $ firstMatch = $ desiredCapabilities ?: array ();
52+ $ firstMatch [] = array ('browserName ' => Browser::CHROME );
5453
55- $ requiredCapabilities = array ();
56- }
54+ if ($ browserName !== Browser::CHROME ) {
55+ $ firstMatch [] = array ('browserName ' => $ browserName );
56+ }
57+
58+ $ parameters = array ('capabilities ' => array ('firstMatch ' => $ firstMatch ));
5759
58- // required
59- $ parameters = array (
60- 'desiredCapabilities ' => array_merge ($ desiredCapabilities , $ requiredCapabilities )
60+ if (is_array ($ requiredCapabilities ) && count ($ requiredCapabilities )) {
61+ $ parameters ['capabilities ' ]['alwaysMatch ' ] = $ requiredCapabilities ;
62+ }
63+
64+ try {
65+ $ result = $ this ->curl (
66+ 'POST ' ,
67+ '/session ' ,
68+ $ parameters ,
69+ array (CURLOPT_FOLLOWLOCATION => true )
6170 );
71+ } catch (\Exception $ e ) {
72+ // fallback to legacy JSON Wire Protocol
73+ $ capabilities = $ desiredCapabilities ?: array ();
74+ $ capabilities [Capability::BROWSER_NAME ] = $ browserName ;
75+
76+ $ parameters = array ('desiredCapabilities ' => $ capabilities );
6277
63- // optional
64- if (! empty ($ requiredCapabilities )) {
78+ if (is_array ($ requiredCapabilities ) && count ($ requiredCapabilities )) {
6579 $ parameters ['requiredCapabilities ' ] = $ requiredCapabilities ;
6680 }
67- } else {
68- if (! is_array ($ requiredCapabilities )) {
69- $ parameters = array (
70- 'capabilities ' => array (
71- 'firstMatch ' => array (
72- array ('browserName ' => Browser::CHROME ),
73- array ('browserName ' => Browser::FIREFOX )
74- )
75- )
76- );
77- }
78- }
7981
80- $ result = $ this ->curl (
81- 'POST ' ,
82- '/session ' ,
83- $ parameters ,
84- array (CURLOPT_FOLLOWLOCATION => true )
85- );
82+ $ result = $ this ->curl (
83+ 'POST ' ,
84+ '/session ' ,
85+ $ parameters ,
86+ array (CURLOPT_FOLLOWLOCATION => true )
87+ );
88+ }
8689
8790 $ capabilities = isset ($ result ['value ' ]['capabilities ' ]) ? $ result ['value ' ]['capabilities ' ] : null ;
8891 $ this ->legacy = ! $ capabilities ;
@@ -94,7 +97,12 @@ public function session($requiredCapabilities = Browser::FIREFOX, $desiredCapabi
9497 }
9598
9699 /**
97- * {@inheritdoc}
100+ * Get Sessions: /sessions (GET)
101+ * Get list of currently active sessions
102+ *
103+ * @deprecated
104+ *
105+ * @return array an array of \WebDriver\Session objects
98106 */
99107 public function sessions ()
100108 {
0 commit comments