Skip to content
This repository was archived by the owner on Mar 4, 2020. It is now read-only.

Commit 5dbadd6

Browse files
committed
Accept W3C capabilitites from the browser and provide them as OSS ones (fixes #692)
1 parent 45d8357 commit 5dbadd6

File tree

3 files changed

+39
-19
lines changed

3 files changed

+39
-19
lines changed

lib/Remote/DesiredCapabilities.php

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,36 @@
2525

2626
class DesiredCapabilities implements WebDriverCapabilities
2727
{
28-
/**
29-
* @var array
30-
*/
28+
/** @var array */
3129
private $capabilities;
3230

31+
/** @var array */
32+
private static $ossToW3c = [
33+
WebDriverCapabilityType::PLATFORM => 'platformName',
34+
WebDriverCapabilityType::VERSION => 'browserVersion',
35+
WebDriverCapabilityType::ACCEPT_SSL_CERTS => 'acceptInsecureCerts',
36+
ChromeOptions::CAPABILITY => ChromeOptions::CAPABILITY_W3C,
37+
];
38+
3339
public function __construct(array $capabilities = [])
3440
{
3541
$this->capabilities = $capabilities;
3642
}
3743

44+
public static function createFromW3cCapabilities(array $capabilities = [])
45+
{
46+
$w3cToOss = array_flip(static::$ossToW3c);
47+
48+
foreach ($w3cToOss as $w3cCapability => $ossCapability) {
49+
// Copy W3C capabilities to OSS ones
50+
if (array_key_exists($w3cCapability, $capabilities)) {
51+
$capabilities[$ossCapability] = $capabilities[$w3cCapability];
52+
}
53+
}
54+
55+
return new self($capabilities);
56+
}
57+
3858
/**
3959
* @return string The name of the browser.
4060
*/
@@ -183,13 +203,6 @@ public function toArray()
183203
*/
184204
public function toW3cCompatibleArray()
185205
{
186-
$ossToW3c = [
187-
WebDriverCapabilityType::PLATFORM => 'platformName',
188-
WebDriverCapabilityType::VERSION => 'browserVersion',
189-
WebDriverCapabilityType::ACCEPT_SSL_CERTS => 'acceptInsecureCerts',
190-
ChromeOptions::CAPABILITY => ChromeOptions::CAPABILITY_W3C,
191-
];
192-
193206
$allowedW3cCapabilities = [
194207
'browserName',
195208
'browserVersion',
@@ -212,12 +225,12 @@ public function toW3cCompatibleArray()
212225
$w3cCapabilities[$capabilityKey] = $capabilityValue;
213226
}
214227

215-
// Convert capabilitites with changed name
216-
if (array_key_exists($capabilityKey, $ossToW3c)) {
217-
if ($capabilityKey === 'platform') {
218-
$w3cCapabilities[$ossToW3c[$capabilityKey]] = mb_strtolower($capabilityValue);
228+
// Convert capabilities with changed name
229+
if (array_key_exists($capabilityKey, static::$ossToW3c)) {
230+
if ($capabilityKey === WebDriverCapabilityType::PLATFORM) {
231+
$w3cCapabilities[static::$ossToW3c[$capabilityKey]] = mb_strtolower($capabilityValue);
219232
} else {
220-
$w3cCapabilities[$ossToW3c[$capabilityKey]] = $capabilityValue;
233+
$w3cCapabilities[static::$ossToW3c[$capabilityKey]] = $capabilityValue;
221234
}
222235
}
223236

lib/Remote/RemoteWebDriver.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,17 @@ public static function create(
149149
$response = $executor->execute($command);
150150
$value = $response->getValue();
151151

152-
if (!$w3c_compliant = isset($value['capabilities'])) {
152+
if (!$isW3cCompliant = isset($value['capabilities'])) {
153153
$executor->disableW3cCompliance();
154154
}
155155

156-
$returnedCapabilities = new DesiredCapabilities($w3c_compliant ? $value['capabilities'] : $value);
156+
if ($isW3cCompliant) {
157+
$returnedCapabilities = DesiredCapabilities::createFromW3cCapabilities($value['capabilities']);
158+
} else {
159+
$returnedCapabilities = new DesiredCapabilities($value);
160+
}
157161

158-
$driver = new static($executor, $response->getSessionID(), $returnedCapabilities, $w3c_compliant);
162+
$driver = new static($executor, $response->getSessionID(), $returnedCapabilities, $isW3cCompliant);
159163

160164
return $driver;
161165
}

tests/functional/RemoteWebDriverCreateTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,12 @@ public function testShouldStartBrowserAndCreateInstanceOfRemoteWebDriver()
5050
$returnedCapabilities = $this->driver->getCapabilities();
5151
$this->assertInstanceOf(WebDriverCapabilities::class, $returnedCapabilities);
5252
$this->assertSame($this->desiredCapabilities->getBrowserName(), $returnedCapabilities->getBrowserName());
53+
$this->assertNotEmpty($returnedCapabilities->getPlatform());
54+
$this->assertNotEmpty($returnedCapabilities);
55+
$this->assertNotEmpty($returnedCapabilities->getVersion());
5356
}
5457

55-
public function testShouldAcceprCapabilitiesAsAnArray()
58+
public function testShouldAcceptCapabilitiesAsAnArray()
5659
{
5760
// Method has a side-effect of converting whole content of desiredCapabilities to an array
5861
$this->desiredCapabilities->toArray();

0 commit comments

Comments
 (0)