Назад в Центр знаний
Сравнение

WebDriver vs CDP: возможности подключений

Выбирайте WebDriver, BiDi или CDP по операции, поддержке клиента и ограничениям фактического подключения к браузеру.

BotBrowser Team

WebDriver vs CDP: возможности подключений
Документация

Нужна структурированная документация по теме Документация?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Выбор WebDriver или CDP становится конкретным, когда тесту нужна определённая команда или событие. BotBrowser предоставляет документированные интеграции автоматизации, но не гарантирует наличие отсутствующих операций клиента и не выбирает подключение для suite.

Команды WebDriver, события BiDi и домены CDP требуют проверки браузера, драйвера и клиента.

TL;DR

WebDriver, WebDriver BiDi и Chrome DevTools Protocol (CDP) задают разные протокольные контракты. Выбирайте по нужной операции, затем проверяйте поддержку браузера, драйвера, библиотеки и режима подключения. Selenium может предоставлять классический WebDriver, BiDi и CDP; название библиотеки не определяет активный протокол.

Содержание

Библиотека не равна протоколу

Фраза «WebDriver vs CDP» выглядит как выбор из двух вариантов, но объединяет несколько решений. WebDriver это стандарт W3C для управления пользовательским агентом через удалённую сторону. WebDriver BiDi это отдельный протокол W3C для двунаправленных команд и событий. CDP это протокол DevTools в Chromium с доменами браузера и JavaScript. Клиентская библиотека образует ещё один слой: она может предоставлять один протокол, несколько протоколов или собственное подключение framework.

Полезный вопрос звучит не «какой протокол видит больше?», а «какое поддерживаемое подключение предоставляет нужную операцию с требуемой семантикой и переносимостью?». Для нажатия кнопки и проверки заголовка может хватить стандартных команд WebDriver. Для регистрации сетевых событий может понадобиться BiDi либо подключение CDP, зависящее от браузера. Ни один пример не делает вариант лучшим для всех задач.

Selenium документирует классический WebDriver, API BiDi и примеры CDP. На странице поддержки CDP эта поддержка названа временной до реализации WebDriver BiDi. Playwright предоставляет собственное подключение и отдельное подключение CDP для Chromium, которое документация описывает как менее полное. Поэтому слов «используем Selenium» или «используем Playwright» недостаточно. После выбора BiDi настройку подписок описывает жизненный цикл событий WebDriver BiDi; смену framework рассматривает отдельная схема миграции с Selenium.

Карта возможностей

Таблица показывает семейства операций в протоколах, а не гарантирует их наличие у каждого браузера и клиента. Определение команды или события в схеме это только основание проверить поддержку конкретной реализации и версии.

ЗадачаКлассический WebDriverWebDriver BiDiCDPЧто проверить
Найти элемент, нажать, ввести текст, перейтиСтандартные команды элементов и контекстов просмотраКоманды контекстов определены, поддержка клиента различаетсяДомены Page и DOM предоставляют управление ChromiumСемантику локаторов, контекст и команды выбранного клиента
Прочитать консольНе универсальный поток событий классического контрактаМодуль log определяет событияRuntime и Log предоставляют события консолиВключённое событие, идентификатор контекста, сохранение аргументов
Наблюдать сетьНе универсальный поток сетевых событийМодуль network определяет события запросов и ответовNetwork.enable включает отслеживание и события сетиПолноту событий, сохранение тел, удаление секретов, драйвер и браузер
Выполнить JavaScript страницыВыполнение скриптов входит в командыОперации скриптов адресуются realms и контекстамRuntime.evaluate вычисляет выражение на глобальном объектеRealm, разрешения, CSP, возврат значения и сериализацию
Изменить user-agent или размеры устройстваНастройка сессии через capabilities и параметры браузера, без универсального динамического переопределенияНе гарантирует одинаковые специфичные переопределения во всех браузерахNetwork.setUserAgentOverride и переопределение размеров в домене эмуляцииСогласованность метаданных и неизменённые поверхности
Изменить разрешениеМожет требовать специфичного параметра или API браузераЗависит от определённой команды и реализацииBrowser.setPermission отмечен как experimentalНазвание разрешения, origin, контекст, экспериментальный статус

