{"record":{"id":"92680118cd92ba51","repo":"karatelabs/karate","slug":"request-interception-not-supported-on-webdriver-backend","errorCode":null,"errorMessage":"Request interception not supported on WebDriver backend","messagePattern":"Request interception not supported on WebDriver backend","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"karate-core/src/main/java/io/karatelabs/driver/w3c/W3cDriver.java","lineNumber":318,"sourceCode":"    @Override\n    public byte[] pdf(Map<String, Object> pdfOptions) {\n        throw new UnsupportedOperationException(\n                \"PDF generation not supported on WebDriver backend\");\n    }\n\n    @Override\n    public Map<String, Object> cookie(String name) {\n        return session.getCookie(name);\n    }\n\n    @Override\n    public void cookie(Map<String, Object> cookie) {\n        session.addCookie(cookie);\n    }\n\n    @Override\n    public void intercept(List<String> patterns, InterceptHandler handler) {\n        throw new UnsupportedOperationException(\n                \"Request interception not supported on WebDriver backend\");\n    }\n\n    @Override\n    public void window(String operation) {\n        switch (operation) {\n            case \"maximize\" -> session.maximizeWindow();\n            case \"minimize\" -> session.minimizeWindow();\n            case \"fullscreen\" -> session.fullscreenWindow();\n            default -> logger.warn(\"Unknown window operation: {}\", operation);\n        }\n    }\n\n    @Override\n    public void tab(Object target) {\n        if (target instanceof Integer) {\n            List<String> handles = session.getWindowHandles();\n            int index = (Integer) target;","sourceCodeStart":300,"sourceCodeEnd":336,"githubUrl":"https://github.com/karatelabs/karate/blob/a22eb90246d958d15a47bf436693d0121ad2812d/karate-core/src/main/java/io/karatelabs/driver/w3c/W3cDriver.java#L300-L336","documentation":"W3cDriver.intercept() unconditionally throws UnsupportedOperationException: network request interception/mocking relies on DevTools Fetch domain, which the W3C WebDriver protocol does not expose. The capability exists only on the CDP driver.","triggerScenarios":"Calling driver.intercept(patterns, handler) — or Karate's intercept/mocking API — while running on a WebDriver (chromedriver/geckodriver) backend.","commonSituations":"Mocking external APIs in UI tests with config switched to a WebDriver backend; tests shared between CDP and selenium-grid runs; copy-pasting CDP-based intercept examples into W3C-based suites.","solutions":["Run the scenario on the CDP driver (type 'chrome') where interception is supported","Replace interception with an application-level mock/proxy (e.g. point the app at a stub server)","Skip intercept-dependent scenarios on W3C backends via tags/conditional config"],"exampleFix":"// before\n{ type: 'chromedriver' } and calling intercept(['**/api/**'], handler)\n// after\n{ type: 'chrome' }  // CDP backend supports interception","handlingStrategy":"fallback","validationCode":"// only set up interception on CDP backend\nif (driverSupportsIntercept) {\n    karate.intercept(patterns, handler);\n} else {\n    startStubServer(); // app-level mock instead\n}","typeGuard":"boolean supportsIntercept(String driverType) { return \"chrome\".equals(driverType); }","tryCatchPattern":"try {\n    karate.intercept(patterns, handler);\n} catch (UnsupportedOperationException e) {\n    // fall back to stub server / proxy-based mocking\n}","preventionTips":["Run intercept-dependent tests only on the CDP driver","Prefer a standalone mock server for backend-agnostic mocking","Tag interception scenarios distinctly in the suite"],"tags":["unsupported-operation","interception","webdriver","cdp"],"backgroundTag":"unsupported-operation","analyzedSha":"a22eb90246d958d15a47bf436693d0121ad2812d","analyzedAt":"2026-09-12T09:01:00.220Z","contentChangedAt":"2026-09-12T09:01:00.220Z","schemaVersion":2},"datasetVersion":"2026-09-16T19:17:19.609Z"}