SlideShare a Scribd company logo
Webdriver + Puppeteer
Double gun - double fun
Oleksandr Khotemskyi, 2020
xotabu4.github.io
Александр Хотемской
• Software Development Engineer in Test
• Independent Contractor
• 8+ лет автоматизации тестирования и смежных
областях
• Основной стек технологий - JavaScript/TypeScript,
NodeJS
xotabu4.github.io
WebDriver
W3C protocol
Что это и как работает?
Что это?
• Это стандартизированный протокол управления
браузерами
• Можно управлять разными браузерами
одинаковыми командами
• Можно управлять браузером из разных языков
программирования
• Разработчики браузера если хотят быть
полностью w3c standarts compatible – должны
реализовать это API
WebdriverIO + Puppeteer. Double gun – double fun
https://w3c.github.io/webdr
/
Your tests
code
Selenoid Servers
Load Balancer Server
(GGR)
Selenium Server on Mac OS
X
Chrome Debug
Protocol
Что это и как работает?
Chrome DevTools
• Инструмент для разработчиков
• Включен в Chrome с самых первых версий
• Может практически полностью
контролировать что происходит в браузере
• Может инспектировать различные аспекты
работы страницы
• Может внедрятся и исполнять свои команды
в браузере
https://code.visualstudio.com/blogs/2016/02/23/introducing-chrome-debugger-for-vs-code
https://chromedevtools.github.io/devtools-protocol/tot/Input/#method-dispatchMouseEvent
WebdriverIO + Puppeteer. Double gun – double fun
WebSockets
• Chrome Debug Protocol использует WebSockets
как транспорт
• Одно из основных отличий что WebSocket это
двухсторонний протокол передачи данных
• Быстрей чем HTTP
• Обе стороны могут инициировать отправку
данных, а не только клиент
Puppeteer
• JS библиотека
• Запускает и подключается к
браузеру и управляет им
через Chrome Debug Protocol
• Может скачивать Chromium
браузер автоматически
• По сути - высокоуровневая
клиентская библиотека для
работы с Chrome Debug
Protocol
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
WebDriver + CDP
Chrome
NodeJS
ChromeDriver
Web Server
WebApplication
HTTP (W3C WebDriver)
PuppeteerWebdriver
HTTP WebSocket
WebSocket (CDP)
WebSocket (CDP)
Настройка
• Нужно запустить браузер с помощью WebDriver как
обычно, но с дополнительной capability --remote-
debugging-port=xxxx
• Перед стартом тестов - вызвать puppeteer.connect и
указать наш remote-debugging-port
• Присвоить созданный объект Browser (от puppeteer) в
глобальную переменную (опционально)
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
Возможности
• Обратная совместимость с существующими
тестами
• Дополнительные puppeteer команды теперь
доступны в тестах
• Когда важна скорость - можно выбирать быстрый
puppeteer клиент
• Для стабильности и максимальной эмуляции
пользователя - webdriver клиент
CSS and JS code coverage
CSS and JS code coverage
WebdriverIO + Puppeteer. Double gun – double fun
File upload handling
Browser and Page events
Browser and Page events
Custom events
https://stackoverflow.com/questions/47107465/puppeteer-how-to-listen-to-object-events
Selenoid + Webdriver + Puppeteer
• Selenoid (а также GGR) может
перенаправлять CDP запросы внутрь
контейнера с Chrome браузером
• Для этого нам нужно указать для
подключения URL формата:
ws://selenoid.example.com:4444/devtools/<ses
sion-id>
• Это позволяет использовать существующую
тестовую ферму для подключения и
webdriver и puppeteer
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
Other browsers
• Есть поддержка Firefox в 2.1.0
• Есть инициатива -
compatibility.remotedebug.org - по
адаптации chrome debug protocol на
другие браузеры
• Потенциально это будет работать и
для нового Chromium-EDGE
• microsoft/playwright - новый проект,
основывается на наработках
puppeteer, поддерживает больше
браузеров, и имеет похожее API
xotabu4.github.io
Существующий WDIO-devtools-service:
https://github.com/webdriverio/webdriverio/blob/master/packages/wdio-
devtools-service/src/index.js
Puppeteer API: https://pptr.dev/
Низкоуровневый CDP API: https://chromedevtools.github.io/devtools-
protocol/
Selenoid и CDP:
https://aerokube.com/selenoid/latest/#_accessing_browser_developer_t
ools
Code coverate HTML report для Puppeteer:
https://github.com/istanbuljs/puppeteer-to-istanbul
Всякие вкусности для Chrome Debug Protocol:
https://github.com/ChromeDevTools/awesome-chrome-devtools