Это карта поиска, а не оценка протоколов. Сильная сторона классического WebDriver это стандартизированная поверхность управления для разных реализаций. BiDi добавляет описанную спецификацией двунаправленную модель событий. CDP предоставляет ориентированные на Chromium домены для отладки и управления. Удобная обёртка библиотеки не превращает эти методы в межбраузерную гарантию.

У команд различается и стабильность. Метод может быть экспериментальным, необязательным, отсутствующим в браузере либо иначе представленным старым драйвером. Успешное создание сессии доказывает только создание сессии, а не поддержку всех последующих действий. В примере разрешений экспериментальный статус указан явно. Для сетевых событий CDP сначала требуется включить соответствующий домен.

Выбор по операции

Начните со списка операций и необходимых доказательств, а не с предпочтения протокола. Название метода, который уже есть в библиотеке, не заменяет описание потребности теста.

Формулировка «нужно больше наблюдаемости» недостаточно точна. Укажите недостающую запись: сообщение консоли, статус ответа, состояние разрешения, размер окна или видимый результат. Затем определите минимальное условие, подтверждающее получение этой записи. Большая поверхность протокола полезна только тогда, когда нужная команда доступна в фактическом окружении и её результат отвечает на вопрос теста. Более длинный список доменов сам по себе не обосновывает переход на нижний уровень.

ПотребностьПервый вариант для проверкиУсловие
Переносимая навигация и взаимодействие с элементамиКлассический WebDriver либо документированное собственное подключение frameworkПодтвердить браузеры и семантику команд
События во время выполнения командWebDriver BiDiПроверить модуль, область подписки и реализацию драйвера
Детали сети Chromium или его специальная эмуляцияCDPЗафиксировать Chromium и клиент; явно сохранить зависимость
Изменить Selenium suite без смены frameworkСначала оставить WebDriver, добавлять BiDi или CDP для конкретного пробелаПротокол меняет события, время доставки и диагностические артефакты
Одна suite на разных движкахСтандартный путь, если он решает задачуПодключение Chromium CDP не доказывает эквивалентность Firefox или WebKit

Предположим, тест проверяет страницу подтверждения и сохраняет статус неуспешного запроса. Видимая проверка относится к пользовательскому сценарию. Сетевое событие помогает объяснить сбой, но получение ответа не доказывает, что приложение показало успех. BiDi или CDP дополняют семантическую проверку, не заменяя её. Если нужен только Chromium, CDP может предоставлять операцию, которой ещё нет в API BiDi выбранного драйвера. Зафиксируйте эту зависимость вместо утверждения о независимости теста от протокола.

Тот же принцип действует для JavaScript. В WebDriver есть выполнение скриптов, BiDi задаёт realms и операции вычисления, CDP предоставляет Runtime.evaluate. Это не означает одинаковые правила выбора realm, сериализации, времени жизни и ошибок. Если проверка зависит от глобальной переменной, укажите владеющий ею контекст и способ возврата значения клиентом.

Для результата скрипта запишите, где он выполнялся: в основном документе, дочернем frame или изолированном мире. Корректное выражение в другом frame может вернуть правдоподобное, но нерелевантное значение. Отделяйте исключение страницы от ошибки транспорта и ошибки сериализации клиента. Если между отправкой команды и ответом произошла навигация, условия вычисления могли измениться. Привяжите запись к контексту или realm, когда протокол предоставляет идентификатор, и явно обработайте исчезновение этого контекста.

Возможность изменить поле не означает эквивалентность устройства. Переопределение размеров меняет выбранные значения viewport и экрана, но не воспроизводит графическую подсистему, установленные шрифты, устройства ввода и все мультимедийные функции. Изменение user-agent также не согласует автоматически client hints и каждую поверхность документа. Называйте измеренное поле и различия за пределами операции.

В карте возможностей нужна цена переносимости. Для теста только на Chromium зависимость CDP может быть разумным явным решением. Для нескольких движков сначала проверьте, достаточно ли стандартных операций WebDriver или BiDi. Не дублируйте проверку в двух протоколах, если дополнительное наблюдение не может выявить реальную регрессию: иначе растут затраты сопровождения, а не объём доказательств.

