Комплексное тестирование расширений Chrome

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

См. руководство «Тестирование расширений Chrome с помощью Puppeteer» и модульное тестирование для получения подробной информации о написании модульных тестов для расширений Chrome.

Использование библиотек тестирования браузера

Расширения поддерживаются рядом библиотек тестирования.

Библиотека Руководство
Кукольник/Драматург См. Расширения Chrome ( Кукловод / Драматург ).
Селен Используйте объект ChromeOptions для загрузки расширений. Более подробная информация доступна здесь .
ВебДрайверИО См. Тестирование веб-расширений .

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

При запуске тестов в рамках автоматизированного рабочего процесса часто необходимо загрузить расширение на машину, не имеющую экрана. Новый безгласный режим Chrome позволяет запускать Chrome в такой автоматической среде. Запустите Chrome, используя флаг --headless=new (в настоящее время для headless установлено значение «старый», который не поддерживает загрузку расширений). В зависимости от выбранного вами инструмента автоматизации может быть настройка, автоматически добавляющая этот флаг.

Установка идентификатора расширения

Часто желательно иметь фиксированный идентификатор расширения в тестах. Это упрощает многие распространенные задачи, такие как внесение источника расширения в список разрешенных на сервере, с которым ему необходимо взаимодействовать, или открытие страниц расширения в тестах. Для этого выполните действия, описанные в разделе «Сохранение постоянного идентификатора расширения» .

Тестирование страниц расширения

Доступ к страницам расширений можно получить, используя соответствующий URL-адрес, например chrome-extension://<id>/index.html . Используйте обычные методы навигации, доступные в выбранном вами инструменте автоматизации, чтобы перейти к этим URL-адресам.

Тестирование всплывающего окна расширения

Открытие всплывающего окна расширения в контексте другой страницы в настоящее время невозможно. Вместо этого откройте URL-адрес всплывающего окна в новой вкладке. Если ваше всплывающее окно использует активную вкладку, рассмотрите возможность реализации переопределения, при котором идентификатор вкладки может быть явно передан вашему всплывающему окну. Например:

const URL_PARAMS  = new URLSearchParams(window.location.search);  async function getActiveTab() {   // Open popup.html?tab=5 to use tab ID 5, etc.   if (URL_PARAMS.has("tab")) {     return await chrome.tabs.get(parseInt(URL_PARAMS.get("tab")));   }    const tabs = await chrome.tabs.query({     active: true,     currentWindow: true   });    return tabs[0]; } 

Проверка состояния расширения

Чтобы избежать сбоев теста при изменении внутреннего поведения вашего расширения, обычно рекомендуется избегать доступа к внутреннему состоянию в интеграционном тесте. Вместо этого вам следует основывать свои тесты на том, что видно пользователю. Однако иногда может быть желательно иметь прямой доступ к данным из расширения. В таких случаях рассмотрите возможность выполнения кода в контексте страницы расширения.

В «Кукловоде»:

const workerTarget = await browser.waitForTarget(   target => target.type() === 'service_worker' ); const worker = await workerTarget.worker();  const value = await worker.evaluate(() => {   chrome.storage.local.get('foo'); }); 

В Селене:

// Selenium doesn't allow us to access the service worker, so we need to open an extension page where we can execute the code await driver.get('chrome-extension://<id>/popup.html'); await driver.executeAsyncScript(   'const callback = arguments[arguments.length - 1];' +   'chrome.storage.local.get(\'foo\').then(callback);' ); 

Завершение работы работника службы тестирования

Чтобы узнать о тестировании завершения Service Worker, см. Тестирование завершения Service Worker с помощью Puppeteer . У нас также есть образец для Puppeteer и Selenium.

Обратите внимание, что при использовании некоторых платформ тестирования сервис-воркеры могут не завершать работу автоматически, как при обычном использовании. Так обстоит дело в Selenium. Он опирается на ChromeDriver, который подключает отладчик ко всем сервисным работникам, предотвращая их остановку.