Skip to content

Commit 259517e

Browse files
authored
Merge pull request #71 from gemini-testing/TESTPLANE-492.support-bidi
docs: add info about support bidi protocol
2 parents 1048135 + eead831 commit 259517e

6 files changed

Lines changed: 290 additions & 0 deletions

File tree

blog/support-bidi-protocol.mdx

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
---
2+
title: Поддержка WebDriver BiDi протокола
3+
slug: support-bidi-protocol
4+
hide_table_of_contents: false
5+
date: 2025-05-06T14:00
6+
---
7+
8+
import Admonition from "@theme/Admonition";
9+
import mockNetworkRequestExampleUrl from "/video/blog/bidi/mock-network-request-example.mp4";
10+
import networkResponsesExampleUrl from "/video/blog/bidi/network-responses-example.mp4";
11+
import browserLogsExampleUrl from "/video/blog/bidi/browser-logs-example.mp4";
12+
import screenFullPageExampleUrl from "/video/blog/bidi/screen-full-page-example.mp4";
13+
14+
В [testplane@8.27.0][testplane@8.27.0] добавлена поддержка [WebDriver BiDi протокола][bidi] (будущий единый стандарт для автоматизации браузеров).
15+
16+
<!-- truncate -->
17+
18+
WebDriver BiDi (Bidirectional) это новый протокол кросс-браузерной автоматизации, который сочетает в себе лучшее из существующих протоколов: [W3C WebDriver][webdriver] и [Chrome DevTools Protocol (CDP)][cdp] (подробнее о них можно почитать в нашей [статье][webvider-vs-cdp]). По сути новый протокол расширяет существующий
19+
W3C Webdriver протокол и добавляет в него новые кросс-браузерные команды, которые заменяют CDP протокол (не является кросс-браузерным). Старые webdriver-команды работают как и раньше по http, а новые команды обеспечивают двунаправленную коммуникацию между клиентом и браузером по websocket соединению.
20+
21+
Новый протокол на данный момент поддержан следующими браузерами: Chrome, Firefox, Edge. В safari поддержки пока нет. Следить за поддерживаемыми браузерами можно на этой [странице][bidi-browsers-support].
22+
23+
Список команд BiDi протокола доступен на этой [странице][bidi-commands].
24+
25+
### Как использовать?
26+
27+
<Admonition type="warning">
28+
В Testplane поддержка BiDi протокола доступна в браузерах начиная с версии: chrome@128 и
29+
firefox@129.
30+
</Admonition>
31+
32+
Для использования BiDi протокола необходимо:
33+
34+
- установить testplane@8.27.0 или старше;
35+
- указать капабилити `webSocketUrl: true` в поле `desiredCapabilities` для необходимого браузера (в следующей мажорной версии будет выставляться по умолчанию);
36+
- запустить тесты.
37+
38+
### Что можно сделать с помощью нового протокола?
39+
40+
#### Отслеживание и перехват сетевых запросов/ответов
41+
42+
1. Можно замокать запрос к testplane.io и вернуть свой ответ:
43+
44+
```typescript
45+
it("should mock testplane.io", async ({ browser }) => {
46+
await browser.networkAddIntercept({ phases: ["beforeRequestSent"] });
47+
48+
browser.on("network.beforeRequestSent", networkRequest => {
49+
browser.networkProvideResponse({
50+
request: networkRequest.request.request,
51+
body: {
52+
type: "string",
53+
value: "hello world",
54+
},
55+
});
56+
});
57+
58+
await browser.url("https://testplane.io");
59+
});
60+
```
61+
62+
<video src={mockNetworkRequestExampleUrl} width="100%" controls="controls">
63+
Тег video не поддерживается вашим браузером.
64+
<a href="video/blog/bidi/mock-network-request-example.mp4">Скачайте видео</a>.
65+
</video>
66+
67+
2. Перехватим все запросы к ресурсу testplane.io и отобразим список всех загружаемых урлов:
68+
69+
```typescript
70+
it("should log all loaded urls", async ({ browser }) => {
71+
browser.on("network.responseCompleted", networkResponse =>
72+
console.log("got response from url:", networkResponse.response.url),
73+
);
74+
75+
await browser.url("https://testplane.io");
76+
});
77+
```
78+
79+
<video src={networkResponsesExampleUrl} width="100%" controls="controls">
80+
Тег video не поддерживается вашим браузером.
81+
<a href="video/blog/bidi/network-responses-example.mp4">Скачайте видео</a>.
82+
</video>
83+
84+
#### Отображение логов в браузере
85+
86+
```typescript
87+
it("should show browser console logs", async ({ browser }) => {
88+
browser.on("log.entryAdded", entryAdded => console.log(JSON.stringify(entryAdded, null, 4)));
89+
90+
await browser.execute(() => console.log("Hello Bidi"));
91+
});
92+
```
93+
94+
<video src={browserLogsExampleUrl} width="100%" controls="controls">
95+
Тег video не поддерживается вашим браузером.
96+
<a href="video/blog/bidi/browser-logs-example.mp4">Скачайте видео</a>.
97+
</video>
98+
99+
#### Снятие скриншота всей страницы
100+
101+
```typescript
102+
import * as fs from "node:fs";
103+
104+
it("should screen full page", async ({ browser }) => {
105+
await browser.url("https://www.npmjs.com/");
106+
107+
const tree = await browser.browsingContextGetTree({});
108+
const file = await browser.browsingContextCaptureScreenshot({
109+
context: tree.contexts[0].context,
110+
origin: "document",
111+
});
112+
113+
fs.writeFileSync("screenshot.png", Buffer.from(file.data, "base64"));
114+
});
115+
```
116+
117+
<video src={screenFullPageExampleUrl} width="100%" controls="controls">
118+
Тег video не поддерживается вашим браузером.
119+
<a href="video/blog/bidi/screen-full-page-example.mp4">Скачайте видео</a>.
120+
</video>
121+
122+
### Заключение
123+
124+
Хотя протокол BiDi все еще находится в [Editor's Draft][editors-draft], но уже очевидно, что за этим протоколом будущее. Так например браузер firefox уже объявил о том, что [прекращает поддержку CDP протокола с версии 129][ff-deprecate-cdp].
125+
126+
Поддержка протокола BiDi позволяет нашим пользователям:
127+
128+
- использовать больше возможностей для автоматизации тестов, которых не было в WebDriver протоколе;
129+
- возможность отказаться от использования [Puppeteer][puppeteer] (используются под капотом для поддержки CDP протокола), который по нашему опыту приводит к множеству проблем в тестах;
130+
- идти в ногу со временем и уже начинать привыкать к будущему единому стандарту.
131+
132+
Переходите на новую версию Testplane и приносите фидбек. В случае обнаружения проблем приходите в [issue github][gh-issues] — мы вам обязательно поможем!
133+
134+
[testplane@8.27.0]: https://github.com/gemini-testing/testplane/releases/tag/v8.27.0
135+
[bidi]: https://w3c.github.io/webdriver-bidi/
136+
[webdriver]: https://www.w3.org/TR/webdriver1/
137+
[cdp]: https://chromedevtools.github.io/devtools-protocol/
138+
[webvider-vs-cdp]: https://testplane.io/ru/docs/v8/reference/webdriver-vs-cdp/
139+
[bidi-browsers-support]: https://wpt.fyi/results/webdriver/tests/bidi?label=master&label=stable&aligned
140+
[bidi-commands]: https://webdriver.io/docs/api/webdriverBidi
141+
[editors-draft]: https://www.w3.org/standards/types/#ED
142+
[ff-deprecate-cdp]: https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/
143+
[puppeteer]: https://pptr.dev/
144+
[gh-issues]: https://github.com/gemini-testing/testplane/issues
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
---
2+
title: WebDriver BiDi protocol support
3+
slug: support-bidi-protocol
4+
hide_table_of_contents: false
5+
date: 2025-05-06T14:00
6+
---
7+
8+
import Admonition from "@theme/Admonition";
9+
import mockNetworkRequestExampleUrl from "/video/blog/bidi/mock-network-request-example.mp4";
10+
import networkResponsesExampleUrl from "/video/blog/bidi/network-responses-example.mp4";
11+
import browserLogsExampleUrl from "/video/blog/bidi/browser-logs-example.mp4";
12+
import screenFullPageExampleUrl from "/video/blog/bidi/screen-full-page-example.mp4";
13+
14+
Support for the [WebDriver BiDi protocol][bidi] (the future unified standard for browser automation) has been added in [testplane@8.27.0][testplane@8.27.0].
15+
16+
<!-- truncate -->
17+
18+
WebDriver BiDi (Bidirectional) is a new cross-browser automation protocol that combines the best features of existing protocols: [W3C WebDriver][webdriver] and [Chrome DevTools Protocol (CDP)][cdp] (you can read more about them in our [article][webvider-vs-cdp]).
19+
Essentially, the new protocol extends the existing W3C WebDriver protocol and adds new cross-browser commands that replace the CDP protocol (which is not cross-browser compatible).
20+
Old webdriver commands still work via HTTP, while new commands provide bidirectional communication between the client and the browser via a WebSocket connection.
21+
22+
The new protocol is currently supported by the following browsers: Chrome, Firefox, Edge. Safari support is not available yet. You can follow the supported browsers on this [page][bidi-browsers-support].
23+
24+
A list of BiDi protocol commands is available on this [page][bidi-commands].
25+
26+
### How to use?
27+
28+
<Admonition type="warning">
29+
BiDi protocol support in Testplane is available in browsers starting from version: chrome@128
30+
and firefox@129.
31+
</Admonition>
32+
33+
To use the BiDi protocol, you need to:
34+
35+
- install testplane@8.27.0 or older;
36+
- specify the capability `webSocketUrl: true` in the `desiredCapabilities` field for the desired browser (it will be set by default in the next major version);
37+
- run the tests.
38+
39+
### What can be done with the new protocol?
40+
41+
#### Tracking and intercepting network requests/responses
42+
43+
1. You can mock a request to testplane.io and return your own response:
44+
45+
```typescript
46+
it("should mock testplane.io", async ({ browser }) => {
47+
await browser.networkAddIntercept({ phases: ["beforeRequestSent"] });
48+
49+
browser.on("network.beforeRequestSent", networkRequest => {
50+
browser.networkProvideResponse({
51+
request: networkRequest.request.request,
52+
body: {
53+
type: "string",
54+
value: "hello world",
55+
},
56+
});
57+
});
58+
59+
await browser.url("https://testplane.io");
60+
});
61+
```
62+
63+
<video src={mockNetworkRequestExampleUrl} width="100%" controls="controls">
64+
Your browser does not support the video tag.
65+
<a href="video/blog/bidi/mock-network-request-example.mp4">Download the video</a>.
66+
</video>
67+
68+
2. We will intercept all requests to the testplane.io resource and display a list of all loaded URLs:
69+
70+
```typescript
71+
it("should log all loaded urls", async ({ browser }) => {
72+
browser.on("network.responseCompleted", networkResponse =>
73+
console.log("got response from url:", networkResponse.response.url),
74+
);
75+
76+
await browser.url("https://testplane.io");
77+
});
78+
```
79+
80+
<video src={networkResponsesExampleUrl} width="100%" controls="controls">
81+
Your browser does not support the video tag.
82+
<a href="video/blog/bidi/network-responses-example.mp4">Download the video</a>.
83+
</video>
84+
85+
#### Displaying logs in the browser
86+
87+
```typescript
88+
it("should show browser console logs", async ({ browser }) => {
89+
browser.on("log.entryAdded", entryAdded => console.log(JSON.stringify(entryAdded, null, 4)));
90+
91+
await browser.execute(() => console.log("Hello Bidi"));
92+
});
93+
```
94+
95+
<video src={browserLogsExampleUrl} width="100%" controls="controls">
96+
Your browser does not support the video tag.
97+
<a href="video/blog/bidi/browser-logs-example.mp4">Download the video</a>.
98+
</video>
99+
100+
#### Taking a screenshot of the entire page
101+
102+
```typescript
103+
import * as fs from "node:fs";
104+
105+
it("should screen full page", async ({ browser }) => {
106+
await browser.url("https://www.npmjs.com/");
107+
108+
const tree = await browser.browsingContextGetTree({});
109+
const file = await browser.browsingContextCaptureScreenshot({
110+
context: tree.contexts[0].context,
111+
origin: "document",
112+
});
113+
114+
fs.writeFileSync("screenshot.png", Buffer.from(file.data, "base64"));
115+
});
116+
```
117+
118+
<video src={screenFullPageExampleUrl} width="100%" controls="controls">
119+
Your browser does not support the video tag.
120+
<a href="video/blog/bidi/screen-full-page-example.mp4">Download the video</a>.
121+
</video>
122+
123+
### Conclusion
124+
125+
While the BiDi protocol remains in the [Editor's Draft][editors-draft] stage, its potential as the future standard is already clear.
126+
Major browsers like Firefox have taken decisive steps toward adoption, [announcing the deprecation of CDP protocol support starting in version 129][ff-deprecate-cdp].
127+
128+
By embracing BiDi protocol support, we're empowering our users with:
129+
130+
- enhanced test automation capabilities beyond what WebDriver could offer;
131+
- freedom from Puppeteer dependencies - eliminating the instability issues we've consistently observed in CDP-based implementations;
132+
- Future-proof testing infrastructure by aligning with emerging industry standards
133+
134+
We encourage you to upgrade to the latest Testplane version and share your experience. Should you encounter any challenges, our team is ready to assist through [GitHub issue][gh-issues] - just create a ticket and we'll help resolve it promptly!
135+
136+
[testplane@8.27.0]: https://github.com/gemini-testing/testplane/releases/tag/v8.27.0
137+
[bidi]: https://w3c.github.io/webdriver-bidi/
138+
[webdriver]: https://www.w3.org/TR/webdriver1/
139+
[cdp]: https://chromedevtools.github.io/devtools-protocol/
140+
[webvider-vs-cdp]: https://testplane.io/ru/docs/v8/reference/webdriver-vs-cdp/
141+
[bidi-browsers-support]: https://wpt.fyi/results/webdriver/tests/bidi?label=master&label=stable&aligned
142+
[bidi-commands]: https://webdriver.io/docs/api/webdriverBidi
143+
[editors-draft]: https://www.w3.org/standards/types/#ED
144+
[ff-deprecate-cdp]: https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/
145+
[puppeteer]: https://pptr.dev/
146+
[gh-issues]: https://github.com/gemini-testing/testplane/issues
1.12 MB
Binary file not shown.
714 KB
Binary file not shown.
5.62 MB
Binary file not shown.
1.1 MB
Binary file not shown.

0 commit comments

Comments
 (0)