Если в другом браузере нет эквивалентного пути, отметьте ячейку как unsupported или unverified. Не меняйте смысл проверки незаметно. Резервный путь допустим, если наблюдает тот же пользовательский результат; похожее название поля не устанавливает эквивалентность. Событие консоли и видимая ошибка это разные доказательства. Храните рядом результат, способ сбора и правило резервного пути, чтобы следующий читатель понимал, что именно установлено.

Проверка фактического подключения

Перед добавлением протокольной операции запишите четыре факта: браузер и версию, драйвер или удалённый endpoint, клиентскую библиотеку с версией и способ подключения. «Selenium с Chrome» недостаточно. «Selenium 4, закреплённый Chrome, локальный ChromeDriver, подключение BiDi для network.responseCompleted» можно проверить. Для CDP также укажите, запустила ли библиотека браузер сама или подключилась к существующему процессу.

Держите эти сведения рядом с конфигурацией теста. Обновление пакета может изменить endpoint или значения по умолчанию, хотя исходный сценарий остался прежним. При создании сессии CI должен показывать эффективную версию браузера и режим подключения. Если браузер предоставляет удалённый сервис, сохраняйте объявленные capabilities и принятые параметры. Запрошенный параметр не доказывает, что удалённая сторона его применила: это подтверждается ответом сессии или прямым наблюдением.

Перед полным сценарием выполните ограниченную проверку:

  1. Создайте новую сессию тем же способом, что и в CI.
  2. Выполните минимальную нужную команду или подпишитесь на нужное событие.
  3. Сохраните capabilities, ответ команды и ошибки неподдерживаемых операций.
  4. Вызовите запрос или сообщение консоли на своей fixture, проверьте событие и контекст.
  5. Завершите сессию и проверьте очистку обработчиков, процессов и состояния fixture.

Не выводите поддержку только из страницы спецификации. Схема отвечает на вопрос, определены ли команда и событие. Браузер, драйвер, сервис и клиент определяют доступность в конкретном запуске. Для воспроизводимости закрепляйте версию схемы либо ссылку на релиз. CDP viewer «tot» и JSON в ветке master меняются со временем.

Отделяйте запись результата от вывода, который она подтверждает:

browser=Chrome <pinned version>
client=Selenium <pinned version>
connection=WebDriver BiDi
operation=subscribe to network.responseCompleted
result=subscription acknowledged; one fixture response observed
scope=owned local fixture, one browsing context
not established=all browsers support this event identically

Замените заполнители реальным окружением, прежде чем считать запись доказательством. Неуспешная подписка это результат для этой комбинации версий, а не доказательство отсутствия функции в BiDi. Если событие доставлено, но проверка страницы не прошла, сохраните оба исхода раздельно. Протокольная трасса объясняет тест, но не определяет успешность пользовательского сценария.

Повторяйте проверку, меняя один компонент за раз. Сначала оставьте браузер и замените клиент или драйвер. Затем восстановите клиент и измените версию браузера. Это помогает определить источник изменения поддержки. Одновременная смена удалённого сервиса добавляет другие переменные: версию бинарного файла, сетевой переход, владельца сессии и протокольный мост. Краткий журнал изменений полезнее общей записи «у меня работает».

Для событий ограничьте подписку нужным типом и контекстом, задайте предел сохраняемых записей и удалите обработчики при завершении. Сетевая трасса и консоль могут содержать URL, заголовки, текст страницы и пользовательские данные. Протокол не задаёт политику хранения. Удаляйте секретные значения до записи артефактов, сохраняя только метаданные, необходимые для связи события с шагом теста.

Для команд сохраняйте имя или идентификатор, категорию ответа и последующее состояние страницы. Подтверждение команды означает принятие удалённой стороной, но не обязательно видимый ожидаемый результат. Дождитесь семантического условия, например появления области подтверждения, а детали протокола оставьте диагностикой. При timeout различайте отсутствие протокольного ответа и отсутствие результата страницы: восстановление для них может быть разным.

Ядро браузера находится ниже

