{"record":{"id":"af9531ef19da35e1","repo":"SeleniumHQ/selenium","slug":"devtools-is-not-supported-by-the-remote-server","errorCode":null,"errorMessage":"DevTools is not supported by the Remote Server","messagePattern":"DevTools is not supported by the Remote Server","errorType":"exception","errorClass":"Error::WebDriverError","httpStatus":null,"severity":"error","filePath":"rb/lib/selenium/webdriver/remote/driver.rb","lineNumber":64,"sourceCode":"          @bridge.extend(WebDriver::Remote::Features)\n          @bridge.add_commands(command_list)\n        end\n\n        private\n\n        def assert_arguments(service, url, http_client, client_config)\n          raise ArgumentError, \"Can not set :service object on #{self.class}\" if service\n          raise ArgumentError, 'Cannot use both :http_client and :client_config' if http_client && client_config\n          raise ArgumentError, 'Cannot use both :url and a ClientConfig#server_url' if url && client_config&.server_url\n        end\n\n        def devtools_url\n          capabilities['se:cdp']\n        end\n\n        def devtools_version\n          cdp_version = capabilities['se:cdpVersion']&.split('.')&.first\n          raise Error::WebDriverError, 'DevTools is not supported by the Remote Server' unless cdp_version\n\n          Integer(cdp_version)\n        end\n\n        def process_options(options, capabilities)\n          if options && capabilities\n            msg = \"Don't use both :options and :capabilities when initializing #{self.class}, prefer :options\"\n            raise ArgumentError, msg\n          elsif options.nil? && capabilities.nil?\n            raise ArgumentError, \"#{self.class} needs :options to be set\"\n          end\n          options ? options.as_json : generate_capabilities(capabilities)\n        end\n\n        def generate_capabilities(capabilities)\n          Array(capabilities).map { |cap|\n            if cap.is_a? Symbol\n              cap = WebDriver::Options.send(cap)","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/SeleniumHQ/selenium/blob/aa36b38e696a0909e973bdf5e2f9031ffe842c4b/rb/lib/selenium/webdriver/remote/driver.rb#L46-L82","documentation":"Raised as Error::WebDriverError by Remote::Driver#devtools_version when the 'se:cdpVersion' capability is absent or its first dot-separated segment cannot be parsed as a CDP version integer. The method splits the capability on '.', takes the first element, and if it is nil (capability missing or empty) raises this error. It indicates the remote server does not expose Chrome DevTools Protocol support.","triggerScenarios":"Calling driver.devtools or any DevTools-dependent API on a remote session where the server (e.g. a non-Chromium grid node, or a server without CDP extension capabilities) did not return 'se:cdpVersion'. Connecting to a Selenium Grid running a Firefox-only or Safari-only node. Using a remote endpoint that strips vendor capabilities.","commonSituations":"Pointing at a Grid whose nodes don't run Chrome/Edge (CDP is Chromium-only). Connecting to a third-party cloud provider that doesn't forward se:cdpVersion. Browser version mismatches where the driver couldn't detect the CDP version. Calling DevTools APIs on a Safari or Firefox remote session.","solutions":["Verify the remote session is backed by a Chromium-based browser (Chrome or Edge) that supports CDP.","Check capabilities['se:cdpVersion'] is present after session creation; if nil, the server does not support DevTools.","Ensure the Selenium Server / Grid version is recent enough to populate se:cdpVersion and se:cdp capabilities.","Use BiDi (driver.bidi) instead of DevTools if you need cross-browser automation on non-Chromium browsers."],"exampleFix":"# before\ndriver = Selenium::WebDriver.for(:remote, url: grid_url,\n  capabilities: Selenium::WebDriver::Remote::Capabilities.firefox)\ndriver.devtools  # raises — Firefox has no CDP\n\n# after\ndriver = Selenium::WebDriver.for(:remote, url: grid_url,\n  capabilities: Selenium::WebDriver::Remote::Capabilities.chrome)\ndriver.devtools  # works","handlingStrategy":"validation","validationCode":"# Check CDP capability before using DevTools:\nunless driver.capabilities['se:cdpVersion']\n  raise 'DevTools unavailable — remote node is not Chromium or lacks CDP support'\nend\ndriver.devtools","typeGuard":"def devtools_available?(driver)\n  !driver.capabilities['se:cdpVersion'].nil? &&\n    driver.capabilities['se:cdpVersion'].split('.').first&.match?(/\\A\\d+\\z/)\nend","tryCatchPattern":"begin\n  driver.devtools\nrescue Selenium::WebDriver::Error::WebDriverError => e\n  raise unless e.message.include?('DevTools is not supported')\n  # fall back to BiDi or skip DevTools-dependent logic\n  driver.bidi\nend","preventionTips":["Use Chromium-based browsers (Chrome/Edge) when you need DevTools on Remote.","Check se:cdpVersion in capabilities before calling DevTools APIs.","Consider WebDriver BiDi for cross-browser low-level automation."],"tags":["devtools","cdp","remote-driver","capability-missing","chromium-only"],"backgroundTag":null,"analyzedSha":"aa36b38e696a0909e973bdf5e2f9031ffe842c4b","analyzedAt":"2026-08-14T02:32:32.244Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}