Перейти к основному содержимому

Работа с браузерами

Что вы узнаете
  • Как Testplane работает с браузерами
  • Как описать браузеры в конфигурации
  • Какие есть источники браузеров: локальные, Docker, облако
  • Как выбрать подход под свою задачу

Введение

Testplane запускает тесты в реальных браузерах и не привязан к конкретным версиям или одному источнику браузеров.

Вы описываете нужные браузеры в секции browsers, а параметр gridUrl определяет, откуда их брать: локально, из Docker-грида (например, Selenoid) или из удалённого облака (BrowserStack, Sauce Labs).

Общая схема работы:

  1. Testplane читает секцию browsers
  2. Для каждого браузера берёт gridUrl (общий или переопределённый на уровне браузера)
  3. Обращается к гриду и запускает браузер с указанными desiredCapabilities

Обычно для всех браузеров используют один источник (один gridUrl), но при необходимости его можно задать отдельно для каждого браузера.

Конфигурация браузеров

Секция browsers описывает, в каких браузерах запускаются тесты.

testplane.config.ts
import type { ConfigInput } from "testplane";

export default {
browsers: {
chrome: {
gridUrl: "local",
desiredCapabilities: {
browserName: "chrome",
browserVersion: "125.0",
},
windowSize: "1920x1080",
headless: true,
},

"chrome-mobile": {
gridUrl: "local",
desiredCapabilities: {
browserName: "chrome",
browserVersion: "125.0",
"goog:chromeOptions": {
mobileEmulation: {
deviceName: "iPhone 12 Pro",
},
},
},
headless: true,
},
},
} satisfies ConfigInput;

Ключ в browsers (chrome, chrome-mobile) — логическое имя браузера. Оно используется в CLI и в отчётах. Имя не ограничивает реальные настройки: в desiredCapabilities можно указать любой browserName и browserVersion.

Версия браузера задаётся в desiredCapabilities.browserVersion. Для локальных браузеров Testplane скачает нужную версию, если она поддерживается. Для Docker и облака версия должна совпадать с образом или настройками грида.

headless: true включает запуск без графического интерфейса.

windowSize: "1920x1080" задаёт размер окна, что важно для скриншотных тестов.

Мобильная эмуляция

Для Chrome используйте goog:chromeOptions.mobileEmulation:

