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

Commit ec7ce5b

Browse files
LctrsOndraM
authored andcommitted
Do not fail if ChromeOptions is already an array
DesiredCapabilities::toArray() is a mutable operation which can lead to undesirable side effect of converting ChromeOptions to an array.
1 parent 9a52b1a commit ec7ce5b

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

lib/Remote/DesiredCapabilities.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ public function setJavascriptEnabled($enabled)
156156
}
157157

158158
/**
159+
* @todo Remove side-effects - not change ie. ChromeOptions::CAPABILITY from instance of ChromeOptions to an array
159160
* @return array
160161
*/
161162
public function toArray()

lib/Remote/RemoteWebDriver.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,10 @@ public static function create(
109109
$currentChromeOptions = $desired_capabilities->getCapability(ChromeOptions::CAPABILITY);
110110
$chromeOptions = !empty($currentChromeOptions) ? $currentChromeOptions : new ChromeOptions();
111111

112-
if (!isset($chromeOptions->toArray()['w3c'])) {
112+
if ($chromeOptions instanceof ChromeOptions && !isset($chromeOptions->toArray()['w3c'])) {
113113
$chromeOptions->setExperimentalOption('w3c', false);
114+
} elseif (is_array($chromeOptions) && !isset($chromeOptions['w3c'])) {
115+
$chromeOptions['w3c'] = false;
114116
}
115117

116118
$desired_capabilities->setCapability(ChromeOptions::CAPABILITY, $chromeOptions);

tests/functional/RemoteWebDriverCreateTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,19 @@ public function testShouldStartBrowserAndCreateInstanceOfRemoteWebDriver()
4949
$this->assertSame($this->desiredCapabilities->getBrowserName(), $returnedCapabilities->getBrowserName());
5050
}
5151

52+
public function testShouldAcceprCapabilitiesAsAnArray()
53+
{
54+
// Method has a side-effect of converting whole content of desiredCapabilities to an array
55+
$this->desiredCapabilities->toArray();
56+
57+
$this->driver = RemoteWebDriver::create(
58+
$this->serverUrl,
59+
$this->desiredCapabilities,
60+
$this->connectionTimeout,
61+
$this->requestTimeout
62+
);
63+
}
64+
5265
public function testShouldCreateWebDriverWithRequiredCapabilities()
5366
{
5467
$requiredCapabilities = new DesiredCapabilities();

0 commit comments

Comments
 (0)