Поддержка WebDriver BiDi протокола
В testplane@8.27.0 добавлена поддержка WebDriver BiDi протокола (будущий единый стандарт для автоматизации браузеров).
WebDriver BiDi (Bidirectional) — это новый протокол кросс-браузерной автоматизации, который сочетает в себе лучшее из существующих протоколов: W3C WebDriver и Chrome DevTools Protocol (CDP) (подробнее о них можно почитать в нашей статье). По сути новый протокол расширяет существующий W3C Webdriver протокол и добавляет в него новые кросс-браузерные команды, которые заменяют CDP протокол (не является кросс-браузерным). Старые webdriver-команды работают как и раньше по http, а новые команды обеспечивают двунаправленную коммуникацию между клиентом и браузером по websocket соединению.
Новый протокол на данный момент поддержан следующими браузерами: Chrome, Firefox, Edge. В safari поддержки пока нет. Следить за поддерживаемыми браузерами можно на этой странице.
Список команд BiDi протокола доступен на этой странице.
Как использовать?
В Testplane поддержка BiDi протокола доступна в браузерах начиная с версии: chrome@128 и firefox@129.
Для использования BiDi протокола необходимо:
- установить testplane@8.27.0 или старше;
- указать капабилити
webSocketUrl: true
в полеdesiredCapabilities
для необходимого браузера (в следующей мажорной версии будет выставляться по умолчанию); - запустить тесты.
Что можно сделать с помощью нового протокола?
Отслеживание и перехват сетевых запросов/ответов
- Можно замокать запрос к testplane.io и вернуть свой ответ:
it("should mock testplane.io", async ({ browser }) => {
await browser.networkAddIntercept({ phases: ["beforeRequestSent"] });
browser.on("network.beforeRequestSent", networkRequest => {
browser.networkProvideResponse({
request: networkRequest.request.request,
body: {
type: "string",
value: "hello world",
},
});
});
await browser.url("https://testplane.io");
});
- Перехватим все запросы к ресурсу testplane.io и отобразим список всех загружаемых урлов:
it("should log all loaded urls", async ({ browser }) => {
browser.on("network.responseCompleted", networkResponse =>
console.log("got response from url:", networkResponse.response.url),
);
await browser.url("https://testplane.io");
});
Отображение логов в браузере
it("should show browser console logs", async ({ browser }) => {
browser.on("log.entryAdded", entryAdded => console.log(JSON.stringify(entryAdded, null, 4)));
await browser.execute(() => console.log("Hello Bidi"));
});
Снятие скриншота всей страницы
import * as fs from "node:fs";
it("should screen full page", async ({ browser }) => {
await browser.url("https://www.npmjs.com/");
const tree = await browser.browsingContextGetTree({});
const file = await browser.browsingContextCaptureScreenshot({
context: tree.contexts[0].context,
origin: "document",
});
fs.writeFileSync("screenshot.png", Buffer.from(file.data, "base64"));
});
Заключение
Хотя протокол BiDi все еще находится в Editor's Draft, но уже очевидно, что за этим протоколом будущее. Так например браузер firefox уже объявил о том, что прекращает поддержку CDP протокола с версии 129.
Поддержка протокола BiDi позволяет нашим пользователям:
- использовать больше возможностей для автоматизации тестов, которых не было в WebDriver протоколе;
- возможность отказаться от использования Puppeteer (используются под капотом для поддержки CDP протокола), который по нашему опыту приводит к множеству проблем в тестах;
- идти в ногу со временем и уже начинать привыкать к будущему единому стандарту.
Переходите на новую версию Testplane и приносите фидбек. В случае обнаружения проблем приходите в issue github — мы вам обязательно поможем!