More Related Content

PDF
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
PDF
Иван Крутов - Автоматизация сборки Java-проекта
PDF
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
PDF
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
PPTX
Use Grunt Luke
PDF
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
PPTX
Docker + Selenium Webdriver в рамках Continuous Integration
PDF
Ci на базе docker
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
Иван Крутов - Автоматизация сборки Java-проекта
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
Use Grunt Luke
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Docker + Selenium Webdriver в рамках Continuous Integration
Ci на базе docker

What's hot (20)

PPTX
Мастер класс- Maven + Jenkins
PDF
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
PDF
Введение в maven
PPTX
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
PDF
"Electron. How the most modern framework works" Oleksii Holubiev
PPTX
Gradle. Новый уровень автоматизации для Android
PDF
Desktop app based on node js and html5
PDF
Быстрое развертывание среды разработки c Vagrant
PPTX
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
PDF
Конструктор / Денис Паясь (Яндекс)
PDF
Андрей Михайлов. Vagrant. Быстрое развертывание среды
PDF
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
PPTX
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
PDF
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
PDF
My talk on Docker from Moscow Django Meetup #25
PDF
Антон Каляев — Быстрое развертывание среды с Vagrant
PPTX
Евгений Сатуров. Firebase в Android-разработке: основные возможности. РИФ-Вор...
PPTX
Никита Галкин "Testing in Node.js World"
PDF
Михаил Боднарчук "Docker для PHP разработчиков"
PDF
GDG meetup #15: Как построить релиз-инжиниринг на Jenkins
Мастер класс- Maven + Jenkins
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
Введение в maven
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
"Electron. How the most modern framework works" Oleksii Holubiev
Gradle. Новый уровень автоматизации для Android
Desktop app based on node js and html5
Быстрое развертывание среды разработки c Vagrant
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Конструктор / Денис Паясь (Яндекс)
Андрей Михайлов. Vagrant. Быстрое развертывание среды
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
My talk on Docker from Moscow Django Meetup #25
Антон Каляев — Быстрое развертывание среды с Vagrant
Евгений Сатуров. Firebase в Android-разработке: основные возможности. РИФ-Вор...
Никита Галкин "Testing in Node.js World"
Михаил Боднарчук "Docker для PHP разработчиков"
GDG meetup #15: Как построить релиз-инжиниринг на Jenkins
Ad

WebdriverIO + Puppeteer. Double gun – double fun

Editor's Notes

  • #2: WebdriverIO + Puppeteer. Double gun - double fun В мире автоматизации давным-давно успешно используют W3C Webdriver HTTP протокол. С его помощью реализовано множество проектов и библиотек на различных языках (selenide, protractor, webdriverio и тысячи других). Но так же в последнее время все больше и больше команд решают использовать Chrome Debug Protocol, в частности инструмент Puppeteer. Он основан на WebSockets, и имеет свои особые возможности - двухсторонняя связь, возможность подписки на события в браузере, и многое другое. В этом докладе мы посмотрим возможности обоих протоколов, поэкспериментируем и совместим их вместе в одном проекте, чтобы заставить браузер работать на полную и взять лучшее от двух каналов связи.
  • #21: WDIO
  • #26: Request/Response interception
  • #34: PROTRACTOR