WebDriver BiDiLimited availability
WebDriver BiDi is a bidirectional protocol that allows a WebDriver client and a browser to communicate with each other.
Not yet supported in all major browsers — check the table and provide a fallback.
Browser support
DesktopChrome
1–125Not supported
126+Supportedsince Jun 11, 2024
Current: 155Edge
12–125Not supported
126+Supportedsince Jun 13, 2024
Current: 154Firefox
1–116Not supported
117+Supportedsince Aug 29, 2023
Current: 157Safari
✕Not supportedup to 27
Current: 27MobileChrome Android
18–125Not supported
126+Supportedsince Jun 11, 2024
Current: 155Firefox Android
4–116Not supported
117+Supportedsince Aug 29, 2023
Current: 157Safari iOS
✕Not supportedup to 27
Current: 27How to use
Not supported in Safari, Safari iOS. Use feature detection below and provide a fallback (or a polyfill) for those browsers.
Example
Full syntax and examples are on MDN: browser.
Feature detection
There’s no simple runtime check for this feature; rely on the support table and test in your target browsers.
Sub-features
Support for each part of the feature (116). The overall table above shows when the whole feature works.
| Sub-feature | Chrome | Edge | Firefox | Safari | Chrome Android | Firefox Android | Safari iOS |
|---|---|---|---|---|---|---|---|
| webdriver.bidi.browser | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browser.close | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browser.getClientWindows | ✕ | ✕ | 134 | ✕ | ✕ | 134 | ✕ |
| webdriver.bidi.browsingContext | 126 | 126 | 99 | ✕ | 126 | 99 | ✕ |
| webdriver.bidi.browsingContext.activate | 126 | 126 | 118 | ✕ | 126 | 118 | ✕ |
| webdriver.bidi.browsingContext.activate.context_parameter | 126 | 126 | 118 | ✕ | 126 | 118 | ✕ |
| webdriver.bidi.browsingContext.close | 126 | 126 | 100 | ✕ | 126 | 100 | ✕ |
| webdriver.bidi.browsingContext.close.context_parameter | 126 | 126 | 100 | ✕ | 126 | 100 | ✕ |
| webdriver.bidi.browsingContext.close.promptUnload_parameter | 126 | 126 | 129 | ✕ | 126 | 129 | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event | 126 | 126 | 99 | ✕ | 126 | 99 | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event.children_parameter | 126 | 126 | 99 | ✕ | 126 | 99 | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event.clientWindow_parameter | 126 | 126 | 140 | ✕ | 126 | 140 | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event.context_parameter | 126 | 126 | 99 | ✕ | 126 | 99 | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event.emit_for_existing_contexts | 126 | 126 | 143 | ✕ | 126 | 143 | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event.originalOpener_parameter | 126 | 126 | ✕ | ✕ | 126 | ✕ | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event.parent_parameter | 126 | 126 | 99 | ✕ | 126 | 99 | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event.url_parameter | 126 | 126 | 99 | ✕ | 126 | 99 | ✕ |
| webdriver.bidi.browsingContext.contextCreated_event.userContext_parameter | 126 | 126 | 124 | ✕ | 126 | 124 | ✕ |
| webdriver.bidi.browsingContext.contextDestroyed_event | 126 | 126 | 121 | ✕ | 126 | 121 | ✕ |
| webdriver.bidi.browsingContext.contextDestroyed_event.children_parameter | 126 | 126 | ✕ | ✕ | 126 | ✕ | ✕ |
Show 96 more
| Sub-feature | Chrome | Edge | Firefox | Safari | Chrome Android | Firefox Android | Safari iOS |
|---|---|---|---|---|---|---|---|
| webdriver.bidi.browsingContext.contextDestroyed_event.clientWindow_parameter | 126 | 126 | 140 | ✕ | 126 | 140 | ✕ |
| webdriver.bidi.browsingContext.contextDestroyed_event.context_parameter | 126 | 126 | 121 | ✕ | 126 | 121 | ✕ |
| webdriver.bidi.browsingContext.contextDestroyed_event.originalOpener_parameter | 126 | 126 | ✕ | ✕ | 126 | ✕ | ✕ |
| webdriver.bidi.browsingContext.contextDestroyed_event.parent_parameter | 126 | 126 | 121 | ✕ | 126 | 121 | ✕ |
| webdriver.bidi.browsingContext.contextDestroyed_event.url_parameter | 126 | 126 | 121 | ✕ | 126 | 121 | ✕ |
| webdriver.bidi.browsingContext.contextDestroyed_event.userContext_parameter | 126 | 126 | 124 | ✕ | 126 | 124 | ✕ |
| webdriver.bidi.browsingContext.create | 126 | 126 | 101 | ✕ | 126 | 101 | ✕ |
| webdriver.bidi.browsingContext.create.background_parameter | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browsingContext.create.referenceContext_parameter | 126 | 126 | 107 | ✕ | 126 | 107 | ✕ |
| webdriver.bidi.browsingContext.create.type_parameter | 126 | 126 | 101 | ✕ | 126 | 101 | ✕ |
| webdriver.bidi.browsingContext.create.userContext_parameter | 126 | 126 | 124 | ✕ | 126 | 124 | ✕ |
| webdriver.bidi.browsingContext.domContentLoaded_event | 126 | 126 | 108 | ✕ | 126 | 108 | ✕ |
| webdriver.bidi.browsingContext.domContentLoaded_event.context_parameter | 126 | 126 | 108 | ✕ | 126 | 108 | ✕ |
| webdriver.bidi.browsingContext.domContentLoaded_event.navigation_parameter | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browsingContext.domContentLoaded_event.timestamp_parameter | 126 | 126 | 110 | ✕ | 126 | 110 | ✕ |
| webdriver.bidi.browsingContext.domContentLoaded_event.url_parameter | 126 | 126 | 108 | ✕ | 126 | 108 | ✕ |
| webdriver.bidi.browsingContext.domContentLoaded_event.userContext_parameter | ✕ | ✕ | 154 | ✕ | ✕ | 154 | ✕ |
| webdriver.bidi.browsingContext.fragmentNavigated_event | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browsingContext.fragmentNavigated_event.context_parameter | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browsingContext.fragmentNavigated_event.navigation_parameter | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browsingContext.fragmentNavigated_event.timestamp_parameter | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browsingContext.fragmentNavigated_event.url_parameter | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browsingContext.fragmentNavigated_event.userContext_parameter | ✕ | ✕ | 154 | ✕ | ✕ | 154 | ✕ |
| webdriver.bidi.browsingContext.getTree | 126 | 126 | 100 | ✕ | 126 | 100 | ✕ |
| webdriver.bidi.browsingContext.getTree.maxDepth_parameter | 126 | 126 | 100 | ✕ | 126 | 100 | ✕ |
| webdriver.bidi.browsingContext.getTree.root_parameter | 126 | 126 | 101 | ✕ | 126 | 101 | ✕ |
| webdriver.bidi.browsingContext.load_event | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.browsingContext.load_event.context_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.browsingContext.load_event.navigation_parameter | 126 | 126 | 117 | ✕ | 126 | 117 | ✕ |
| webdriver.bidi.browsingContext.load_event.timestamp_parameter | 126 | 126 | 110 | ✕ | 126 | 110 | ✕ |
| webdriver.bidi.browsingContext.load_event.url_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.browsingContext.load_event.userContext_parameter | ✕ | ✕ | 154 | ✕ | ✕ | 154 | ✕ |
| webdriver.bidi.browsingContext.navigate | 126 | 126 | 101 | ✕ | 126 | 101 | ✕ |
| webdriver.bidi.browsingContext.navigate.context_parameter | 126 | 126 | 101 | ✕ | 126 | 101 | ✕ |
| webdriver.bidi.browsingContext.navigate.url_parameter | 126 | 126 | 101 | ✕ | 126 | 101 | ✕ |
| webdriver.bidi.browsingContext.navigate.wait_parameter | 126 | 126 | 101 | ✕ | 126 | 101 | ✕ |
| webdriver.bidi.browsingContext.navigationCommitted_event | 126 | 126 | 140 | ✕ | 126 | 140 | ✕ |
| webdriver.bidi.browsingContext.navigationCommitted_event.context_parameter | 126 | 126 | 140 | ✕ | 126 | 140 | ✕ |
| webdriver.bidi.browsingContext.navigationCommitted_event.navigation_parameter | 126 | 126 | 140 | ✕ | 126 | 140 | ✕ |
| webdriver.bidi.browsingContext.navigationCommitted_event.timestamp_parameter | 126 | 126 | 140 | ✕ | 126 | 140 | ✕ |
| webdriver.bidi.browsingContext.navigationCommitted_event.url_parameter | 126 | 126 | 140 | ✕ | 126 | 140 | ✕ |
| webdriver.bidi.browsingContext.navigationCommitted_event.userContext_parameter | ✕ | ✕ | 154 | ✕ | ✕ | 154 | ✕ |
| webdriver.bidi.browsingContext.navigationStarted_event | 126 | 126 | 119 | ✕ | 126 | 119 | ✕ |
| webdriver.bidi.browsingContext.navigationStarted_event.context_parameter | 126 | 126 | 119 | ✕ | 126 | 119 | ✕ |
| webdriver.bidi.browsingContext.navigationStarted_event.navigation_parameter | 126 | 126 | 119 | ✕ | 126 | 119 | ✕ |
| webdriver.bidi.browsingContext.navigationStarted_event.timestamp_parameter | 126 | 126 | 119 | ✕ | 126 | 119 | ✕ |
| webdriver.bidi.browsingContext.navigationStarted_event.url_parameter | 126 | 126 | ✕ | ✕ | 126 | ✕ | ✕ |
| webdriver.bidi.browsingContext.reload | 126 | 126 | 119 | ✕ | 126 | 119 | ✕ |
| webdriver.bidi.browsingContext.reload.context_parameter | 126 | 126 | 119 | ✕ | 126 | 119 | ✕ |
| webdriver.bidi.browsingContext.reload.ignoreCache_parameter | 126 | 126 | ✕ | ✕ | 126 | ✕ | ✕ |
| webdriver.bidi.browsingContext.reload.wait_parameter | 126 | 126 | 119 | ✕ | 126 | 119 | ✕ |
| webdriver.bidi.input | 126 | 126 | 113 | ✕ | 126 | 113 | ✕ |
| webdriver.bidi.input.performActions | 126 | 126 | 113 | ✕ | 126 | 113 | ✕ |
| webdriver.bidi.input.performActions.actions_parameter | 126 | 126 | 113 | ✕ | 126 | 113 | ✕ |
| webdriver.bidi.input.performActions.context_parameter | 126 | 126 | 113 | ✕ | 126 | 113 | ✕ |
| webdriver.bidi.input.releaseActions | 126 | 126 | 113 | ✕ | 126 | 113 | ✕ |
| webdriver.bidi.input.releaseActions.context_parameter | 126 | 126 | 113 | ✕ | 126 | 113 | ✕ |
| webdriver.bidi.script | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.callFunction | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.callFunction.arguments_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.callFunction.awaitPromise_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.callFunction.functionDeclaration_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.callFunction.resultOwnership_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.callFunction.serializationOptions_parameter | 126 | 126 | 114 | ✕ | 126 | 114 | ✕ |
| webdriver.bidi.script.callFunction.target_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.callFunction.this_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.callFunction.userActivation_parameter | 126 | 126 | 121 | ✕ | 126 | 121 | ✕ |
| webdriver.bidi.script.disown | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.disown.handles_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.disown.target_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.evaluate | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.evaluate.awaitPromise_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.evaluate.expression_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.evaluate.resultOwnership_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.evaluate.serializationOptions_parameter | 126 | 126 | 114 | ✕ | 126 | 114 | ✕ |
| webdriver.bidi.script.evaluate.target_parameter | 126 | 126 | 106 | ✕ | 126 | 106 | ✕ |
| webdriver.bidi.script.evaluate.userActivation_parameter | 126 | 126 | 121 | ✕ | 126 | 121 | ✕ |
| webdriver.bidi.script.message_event | 126 | 126 | 114 | ✕ | 126 | 114 | ✕ |
| webdriver.bidi.script.message_event.channel_parameter | 126 | 126 | 114 | ✕ | 126 | 114 | ✕ |
| webdriver.bidi.script.message_event.data_parameter | 126 | 126 | 114 | ✕ | 126 | 114 | ✕ |
| webdriver.bidi.script.message_event.source_parameter | 126 | 126 | 114 | ✕ | 126 | 114 | ✕ |
| webdriver.bidi.script.message_event.source_parameter.userContext | ✕ | ✕ | 154 | ✕ | ✕ | 154 | ✕ |
| webdriver.bidi.session | 120 | 120 | 92 | ✕ | 120 | 92 | ✕ |
| webdriver.bidi.session.end | 120 | 120 | 116 | ✕ | 120 | 116 | ✕ |
| webdriver.bidi.session.new | 126 | 126 | 92 | ✕ | 126 | 92 | ✕ |
| webdriver.bidi.session.new.capabilities_parameter | 126 | 126 | 92 | ✕ | 126 | 92 | ✕ |
| webdriver.bidi.session.new.capabilities_parameter.capability_matching | 139 | 139 | 116 | ✕ | 139 | 116 | ✕ |
| webdriver.bidi.session.status | 126 | 126 | 97 | ✕ | 126 | 97 | ✕ |
| webdriver.bidi.session.subscribe | 126 | 126 | 93 | ✕ | 126 | 93 | ✕ |
| webdriver.bidi.session.subscribe.contexts_parameter | 126 | 126 | 93 | ✕ | 126 | 93 | ✕ |
| webdriver.bidi.session.subscribe.events_parameter | 126 | 126 | 93 | ✕ | 126 | 93 | ✕ |
| webdriver.bidi.session.subscribe.userContexts_parameter | 126 | 126 | 137 | ✕ | 126 | 137 | ✕ |
| webdriver.bidi.session.unsubscribe | 126 | 126 | 93 | ✕ | 126 | 93 | ✕ |
| webdriver.bidi.session.unsubscribe.contexts_parameter | 126 | 126 | 93 | ✕ | 126 | 93 | ✕ |
| webdriver.bidi.session.unsubscribe.events_parameter | 126 | 126 | 93 | ✕ | 126 | 93 | ✕ |
| webdriver.bidi.session.unsubscribe.subscriptions_parameter | 126 | 126 | 136 | ✕ | 126 | 136 | ✕ |