Сквозное тестирование включает в себя сборку пакета расширений и его загрузку в браузер. Инструмент тестирования взаимодействует с браузером, чтобы автоматизировать взаимодействие и протестировать те же процессы, через которые проходит пользователь. Библиотека, поддерживающая сквозное тестирование, обычно предоставляет способы управления браузером, имитации пользовательского ввода и наблюдения за текущим состоянием любых открытых страниц.
См. руководство «Тестирование расширений 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 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, который подключает отладчик ко всем сервисным работникам, предотвращая их остановку.