Назад к блогу
Начало работы

Фиксация и обновление версий браузерной автоматизации

Планируйте обновления браузера и driver с фиксацией версий, доказательствами совместимости и rollback.

Документация

Нужна структурированная документация по теме Начало работы?

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

Зафиксированная версия проходит проверку кандидата к обновлению или откату

Повторяемый тест рассматривает браузер, driver, framework, профиль и приложение как единый набор. Плавающая метка не доказывает использованный бинарный файл. Фиксируйте входы, записывайте разрешённые версии и сравнивайте обновление с готовым rollback. Общая проверка browser release шире; интеграция профиля Selenium описывает владение профилем; здесь описана ответственность за обновление.

Контракт release

Назовите маршрут, синтетический аккаунт, видимый результат, поддерживаемые системы и необходимые возможности. Запишите семейства браузера и driver, правила patch и доказательства продвижения. Добавьте версии приложения и framework.

Используйте digest, lockfile или идентификатор артефакта. Разрешайте ссылку в начале job. Повтор сохраняет набор или становится новой попыткой кандидата.

Матрица версий

ВходЗаписьВладелецДоказательствоRollback
Бинарный файлартефакт/версияплатформачистый путьвосстановить
Driverсовместимое семействоавтоматизацияпереговорывосстановить
Frameworklockfile/runtimeтестыfixture/проверкастарый lockfile
Состояниесхема/baselineсценарийзагрузка/срокстарый baseline
Приложениеbuild idприложениевидимый итогизвестный deploy

Smoke test подтверждает только свой путь, а не все origins, расширения и режимы.

Фиксация и кандидат

Браузер без фиксации driver может изменить протокол. Другая ОС меняет сертификаты, шрифты и разрешения. Записывайте существенные входы и разделяйте неизменяемые артефакты и синтетические данные.

Запускайте baseline и candidate с одним входом, меняя одну версию. Сравнивайте видимый статус, навигацию, разрешения и очистку. Документированный вариант может быть допустим, отсутствие обязательной возможности блокирует.

Обновление кандидата

Проводите кандидата в отдельной lane с тем же синтетическим сценарием, образом ОС и политикой proxy. До запуска записывайте ссылку и разрешённую идентичность версии.

Таблица решения

НаблюдениеКатегорияРешениеСледующий шаг
Контракт совпалсовместимопродвигать после reviewсохранить чеки
Есть альтернативаподдерживаемая вариацияпродвигать при согласиипроверить доступность
Driver не договорилсянесовместимый наборблокироватьвыровнять или восстановить
Путь прошёл, очистка нетинфраструктураудержатьсохранить ошибки
Timeout после мутациинеопределённоне повторять вслепуюзапросить статус

Сбойная fixture

import os from 'node:os';
import path from 'node:path';
import { mkdtemp, rm } from 'node:fs/promises';
import { chromium } from 'playwright';
import { expect } from '@playwright/test';
const dir = await mkdtemp(path.join(os.tmpdir(), 'release-pin-'));
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ baseURL: 'http://release.test' });
const page = await context.newPage();
await page.route('/fixtures/missing-readiness', route =>
  route.fulfill({ status: 200, contentType: 'text/html', body: '<main><p>Кандидат</p></main>' })
);
let failure;
const remember = (label, error) => {
  const current = new Error(`${label}: ${error.message}`, { cause: error });
  failure = failure ? new AggregateError([failure, current], `${failure.message}; ${label} failed`) : current;
};
try {
  await page.goto('/fixtures/missing-readiness');
  await expect(page.getByRole('status')).toHaveText('Ready', { timeout: 250 });
} catch (error) {
  remember('проверка готовности', error);
} finally {
  try {
    await context.close();
  } catch (error) {
    remember('закрытие контекста', error);
  }
  try {
    await rm(dir, { recursive: true, force: true });
  } catch (error) {
    remember('очистка артефакта', error);
  }
  try {
    await browser.close();
  } catch (error) {
    remember('закрытие браузера', error);
  }
}
if (failure) throw failure;

Ожидаемый итог называет отсутствующий сигнал и не обращается к чужому origin. Мутация после timeout требует статуса сервиса.

Частота обновлений

Патч безопасности можно проверять быстрее major-изменения, но обе категории записывают версию и запускают fixture. Фиксируйте граф зависимостей и рассматривайте его обновления отдельно.

Rollback и политика

Rollback восстанавливает бинарный файл, driver, framework, схему и build. Репетируйте его в отдельной lane с синтетическим baseline. Без старого бинарника откат не готов.

Patch может проверяться быстрее major-изменения, но обе категории записывают версию и запускают fixture. Фиксируйте граф зависимостей и рассматривайте его обновления отдельно.

Доказательства и границы

Квитанция содержит версии, образ ОС, сценарий, видимый результат, вариант и очистку. Не добавляйте cookies или личный текст. Runner наблюдает клиентскую границу и не доказывает хранение на сервере.

Возможность и ограничение BotBrowser

BotBrowser предоставляет контролируемую конфигурацию и изолированные BrowserContexts для разрешённого сравнения release; см. документацию изоляции аккаунтов. Он не выбирает driver, не фиксирует зависимости, не сертифицирует build и не обещает межсистемную идентичность.

BotBrowser поддерживает фиксированные входы браузера для контролируемого сравнения, но не гарантирует совместимость driver, приложения или систем.

Для зафиксированного release BotBrowser может удерживать конфигурацию браузера при сравнении, но не решает совместимость driver или build.

Сохраняйте baseline receipt с артефактом, driver, lockfile, образом и build.

Patch может менять протокол, сертификаты, отображение или политики даже при малом номере.

Классифицируйте сбой по границе: запуск, разрешения, видимый результат или инфраструктура.

Записывайте решение: продвигать, удержать, rollback или исследовать.

Репетируйте rollback с проверкой артефакта, driver, схемы и синтетического пути.

Не увеличивайте ожидания, чтобы скрыть drift release.

Сохраняйте маршрут, синтетические данные, proxy и срок хранения постоянными.

Исключение платформы должно иметь lane, владельца и срок.

Записывайте зависимости, которые runner не может зафиксировать.

Храните только метаданные и разрешённые синтетические артефакты в окно сравнения.

Храните разрешённые идентификаторы для воспроизведения worker.

Меняйте только один вход release в каждом сравнении.

Разделяйте артефакты кандидата и baseline.

Отсутствующую возможность фиксируйте даже при зелёной проверке.

После timeout с возможной мутацией запрашивайте статус сервиса.

Закрытие контекста не доказывает удаление на сервере.

Назначайте срок каждому исключению платформы.

После восстановления повторяйте чистый путь.

Храните разрешённые идентификаторы для воспроизведения worker.

Меняйте только один вход release в каждом сравнении.

Разделяйте артефакты кандидата и baseline.

Отсутствующую возможность фиксируйте даже при зелёной проверке.

После timeout запрашивайте статус сервиса.

Закрытие контекста не доказывает удаление на сервере.

Назначайте срок каждому исключению платформы.

После восстановления повторяйте чистый путь.

Проверяйте квитанцию с владельцем пути.

Сохраняйте baseline неизменным в окно сравнения.

Источники

#Браузерная Автоматизация#Версии#Обновления#Совместимость#Rollback

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.