Протоколы предоставляют операции и наблюдения, но не определяют каждое значение, которое создаёт движок. Скрипт читает DOM, событие сообщает о запросе, а результат рендеринга продолжает зависеть от шрифтов, графического backend, версии браузера, ОС и профиля. Изменение эмулируемого значения не меняет автоматически все связанные поверхности. Протокольный слой и ядро отвечают на разные вопросы.

BotBrowser предоставляет документированные интеграции автоматизации, но не переводит команды WebDriver в CDP, не реализует отсутствующее событие BiDi в клиенте и не гарантирует паритет режимов. В справке по согласованности автоматизации описана граница браузера, а не матрица соответствия протоколам. Браузер можно оставить постоянным при оценке подключения, однако точную клиентскую операцию всё равно нужно проверить. При расхождении отдельно рассматривайте запрос команды, поддержку протокола, преобразование клиента и окружение браузера.

Не превращайте сравнение протоколов в вывод об идентичности. Чтение значения JavaScript или его изменение командой не доказывает, что другая система выведет из всей сессии. Оно не устанавливает наличие такой же команды в другом движке. Ограничьте вывод записанными браузером, подключением, операцией и fixture.

Протокол это лишь часть окружения. Клиент может добавлять значения по умолчанию, драйвер преобразовывать вызовы, сервис управлять сессией, ядро создавать документ и изображение. Для неожиданного значения проверьте последовательно: отправлена ли нужная операция, принята ли endpoint, правильно ли клиент вернул результат, достигнуто ли ожидаемое состояние страницы. Такой порядок не обвиняет слой заранее и не подменяет доказательство его названием.

Если два подключения вернули одинаковое значение DOM, это показывает равенство только этого значения в данном запуске. Порядок событий, обработка ошибок, время выполнения и неподдерживаемые операции могут различаться. Для эквивалентности перечислите нужные операции и сравните результаты в контролируемых условиях. Если нужна лишь надёжная проверка, выбирайте наиболее узкий поддерживаемый путь и проверяйте пользовательский результат.

Вопросы и ответы

CDP и WebDriver это одно и то же?

Нет. CDP это DevTools-протокол Chromium. WebDriver это стандарт управления браузером W3C, а у WebDriver BiDi отдельная спецификация. Библиотека может предоставлять несколько путей; проверяйте режим подключения, а не угадывайте по названию пакета.

Selenium использует только WebDriver?

Нет. Основной API это WebDriver, но Selenium также документирует BiDi и CDP. Поддержка CDP описана как временная на период реализации BiDi. Доступность зависит от версий Selenium, браузера и драйвера.

CDP лучше для любой задачи?

Такой вывод слишком широк. В CDP есть специфичные команды Chromium, полезные для отдельных тестов, а WebDriver и BiDi задают стандартизированные контракты. Сравнивайте точную операцию, поддержку закреплённого окружения и цену переносимости.

Делает ли эмуляция Chrome headless эквивалентом телефона?

Нет. Команда меняет указанные параметры, но не воспроизводит все сенсоры, шрифты, GPU, кодеки, устройства ввода и поведение ОС. Разделяйте эмулируемые значения и не воспроизведённое окружение.

Можно полагаться на команду, указанную в схеме?

Только после проверки реализации. Схема доказывает определение метода, но не поддержку в выбранной версии браузера, драйвера, сервиса или клиента. Проверьте его ограниченным тестом в режиме подключения CI.

Источники

Практический вывод

Выбирайте от операции: назовите команду или событие, подтвердите поддержку браузера, клиента и драйвера, запишите версии и режим, затем сохраните семантическую проверку пользовательского результата. WebDriver подходит для поддерживаемых стандартных взаимодействий, BiDi подходит для реализованного контракта событий, CDP подходит для операции Chromium, оправдывающей зависимость. Протокол, библиотека и окружение должны быть отдельными строками записи; ни одна не заменяет проверку остальных.

#WebDriver#Chrome DevTools Protocol#WebDriver BiDi#Автоматизация Браузера

Выполните ту же проверку в BotBrowser

Загрузите профиль, сохраните внутри браузера те сигналы, о которых только что прочитали, и подтвердите результат на своей машине до раскатки.