Feature and motivation
Every binding has BiDi tests, and most have tests that run against a Grid server, but no binding runs BiDi tests through Grid. So the path where a client speaks BiDi over Grid's websocket proxy (/session/<id>/se/bidi) has no automated coverage in any language, even though the Grid side has supported it for a long time.
The server side works: LocalNode rewrites the returned webSocketUrl to ws://<grid>/session/<id>/se/bidi, keeps the node's real socket as se:gridWebSocketUrl, and ProxyNodeWebsockets.findBiDiEndpoint tunnels it. Node enable-bidi defaults to true.
Verified per binding:
| Binding |
Status |
| Python |
Now covered. test-<browser>-remote-bidi targets added for chrome and firefox |
| Java |
Not covered β BIDI_BROWSERS in java/defs.bzl is chrome/chrome-beta/edge/firefox/firefox-beta, no remote entry |
| Ruby |
Not covered β rb/spec/tests.bzl generates -remote and -bidi targets in separate branches, never combined |
| JavaScript |
Needs checking β there is a remote/*.js glob and a test/bidi/ directory; whether they intersect was not established |
| .NET |
Needs checking β there is a remote browser config (ActiveDriverConfig=Remote, tagged skip-rbe) and 29 BiDi test files, but whether the BiDi tests run under that config was not established |
Usage example
On the Python side this needed no client or conftest change at all β only a Bazel target combining the existing BiDi test sources with the existing Grid test wiring. The suite then passed with zero remote-specific failures across 26 targets on both chrome and firefox; the only two failures reproduced identically without Grid (a headless-Chromium window-focus artifact and a wheel-scroll timing flake, both since fixed).
That suggests the same is likely cheap for the other bindings, and that the coverage gap is a wiring oversight rather than a missing capability. Worth confirming per binding, since each has its own websocket client and the Python one, for example, does not forward ClientConfig auth/TLS settings onto the BiDi socket β a gap this kind of test would eventually expose.
Feature and motivation
Every binding has BiDi tests, and most have tests that run against a Grid server, but no binding runs BiDi tests through Grid. So the path where a client speaks BiDi over Grid's websocket proxy (
/session/<id>/se/bidi) has no automated coverage in any language, even though the Grid side has supported it for a long time.The server side works:
LocalNoderewrites the returnedwebSocketUrltows://<grid>/session/<id>/se/bidi, keeps the node's real socket asse:gridWebSocketUrl, andProxyNodeWebsockets.findBiDiEndpointtunnels it. Nodeenable-bididefaults to true.Verified per binding:
test-<browser>-remote-biditargets added for chrome and firefoxBIDI_BROWSERSinjava/defs.bzlis chrome/chrome-beta/edge/firefox/firefox-beta, noremoteentryrb/spec/tests.bzlgenerates-remoteand-biditargets in separate branches, never combinedremote/*.jsglob and atest/bidi/directory; whether they intersect was not establishedremotebrowser config (ActiveDriverConfig=Remote, taggedskip-rbe) and 29 BiDi test files, but whether the BiDi tests run under that config was not establishedUsage example
On the Python side this needed no client or conftest change at all β only a Bazel target combining the existing BiDi test sources with the existing Grid test wiring. The suite then passed with zero remote-specific failures across 26 targets on both chrome and firefox; the only two failures reproduced identically without Grid (a headless-Chromium window-focus artifact and a wheel-scroll timing flake, both since fixed).
That suggests the same is likely cheap for the other bindings, and that the coverage gap is a wiring oversight rather than a missing capability. Worth confirming per binding, since each has its own websocket client and the Python one, for example, does not forward
ClientConfigauth/TLS settings onto the BiDi socket β a gap this kind of test would eventually expose.