From 6efda918b215394f79502325e86739b4b1145575 Mon Sep 17 00:00:00 2001 From: Abderrahman Daif Date: Sun, 8 Feb 2026 01:30:40 +0100 Subject: [PATCH] Fix filter() to use keys and allow extension capabilities The filter() method had three bugs: 1. array_filter callback received values instead of keys, causing TypeError when capability values are arrays (e.g. goog:chromeOptions) 2. Extension capabilities (keys containing ':') were stripped, but W3C spec requires them to be allowed through 3. array_values() destroyed the key-value mapping, turning {"browserName": "chrome"} into ["chrome"] Fix by using ARRAY_FILTER_USE_KEY, allowing extension capabilities per W3C spec, and removing array_values() wrapper. References: - https://www.w3.org/TR/webdriver2/#dfn-extension-capability - https://www.php.net/array_filter --- lib/WebDriver/WebDriver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WebDriver/WebDriver.php b/lib/WebDriver/WebDriver.php index b97eb87..0e204f4 100644 --- a/lib/WebDriver/WebDriver.php +++ b/lib/WebDriver/WebDriver.php @@ -166,7 +166,7 @@ public function sessions() */ private function filter($capabilities) { - return $capabilities ? array_values(array_filter($capabilities, function ($capability) { return self::$w3cCapabilities[$capability] ?? 0; })) : null; + return $capabilities ? array_filter($capabilities, function ($key) { return isset(self::$w3cCapabilities[$key]) || str_contains($key, ':'); }, ARRAY_FILTER_USE_KEY) : null; } /**