Тестирование фронтенда
2026-02-26 20:47 Diff

E2E Тестирование

jest-puppeteer - библиотека для тестирования с открытым исходным кодом

Пример конфига для jest:

Пример конфига для jest-puppeteer:

Пример теста:

Метод evaluate() позволяет выполнить переданную фукнкцию, как если бы она была выполнена на странице. Первым параметром принимает функцию, которую нужно выполнить, а остальные параметры передаются в качестве аргументов в выполняемую функцию:

Пример теста для формы регистрации:

Пример создания скриншотов и изменение размера страницы:

Для проверки разных размеров страницы, удобно использовать test.each:

Пример эмуляции другого устройства:

Пример прерывания запроса:

Puppeteer

Тесты и браузер имеют разную среду. Чтобы запустить код в контексте браузера, нужно использовать evaluate():

Пример извлечения элементов:

Тоже самое, но с передачей селектора в переменной:

Еще один пример:

Playwright также имеет метод evaluate():

Как не надо делать:

Правильный способ:

Работа с асинхронностью

Есть несколько событий, которые мы ожидаем:

  • загрузка страницы
  • изменения на странице (изменения в DOM-дереве)
  • запросы
  • кастомные ожидания

Ожидание загрузки страницы

Selenium

Cypress

Playwright and Puppeteer

Ожидания изменений на странице

Selenium

Cypress

Playwright и Puppeteer

Ожидание запросов

Selenium

Cypress

Playwright and Puppeteer

Ожидание кастомных изменений

Мы хотим дождаться, пока глобальной переменной user не будет присвоено значение Ivan

Selenium

Cypress

Playwright и Puppeteer

Итог

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

Ниже правильный пример. Указываем какие элементы ожидать: