Spec-Zone.ru › Cypress

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 станет новыми параметрами запуска для браузера.

Изменение аргументов командной строки при запуске браузера:

Вот доступные аргументы для поддерживаемых в настоящее время браузеров:

  • Браузеры на основе Chromium
  • Firefox
Открытие 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:config URL в вашем браузере 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.

See all Chrome switches

Примеры

Установка размера экрана при бестенечном запуске

Когда браузер запускается в бестенечном режиме, физического дисплея нет. Вы можете переопределить размер экрана по умолчанию (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 командной строки для включения заменителя видео для потока медиа. Это улучшает возможность тестирования функциональности веб-камеры без необходимости наличия необходимого оборудования для тестирования.

Enable fake video for testing

Однако вы можете передать свой собственный файл видео для тестирования, передав переключатель 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API