Skip to content

Commit 59cec8e

Browse files
committed
redo session initialization - potential compat-buster
1 parent 794539e commit 59cec8e

File tree

2 files changed

+43
-44
lines changed

2 files changed

+43
-44
lines changed

lib/WebDriver/WebDriver.php

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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
{

lib/WebDriver/WebDriverInterface.php

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,11 @@ interface WebDriverInterface
3434
* New Session: /session (POST)
3535
* Get session object for chaining
3636
*
37-
* @param array|string $requiredCapabilities Required capabilities (or browser name)
38-
* @param array $desiredCapabilities Desired capabilities
37+
* @param string $browserName Preferred browser
38+
* @param array $desiredCapabilities Optional desired capabilities
39+
* @param array $requiredCapabilities Optional required capabilities
3940
*
4041
* @return \WebDriver\Session
4142
*/
42-
public function session($requiredCapabilities = Browser::FIREFOX, $desiredCapabilities = array());
43-
44-
/**
45-
* Get Sessions: /sessions (GET)
46-
* Get list of currently active sessions
47-
*
48-
* @deprecated
49-
*
50-
* @return array an array of \WebDriver\Session objects
51-
*/
52-
public function sessions();
43+
public function session($browserName = Browser::FIREFOX, $desiredCapabilities = null, $requiredCapabilities = null);
5344
}

0 commit comments

Comments
 (0)