https://seleniumcamp.com/talk/webdriverio-puppeteer-double-gun-double-fun/
In the automation world, W3C Webdriver HTTP protocol has been successfully used for a long time. With its help, many projects and libraries in various languages have been implemented (selenide, protractor, webdriverio and thousands of others). But more and more teams decide to use Chrome Debug Protocol, in particular the Puppeteer tool. It is based on WebSockets, and has its own special features – two-way communication, ability to subscribe to events in the browser, and much more. In this talk, we will look at the capabilities of both protocols, experiment and combine them together in one project to make the browser work at full power, and take the best from both communication channels.
2. Александр Хотемской
• Software Development Engineer in Test
• Independent Contractor
• 8+ лет автоматизации тестирования и смежных
областях
• Основной стек технологий - JavaScript/TypeScript,
NodeJS
xotabu4.github.io
4. Что это?
• Это стандартизированный протокол управления
браузерами
• Можно управлять разными браузерами
одинаковыми командами
• Можно управлять браузером из разных языков
программирования
• Разработчики браузера если хотят быть
полностью w3c standarts compatible – должны
реализовать это API
9. Chrome DevTools
• Инструмент для разработчиков
• Включен в Chrome с самых первых версий
• Может практически полностью
контролировать что происходит в браузере
• Может инспектировать различные аспекты
работы страницы
• Может внедрятся и исполнять свои команды
в браузере
13. WebSockets
• Chrome Debug Protocol использует WebSockets
как транспорт
• Одно из основных отличий что WebSocket это
двухсторонний протокол передачи данных
• Быстрей чем HTTP
• Обе стороны могут инициировать отправку
данных, а не только клиент
14. Puppeteer
• JS библиотека
• Запускает и подключается к
браузеру и управляет им
через Chrome Debug Protocol
• Может скачивать Chromium
браузер автоматически
• По сути - высокоуровневая
клиентская библиотека для
работы с Chrome Debug
Protocol
19. Настройка
• Нужно запустить браузер с помощью WebDriver как
обычно, но с дополнительной capability --remote-
debugging-port=xxxx
• Перед стартом тестов - вызвать puppeteer.connect и
указать наш remote-debugging-port
• Присвоить созданный объект Browser (от puppeteer) в
глобальную переменную (опционально)
20.
21.
22. Возможности
• Обратная совместимость с существующими
тестами
• Дополнительные puppeteer команды теперь
доступны в тестах
• Когда важна скорость - можно выбирать быстрый
puppeteer клиент
• Для стабильности и максимальной эмуляции
пользователя - webdriver клиент
30. Selenoid + Webdriver + Puppeteer
• Selenoid (а также GGR) может
перенаправлять CDP запросы внутрь
контейнера с Chrome браузером
• Для этого нам нужно указать для
подключения URL формата:
ws://selenoid.example.com:4444/devtools/<ses
sion-id>
• Это позволяет использовать существующую
тестовую ферму для подключения и
webdriver и puppeteer
31.
32.
33.
34. Other browsers
• Есть поддержка Firefox в 2.1.0
• Есть инициатива -
compatibility.remotedebug.org - по
адаптации chrome debug protocol на
другие браузеры
• Потенциально это будет работать и
для нового Chromium-EDGE
• microsoft/playwright - новый проект,
основывается на наработках
puppeteer, поддерживает больше
браузеров, и имеет похожее API
WebdriverIO + Puppeteer. Double gun - double fun
В мире автоматизации давным-давно успешно используют W3C Webdriver HTTP протокол. С его помощью реализовано множество проектов и библиотек на различных языках (selenide, protractor, webdriverio и тысячи других). Но так же в последнее время все больше и больше команд решают использовать Chrome Debug Protocol, в частности инструмент Puppeteer. Он основан на WebSockets, и имеет свои особые возможности - двухсторонняя связь, возможность подписки на события в браузере, и многое другое. В этом докладе мы посмотрим возможности обоих протоколов, поэкспериментируем и совместим их вместе в одном проекте, чтобы заставить браузер работать на полную и взять лучшее от двух каналов связи.