Эволюция: От Selenium к WebDriver BiDi
Updated Jul 2026
Хронология
2004 ──── Selenium 1.0 (JavaScript injection)
│
2011 ──── Selenium 2.0 / WebDriver (HTTP + JSON)
│
2017 ──── Chrome DevTools Protocol (CDP) gains traction
│ Puppeteer launches (CDP-based)
│
2018 ──── WebDriver becomes W3C standard
│
2020 ──── Playwright launches (CDP-based, multi-browser)
│
2021 ──── WebDriver BiDi work begins at W3C
│
2023 ──── Puppeteer adds BiDi support
│
2024 ──── Selenium 4 integrates BiDi
│
2025 ──── Vibium launches (BiDi-native)
│ Playwright MCP server ships
│
2026 ──── BiDi ecosystem matures
CLI + Skills pattern emerges for AI agents
Интересный факт: Vibium создан тем же человеком, который создал Selenium (2004) и Appium (2012).
Эра 1: Selenium и инъекция JavaScript (2004-2011)
Как это работало
Selenium инъектировал JavaScript в браузер для имитации действий пользователя. Java-сервер «Selenium RC» выступал прокси.
Test Script → Selenium RC Server → Injected JS in Browser
Проблемы
- Same-Origin Policy: JavaScript не мог пересекать доменные границы
- Безопасность браузера: Всё больше ограничений на то, что мог делать инъектированный JS
- Хрупкость: Зависимость от внутренних механизмов браузера, которые часто менялись
- Медленность: HTTP-обращения на каждое действие
Эра 2: WebDriver и нативные API браузера (2011-2017)
Как это работало
Каждый производитель браузера предоставлял бинарный «драйвер» (chromedriver, geckodriver), который использовал нативные API браузера для управления им. Коммуникация шла через HTTP + JSON.
Test Script ──HTTP──► ChromeDriver ──Native API──► Chrome
Протокол WebDriver (стандарт W3C, 2018)
POST /session → Create session
POST /session/{id}/url → Navigate
POST /session/{id}/element → Find element
POST /session/{id}/element/{id}/click → Click element
POST /session/{id}/element/{id}/value → Type text
GET /session/{id}/screenshot → Take screenshot
DELETE /session/{id} → Close session
Преимущества перед Selenium 1
- Нативное управление: Не нужна инъекция JavaScript
- Кросс-доменность: Нет ограничений same-origin
- Стандартизация: Стандарт W3C, все браузеры его реализуют
- Надёжность: Использование собственных API браузера
Ограничения
- Однонаправленность: Клиент спрашивает, браузер отвечает. Никаких событий.
- Крупнозернистость: Ограничен тем, что определяет спецификация
- Нет реального времени: Невозможно слушать логи консоли, сетевые события и т.д.
- Необходим опрос: Для обнаружения изменений на странице нужно постоянно спрашивать
Эра 3: Chrome DevTools Protocol — CDP (2017-настоящее время)
Как это работало
Chrome открыл свой интерфейс инструментов разработчика как WebSocket API. Puppeteer (Google) и Playwright (Microsoft) построили на этом.
Test Script ──WebSocket──► Chrome (DevTools)
Что CDP дал
// Bidirectional: Browser pushes events
{"method": "Console.messageAdded", "params": {"message": {"text": "error!"}}}
// Network interception
{"method": "Network.requestWillBeSent", "params": {"request": {"url": "..."}}}
// DOM manipulation
{"method": "DOM.getDocument", "params": {}}
// Performance profiling
{"method": "Performance.getMetrics", "params": {}}
Преимущества перед WebDriver
- Двунаправленность: События передаются из браузера клиенту
- Богатство: Сеть, производительность, DOM, покрытие, доступность
- Скорость: WebSocket имеет меньшие накладные расходы, чем HTTP
Проблемы
- Только Chrome: CDP — внутренний протокол Chrome
- Нестабильность: Google может изменить его без предупреждения (он «внутренний»)
- Специфичен для браузера: Playwright пришлось писать отдельные бэкенды для Firefox, WebKit
- Привязка к вендору: Ваши тесты зависят от протокола, контролируемого Google
Обходной путь Playwright
Playwright абстрагирует CDP (Chrome), модифицированный протокол Firefox и протокол отладки WebKit за единым API. Это впечатляющая инженерная работа, но создаёт бремя поддержки — Playwright должен отслеживать внутренние изменения в трёх браузерах.
Эра 4: WebDriver BiDi (2021-настоящее время)
Лучшее из двух миров
| Возможность | WebDriver | CDP | BiDi |
|---|---|---|---|
| Стандартизирован | W3C | Нет (внутренний Chrome) | W3C |
| Двунаправленный | Нет | Да | Да |
| Кросс-браузерный | Да | Нет (только Chrome) | Да |
| События | Нет | Да | Да |
| Транспорт | HTTP | WebSocket | WebSocket |
| Стабильность | Стабильный (стандарт) | Нестабильный (внутренний) | Стабильный (стандарт) |
Как BiDi решает проблемы CDP
- Стандартизирован W3C — Производители браузеров обязуются реализовать его
- Кросс-браузерный по дизайну — Chrome, Firefox, Safari, Edge участвуют
- Стабильный API-контракт — Изменения проходят через процесс стандартизации
- Та же мощность, что у CDP — События, сеть, скрипты, ввод
Текущая поддержка браузерами (2026)
| Браузер | Статус | Примечания |
|---|---|---|
| Chrome | Полная поддержка | Через chromedriver |
| Firefox | Полная поддержка | Нативная (без отдельного драйвера!) |
| Edge | Полная поддержка | На основе Chromium |
| Safari | Частичная | Улучшается с каждым релизом |
Где Vibium вписывается
Vibium нативно построен на BiDi с первого дня. Он не абстрагируется поверх CDP или устаревшего WebDriver — он говорит на BiDi напрямую.
Traditional stack: Vibium stack:
Test → Playwright → CDP Test → Vibium → BiDi
Playwright → Firefox (same protocol for all browsers)
Playwright → WebKit
Преимущества
- Нет абстракционных накладных расходов — BiDi — это протокол, а не уровень совместимости
- Защита от устаревания — По мере улучшения BiDi улучшается и Vibium
- Кросс-браузерный потенциал — Когда Safari завершит поддержку BiDi, Vibium будет работать там
- Простота — Один протокол, одна реализация, один бинарник
Компромисс
- BiDi новее, чем CDP — некоторые продвинутые функции (перехват сети, покрытие) ещё стандартизируются
- CDP в Chrome более функционален сегодня — но он не стандартизирован
- Подход Playwright на основе CDP даёт больше функций сейчас ценой зависимости от вендора
Влияние на стратегию автоматизации тестирования
Для архитекторов, выбирающих стек
| Если вам нужно... | Выберите | Почему |
|---|---|---|
| Максимум функций сейчас | Playwright (CDP) | Наиболее зрелый набор функций |
| Соответствие стандартам | Vibium (BiDi) | Стандарт W3C, вендор-нейтральный |
| Интеграция с ИИ-агентами | Vibium (skill) | Эффективный по токенам, нативный для агентов |
| Кросс-браузерное тестирование | На основе BiDi (долгосрочно) | Нативная кросс-браузерная поддержка |
| Корпоративная стабильность | Selenium 4 (миграция на BiDi) | Существующая экосистема + путь к BiDi |
Конвергенция
Все основные инструменты сходятся к BiDi:
- Selenium 4 добавляет поддержку BiDi
- Puppeteer имеет режим BiDi
- Playwright признаёт BiDi как направление будущего развития
- Vibium нативно построен на BiDi
В течение 2-3 лет BiDi, вероятно, станет доминирующим протоколом, делая спор CDP vs BiDi неактуальным.
Тезис для собеседования
«Автоматизация браузеров прошла через четыре эры. Selenium 1 использовал инъекцию JavaScript, WebDriver добавил нативные API браузера через HTTP, CDP принёс двунаправленную WebSocket-коммуникацию, но был специфичен для Chrome и нестабилен, а теперь WebDriver BiDi объединяет стандартизацию с двунаправленностью. Vibium выбрал строить на BiDi с первого дня, а не абстрагироваться поверх CDP — это означает один протокол, одну реализацию и нативную кросс-браузерную поддержку по мере того, как браузеры завершают свои реализации BiDi. Это тот же создатель, который начал Selenium в 2004 году, теперь строящий на протоколе, который является его преемником. Компромисс в том, что набор функций BiDi всё ещё догоняет CDP в некоторых областях, но траектория стандартов ясна.»