"goog:chromeOptions": {
mobileEmulation: {
deviceName: "iPhone 12 Pro",
}

Для Firefox можно эмулировать мобильный user-agent через moz:firefoxOptions:

"moz:firefoxOptions": {
prefs: {
"general.useragent.override":
"Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15",
}
}

Локальные браузеры

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

Установка зависимостей

Скачать необходимые браузеры и драйверы:

npx testplane install-deps

Загрузить только выбранные браузеры (по логическому имени из конфига):

npx testplane install-deps chrome-dark

Указать конкретные версии:

npx testplane install-deps chrome@130 firefox@104

По умолчанию браузеры и драйверы скачиваются в директорию .testplane в домашней папке пользователя. Путь можно изменить через переменную окружения TESTPLANE_BROWSERS_PATH:

TESTPLANE_BROWSERS_PATH=./node_modules/.testplane npx testplane install-deps

Удаление браузеров

  • Удалите директорию .testplane в домашней папке
  • Или удалите каталог, указанный в TESTPLANE_BROWSERS_PATH

Запуск тестов

Есть два варианта:

Через CLI-опцию --local:

npx testplane --local

Через gridUrl: "local" в конфигурации:

export default {
browsers: {
chrome: {
gridUrl: "local",
desiredCapabilities: {
browserName: "chrome",
browserVersion: "130.0",
},
},
},
};

Отладка локальных запусков

Включить подробные логи через конфигурацию:

export default {
system: {
debug: true,
},
};

Или через переменные окружения — с ограничением уровня логирования webdriverio:

testplane_system_debug=true WDIO_LOG_LEVEL=error npx testplane --local -b chrome

Плюсы и минусы

Преимущества

  • Высокая скорость запуска тестов
  • Нет затрат на облачные сервисы
  • Простая настройка и лёгкая отладка

Ограничения

  • Ограниченный набор версий браузеров
  • Зависимость от операционной системы: скриншоты могут различаться
  • Нужен контроль за обновлением версий

Локальные браузеры подходят для разработки, быстрого прогона и отладки, но не идеальны для скриншотного тестирования между разными ОС.

Браузеры в Docker-контейнерах

Docker-контейнеры дают изолированное и воспроизводимое окружение, удобное для CI/CD. Часто используют Selenoid — легковесную реализацию Selenium Grid, которая запускает браузеры внутри контейнеров.

Selenoid:

  • Управляет браузерами в Docker-контейнерах
  • Автоматически масштабирует контейнеры
  • Умеет записывать видео и даёт VNC-доступ
  • Настраивается через простой JSON-файл с браузерами

Образы браузеров

Готовые образы доступны на Docker Hub:

У готовых образов могут отсутствовать самые свежие версии браузеров. Чтобы собрать актуальные, используйте репозиторий gemini-testing/images:

git clone https://github.com/gemini-testing/images.git
cd images

./chrome/build.sh
./firefox/build.sh

Следить за появлением готовых свежих образов можно в этом issue.

Конфигурация Testplane для Selenoid

testplane.config.ts
export default {
browsers: {
chrome: {
gridUrl: "http://localhost:4444/wd/hub",
desiredCapabilities: {
browserName: "chrome",
browserVersion: "130.0",
"selenoid:options": {
enableVNC: true,
enableVideo: true,
enableLog: true,
screenResolution: "1920x1080x24",
},
"goog:chromeOptions": {
args: ["--headless=new"],
},
},
headless: true,
},

firefox: {
gridUrl: "http://localhost:4444/wd/hub",
desiredCapabilities: {
browserName: "firefox",
browserVersion: "125.0",
"selenoid:options": {
enableVNC: true,
enableVideo: true,
screenResolution: "1920x1080x24",
},
"moz:firefoxOptions": {
args: ["-headless"],
},
},
headless: true,
},
},
};

Плюсы и минусы

Преимущества

  • Изолированное окружение, тесты не влияют на систему
  • Стабильные и одинаковые версии браузеров везде
  • Лёгкая масштабируемость в CI/CD
  • Гибкая конфигурация окружения

Ограничения

  • Требуются базовые знания Docker и Selenoid
  • Более высокий расход ресурсов
  • Нужно следить за актуальностью образов и настроек сети

Docker хорошо подходит для CI/CD и скриншотного тестирования, где важна стабильность и воспроизводимость.

Удалённые гриды

Облачные сервисы (BrowserStack, Sauce Labs и др.) дают широкий набор браузеров, ОС и реальных устройств для кросс-браузерного тестирования.

Подключение и аутентификация

Для подключения нужно указать gridUrl сервиса и передать учётные данные через user и key. Рекомендуется хранить их в переменных окружения:

testplane.config.ts
export default {
browsers: {
"chrome-bstack": {
gridUrl: "https://hub.browserstack.com/wd/hub",
user: process.env.BROWSERSTACK_USERNAME,
key: process.env.BROWSERSTACK_ACCESS_KEY,
desiredCapabilities: {
browserName: "chrome",
browserVersion: "latest",
"bstack:options": {
os: "Windows",
osVersion: "11",
projectName: "My Test Project",
buildName: "Build 1.0",
},
},
},

"firefox-sauce": {
// Регион выбирается в зависимости от вашего расположения:
// https://docs.saucelabs.com/basics/data-center-endpoints/
gridUrl: "https://ondemand.us-west-1.saucelabs.com/wd/hub",
user: process.env.SAUCE_USERNAME,
key: process.env.SAUCE_ACCESS_KEY,
desiredCapabilities: {
browserName: "firefox",
browserVersion: "latest",
"sauce:options": {
name: "Firefox test",
build: "Build 1.0",
},
},
},
},
};

Кастомизация сессий

У разных сервисов свои опции:

BrowserStack (bstack:options)

  • ОС и её версия (os, osVersion)
  • Разрешение экрана (resolution)
  • Локальное тестирование (local)
  • Включение логов и отладки (debug, networkLogs, consoleLogs)

Sauce Labs (sauce:options)

  • Имя и билд (name, build)
  • Теги (tags)
  • Ограничения по времени (commandTimeout, idleTimeout, maxDuration)
  • Видео и логи (recordVideo, recordLogs)

Таймауты и отладка

Облачные сервисы жёстко ограничивают время выполнения одной команды, время простоя сессии и максимальную длительность сессии.

Для отладки доступны:

  • Логи сессий
  • Видео каждого прогона
  • VNC или аналог для просмотра браузера
  • Сетевые логи

Плюсы и минусы

Преимущества

  • Большой выбор браузеров и ОС
  • Нет необходимости поднимать свою инфраструктуру
  • Детальные логи и видео

Ограничения

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

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

Практические сценарии

Для разработки и быстрого фидбэка:

  • Используйте локальные браузеры (--local или gridUrl: "local")
  • Запускайте только нужные браузеры через -b chrome
  • Включайте system.debug при отладке

Гибридный вариант

Практичный вариант для большинства проектов:

  • Локальные браузеры — для разработки и отладки
  • Docker в CI — для стабильных быстрых прогонов на одном наборе браузеров
  • Облако — для периодического кросс-браузерного и мобильного тестирования