diff --git a/src/WebdriverClassicDriver.php b/src/WebdriverClassicDriver.php index 38f6bb1..5c8e221 100644 --- a/src/WebdriverClassicDriver.php +++ b/src/WebdriverClassicDriver.php @@ -762,7 +762,7 @@ protected function createWebDriver(): void throw new DriverException('Base driver has already been created'); } - $this->webDriver = RemoteWebDriver::create($this->webDriverHost, $this->desiredCapabilities); + $this->webDriver = RemoteWebDriver::create($this->webDriverHost, $this->getDesiredCapabilities()); } /** @@ -777,6 +777,11 @@ protected function getWebDriver(): RemoteWebDriver throw new DriverException('Base driver has not been created'); } + protected function getDesiredCapabilities(): array + { + return $this->desiredCapabilities->toArray(); + } + private function getNormalisedBrowserName(): string { return self::BROWSER_NAME_ALIAS_MAP[$this->browserName] ?? $this->browserName; diff --git a/tests/Custom/CapabilityTest.php b/tests/Custom/CapabilityTest.php new file mode 100644 index 0000000..6fb2a0a --- /dev/null +++ b/tests/Custom/CapabilityTest.php @@ -0,0 +1,100 @@ + $desiredCapabilities + * @param array $expectedCapabilities + * + * @dataProvider capabilitiesDataProvider + */ + public function testThatCapabilitiesAreAsExpected(string $browserName, array $desiredCapabilities, array $expectedCapabilities): void + { + $driver = $this->createDriverExposingCapabilities($browserName, $desiredCapabilities); + + $this->assertSame($expectedCapabilities, $driver->capabilities); + } + + public static function capabilitiesDataProvider(): iterable + { + yield 'unknown browser starts with default driver capabilities' => [ + 'browserName' => 'fake browser', + 'desiredCapabilities' => [], + 'expectedCapabilities' => [ + 'platform' => 'ANY', + 'name' => 'Behat Test', + 'deviceOrientation' => 'landscape', + 'deviceType' => 'desktop', + ], + ]; + + yield 'default capabilities can be customised' => [ + 'browserName' => 'fake browser', + 'desiredCapabilities' => [ + 'something' => 'custom', + 'name' => 'Custom Test', + ], + 'expectedCapabilities' => [ + 'platform' => 'ANY', + 'name' => 'Custom Test', + 'deviceOrientation' => 'landscape', + 'deviceType' => 'desktop', + 'something' => 'custom', + ], + ]; + + yield 'browser-specific default capabilities are added' => [ + 'browserName' => 'chrome', + 'desiredCapabilities' => [], + 'expectedCapabilities' => [ + 'browserName' => 'chrome', + 'platform' => 'ANY', + 'name' => 'Behat Test', + 'deviceOrientation' => 'landscape', + 'deviceType' => 'desktop', + 'goog:chromeOptions' => [ + 'excludeSwitches' => ['enable-automation'], + ], + ], + ]; + + yield 'browser-specific default capabilities can be customised' => [ + 'browserName' => 'chrome', + 'desiredCapabilities' => [ + 'name' => 'Custom Test', + 'goog:chromeOptions' => ['args' => ['a', 'b', 'c']], + ], + 'expectedCapabilities' => [ + 'browserName' => 'chrome', + 'platform' => 'ANY', + 'name' => 'Custom Test', + 'deviceOrientation' => 'landscape', + 'deviceType' => 'desktop', + 'goog:chromeOptions' => ['args' => ['a', 'b', 'c']], + ], + ]; + } + + /** + * @param string $browserName + * @param array $desiredCapabilities + * @return WebdriverClassicDriver&object{capabilities: array} + */ + private function createDriverExposingCapabilities(string $browserName, array $desiredCapabilities = []): WebdriverClassicDriver + { + return new class($browserName, $desiredCapabilities) extends WebdriverClassicDriver { + public ?array $capabilities = null; + + public function __construct(string $browserName, array $desiredCapabilities) + { + parent::__construct($browserName, $desiredCapabilities); + + $this->capabilities = $this->getDesiredCapabilities(); + } + }; + } +}