API запуска браузера
Перед запуском браузера Cypress предоставляет возможность изменить настройки браузера, установить расширения, добавить и удалить аргументы командной строки и изменить другие параметры из вашего файла плагинов.
Синтаксис
⚠️ Этот код является частью файла плагинов и, следовательно, выполняется в среде Node.js. Вы не можете вызывать команды
Cypressилиcyв этом файле, но у вас есть прямой доступ к файловой системе и остальной операционной системе.
on('before:browser:launch', (browser = {}, launchOptions) => {
/* ... */
})
browser (объект)
Объект, описывающий запускаемый браузер, со следующими свойствами:
| Свойство | Тип | Описание |
|---|---|---|
name |
string |
Имя, понятное для машины, например, chrome, electron, edge, или firefox. |
family |
string |
Используемый движок рендеринга. chromium или firefox. |
channel |
string |
Канал выпуска браузера, например, stable, dev, или canary. |
displayName |
string |
Человекопонятное имя браузера. |
version |
string |
Полная версия. |
path |
string |
Путь к браузеру на диске. Пусто для Electron. |
info |
string |
(Необязательно) Дополнительная информация о браузере (используется для отображения в селекторе браузера в Test Runner). |
majorVersion |
number |
Основной номер версии браузера. |
isHeadless |
boolean |
Работает ли браузер в бестенечном режиме. |
isHeaded |
boolean |
Отображается ли браузер в режиме с интерфейсом. |
launchOptions (объект)
Параметры, которые можно изменить для управления запуском браузера, со следующими свойствами:
| Свойство | Тип | Описание |
|---|---|---|
preferences |
object |
Объект, описывающий настройки браузера. Отличается в зависимости от браузера. Подробности см. в разделе Изменение настроек браузера. |
args |
string[] |
Массив строк, которые будут переданы в качестве аргументов командной строки при запуске браузера. Не оказывает влияния на Electron. Подробности см. в разделе Изменение аргументов командной строки при запуске браузера. |
extensions |
string[] |
Массив путей к папкам, содержащим распакованные расширения WebExtensions, которые будут загружены перед запуском браузера. Примечание: Electron в настоящее время поддерживает только расширения Chrome DevTools. Подробности см. в разделе Добавление расширений браузера. |
Использование
Изменение аргументов командной строки, настроек и расширений браузера
Используя файл плагинов, вы можете получить доступ к событию before:browser:launch и изменить способ запуска браузера Cypress (например, изменить аргументы, пользовательские настройки и расширения).
Это событие вернёт вам объект browser, содержащий информацию о браузере, и объект launchOptions, позволяющий изменить способ запуска браузера.
Возвращаемый объект launchOptions станет новыми параметрами запуска для браузера.
Изменение аргументов командной строки при запуске браузера:
Вот доступные аргументы для поддерживаемых в настоящее время браузеров:
Открытие devtools по умолчанию
// cypress/plugins/index.js
module.exports = (on, config) => {
on('before:browser:launch', (browser = {}, launchOptions) => {
// `args` is an array of all the arguments that will
// be passed to browsers when it launches
console.log(launchOptions.args) // print all current args
if (browser.family === 'chromium' && browser.name !== 'electron') {
// auto open devtools
launchOptions.args.push('--auto-open-devtools-for-tabs')
}
if (browser.family === 'firefox') {
// auto open devtools
launchOptions.args.push('-devtools')
}
if (browser.name === 'electron') {
// auto open devtools
launchOptions.preferences.devTools = true
}
// whatever you return here becomes the launchOptions
return launchOptions
})
}
Добавление расширений браузера:
// cypress/plugins/index.js
module.exports = (on, config) => {
on('before:browser:launch', (browser, launchOptions) => {
// supply the absolute path to an unpacked extension's folder
// NOTE: extensions cannot be loaded in headless Chrome
launchOptions.extensions.push('Users/jane/path/to/extension')
return launchOptions
})
}
Изменение настроек браузера:
Вот доступные настройки для поддерживаемых в настоящее время браузеров:
- Браузеры на основе Chromium
- Electron
- Firefox: посетите
about:configURL в вашем браузере Firefox, чтобы увидеть все доступные настройки.
// cypress/plugins/index.js
module.exports = (on, config) => {
on('before:browser:launch', (browser, launchOptions) => {
if (browser.family === 'chromium' && browser.name !== 'electron') {
// in Chromium, preferences can exist in Local State, Preferences, or Secure Preferences
// via launchOptions.preferences, these can be acccssed as `localState`, `default`, and `secureDefault`
// for example, to set `somePreference: true` in Preferences:
launchOptions.preferences.default['preference'] = true
return launchOptions
}
if (browser.family === 'firefox') {
// launchOptions.preferences is a map of preference names to values
launchOptions.preferences['some.preference'] = true
return launchOptions
}
if (browser.name === 'electron') {
// launchOptions.preferences is a `BrowserWindow` `options` object
launchOptions.preferences.darkTheme = true
return launchOptions
}
})
}
Изменение переключателей приложения Electron
Cypress Test Runner — это приложение Electron, и его поведение (а также поведение встроенного браузера Electron) можно настроить с помощью переключателей командной строки. Поддерживаемые переключатели зависят от версии Electron, см. документацию Electron.
Вы можете передать специфичные для Electron аргументы запуска, используя переменную среды ELECTRON_EXTRA_LAUNCH_ARGS. Например, чтобы отключить кэш браузера HTTP и игнорировать ошибки сертификатов, вы можете установить переменные среды перед запуском Cypress, как показано ниже:
Linux/OSX
export ELECTRON_EXTRA_LAUNCH_ARGS=--disable-http-cache --lang=es
Windows
set ELECTRON_EXTRA_LAUNCH_ARGS=--disable-http-cache --lang=es
Cypress уже устанавливает некоторые переключатели командной строки Electron внутри. См. файл packages/server/lib/environment.js. Нет способа увидеть все установленные переключатели после запуска Electron.
Просмотр всех переключателей браузера Chrome
Если вы запускаете тесты Cypress с браузером на основе Chromium, вы можете увидеть ВСЕ текущие переключатели командной строки и информацию о версии браузера, открыв новую вкладку и введя chrome://version url.
Примеры
Установка размера экрана при бестенечном запуске
Когда браузер запускается в бестенечном режиме, физического дисплея нет. Вы можете переопределить размер экрана по умолчанию (1280x720) при бестенечном запуске, как показано ниже. Это повлияет на размер скриншотов и видео, сделанных во время выполнения.
Это изменение размера дисплея и не влияет на значения
viewportWidthиviewportHeight, установленные в конфигурации. ЗначенияviewportWidthиviewportHeightвлияют только на размер приложения, которое тестируется, отображаемого внутри Test Runner. Подробнее см. в статье в блоге Generate High-Resolution Videos and Screenshots.
// cypress/plugins/index.js
module.exports = (on, config) => {
on('before:browser:launch', (browser, launchOptions) => {
if (browser.name === 'chrome' && browser.isHeadless) {
// fullPage screenshot size is 1400x1200 on non-retina screens
// and 2800x2400 on retina screens
launchOptions.args.push('--window-size=1400,1200')
// force screen to be non-retina (1400x1200 size)
launchOptions.args.push('--force-device-scale-factor=1')
// force screen to be retina (2800x2400 size)
// launchOptions.args.push('--force-device-scale-factor=2')
}
if (browser.name === 'electron' && browser.isHeadless) {
// fullPage screenshot size is 1400x1200
launchOptions.preferences.width = 1400
launchOptions.preferences.height = 1200
}
if (browser.name === 'firefox' && browser.isHeadless) {
// menubars take up height on the screen
// so fullPage screenshot size is 1400x1126
launchOptions.args.push('--width=1400')
launchOptions.args.push('--height=1200')
}
return launchOptions
})
}
Переопределение коэффициента пикселей устройства
// cypress/plugins/index.js
module.exports = (on, config) => {
on('before:browser:launch', (browser, launchOptions) => {
if (browser.name === 'chrome' && browser.isHeadless) {
// force screen to behave like retina
// when running Chrome headless browsers
// (2560x1440 in size by default)
launchOptions.args.push('--force-device-scale-factor=2')
}
return launchOptions
})
}
Запуск в полноэкранном режиме
// cypress/plugins/index.js
module.exports = (on, config) => {
on('before:browser:launch', (browser = {}, launchOptions) => {
if (browser.family === 'chromium' && browser.name !== 'electron') {
launchOptions.args.push('--start-fullscreen')
return launchOptions
}
if (browser.name === 'electron') {
launchOptions.preferences.fullscreen = true
return launchOptions
}
})
}
Использование заменителя видео для тестирования веб-камеры
По умолчанию Cypress передаёт переключатель Chrome командной строки для включения заменителя видео для потока медиа. Это улучшает возможность тестирования функциональности веб-камеры без необходимости наличия необходимого оборудования для тестирования.
Однако вы можете передать свой собственный файл видео для тестирования, передав переключатель Chrome командной строки, указывающий на файл видео.
// cypress/plugins/index.js
module.exports = (on, config) => {
on('before:browser:launch', (browser = {}, launchOptions) => {
if (browser.family === 'chromium' && browser.name !== 'electron') {
// Mac/Linux
launchOptions.args.push(
'--use-file-for-fake-video-capture=cypress/fixtures/my-video.y4m'
)
// Windows
// launchOptions.args.push('--use-file-for-fake-video-capture=c:\\path\\to\\video\\my-video.y4m')
}
return launchOptions
})
}
Поддержка уникальных типов mime для загрузки файлов
Cypress поддерживает множество типов mime при тестировании загрузки файлов, но в случае уникального типа вы можете добавить его поддержку.
module.exports = (on) => {
on('before:browser:launch', (browser, options) => {
// only Firefox requires all mime types to be listed
if (browser.family === 'firefox') {
const existingMimeTypes =
options.preferences['browser.helperApps.neverAsk.saveToDisk']
const myMimeType = 'my/mimetype'
// prevents the browser download prompt
options.preferences[
'browser.helperApps.neverAsk.saveToDisk'
] = `${existingMimeTypes},${myMimeType}`
return options
}
})
}
Посмотрите пример рецепта, демонстрирующий загрузку и проверку CSV и Excel файлов.
Установка флага Firefox
Если нам нужно установить определённый флаг Firefox, например, browser.send_pings, мы можем сделать это через настройки.
module.exports = (on) => {
on('before:browser:launch', (browser = {}, launchOptions) => {
if (browser.family === 'firefox') {
launchOptions.preferences['browser.send_pings'] = true
}
return launchOptions
})
}
Данный пример взят из статьи в блоге How to Test Anchor Ping.
История
| Версия | Изменения |
|---|---|
| 4.0.0 | Новый объект options заменяет старый объект args в качестве второго аргумента для before:browser:launch
|
| 4.0.0 | Все браузеры на базе Chromium, включая Electron, имеют chromium установленным как их свойство family. |
| 4.0.0 | Добавлено свойство channel в браузер. |
© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/plugins/browser-launch-api