Возможности
Возможность (capability) - это определение для удаленного интерфейса. Она помогает WebdriverIO понять, в какой среде браузера или мобильного устройства вы хотите запускать свои тесты. Возможности менее важны при локальной разработке тестов, поскольку вы обычно запускаете их на одном удаленном интерфейсе, но становятся более важными при запуске большого набора интеграционных тестов в CI/CD.
Формат объекта возможности хорошо определен в спецификации WebDriver. Тестовый запускатель WebdriverIO завершит работу с ошибкой, если пользовательские возможности не соответствуют этой спецификации.
Пользовательские возможности
Хотя количество фиксированных определенных возможностей очень мало, каждый может предоставлять и принимать пользовательские возможности, которые специфичны для драйвера автоматизации или удаленного интерфейса:
Расширения возможностей, специфичные для браузера
goog:chromeOptions
: Расширения Chromedriver, применимы только для тестирования в Chromemoz:firefoxOptions
: Расширения Geckodriver, применимы только для тестирования в Firefoxms:edgeOptions
: EdgeOptions для указания среды при использовании EdgeDriver для тестирования Chromium Edge
Расширения возможностей облачных вендоров
sauce:options
: Sauce Labsbstack:options
: BrowserStacktb:options
: TestingBot- и многие другие...
Расширения возможностей движка автоматизации
Возможности WebdriverIO для управления опциями драйвера браузера
WebdriverIO управляет установкой и запуском драйвера браузера за вас. WebdriverIO использует пользовательскую возможность, которая позволяет передавать параметры в драйвер.
wdio:chromedriverOptions
Специфические опции, передаваемые в Chromedriver при его запуске.
wdio:geckodriverOptions
Специфические опции, передаваемые в Geckodriver при его запуске.
wdio:edgedriverOptions
Специфические опции, передаваемые в Edgedriver при его запуске.
wdio:safaridriverOptions
Специфические опции, передаваемые в Safari при его запуске.
wdio:maxInstances
Максимальное количество параллельно работающих воркеров для конкретного браузера/возможности. Имеет приоритет над maxInstances и maxInstancesPerCapability.
Тип: number
wdio:specs
Определяет спецификации для выполнения тестов для этого браузера/возможности. То же, что и обычная опция конфигурации specs
, но специфичная для браузера/возможности. Имеет приоритет над specs
.
Тип: (String | String[])[]
wdio:exclude
Исключает спецификации из выполнения тестов для этого браузера/возможности. То же, что и обычная опция конфигурации exclude
, но специфичная для браузера/возможности. Имеет приоритет над exclude
.
Тип: String[]
wdio:enforceWebDriverClassic
По умолчанию WebdriverIO пытается установить сессию WebDriver Bidi. Если вы не предпочитаете это, вы можете установить этот флаг, чтобы отключить такое поведение.
Тип: boolean
Общие опции драйвера
Хотя все драйверы предлагают разные параметры для конфигурации, есть некоторые общие, которые WebdriverIO понимает и использует для настройки вашего драйвера или браузера:
cacheDir
Путь к корню каталога кэша. Этот каталог используется для хранения всех драйверов, загруженных при попытке начать сессию.
Тип: string
По умолчанию: process.env.WEBDRIVER_CACHE_DIR || os.tmpdir()
binary
Путь к пользовательскому бинарному файлу драйвера. Если установлено, WebdriverIO не будет пытаться загрузить драйвер, а будет использовать тот, который предоставлен по этому пути. Убедитесь, что драйвер совместим с браузером, который вы используете.
Вы можете предоставить этот путь через переменные среды CHROMEDRIVER_PATH
, GECKODRIVER_PATH
или EDGEDRIVER_PATH
.
Тип: string
Если binary
драйвера установлен, WebdriverIO не будет пытаться загрузить драйвер, а будет использовать тот, который предоставлен по этому пути. Убедитесь, что драйвер совместим с браузером, который вы используете.
Специфичные для браузера опции драйвера
Чтобы передать опции драйверу, вы можете использовать следующие пользовательские возможности:
- Chrome или Chromium:
wdio:chromedriverOptions
- Firefox:
wdio:geckodriverOptions
- Microsoft Edge:
wdio:edgedriverOptions
- Safari:
wdio:safaridriverOptions
- wdio:chromedriverOptions
- wdio:geckodriverOptions
- wdio:edgedriverOptions
- wdio:safaridriverOptions
adbPort
Порт, на котором должен работать драйвер ADB.
Пример: 9515
Тип: number
urlBase
Префикс базового URL-пути для команд, например, wd/url
.
Пример: /
Тип: string
logPath
Запись лога сервера в файл вместо stderr, увеличивает уровень лога до INFO
Тип: string
logLevel
Установить уровень лога. Возможные опции: ALL
, DEBUG
, INFO
, WARNING
, SEVERE
, OFF
.
Тип: string
verbose
Подробное логирование (эквивалентно --log-level=ALL
)
Тип: boolean
silent
Ничего не логировать (эквивалентно --log-level=OFF
)
Тип: boolean
appendLog
Добавлять в файл лога, а не перезаписывать его.
Тип: boolean
replayable
Подробно логировать и не обрезать длинные строки, чтобы лог можно было воспроизвести (экспериментально).
Тип: boolean
readableTimestamp
Добавлять читаемые временные метки в лог.
Тип: boolean
enableChromeLogs
Показывать логи из браузера (переопределяет другие опции логирования).
Тип: boolean
bidiMapperPath
Путь к пользовательскому bidi-мапперу.
Тип: string
allowedIps
Разделенный запятыми список разрешенных удаленных IP-адресов, которым разрешено подключаться к EdgeDriver.
Тип: string[]
По умолчанию: ['']
allowedOrigins
Разделенный запятыми список разрешенных источников запросов, которым разрешено подключаться к EdgeDriver. Использование *
для разрешения любого хост-источника опасно!
Тип: string[]
По умолчанию: ['*']
spawnOpts
Опции, которые будут переданы в процесс драйвера.
Тип: SpawnOptionsWithoutStdio | SpawnOptionsWithStdioTuple<StdioOption, StdioOption, StdioOption>
По умолчанию: undefined
Все опции Geckodriver см. в официальном пакете драйвера.
Все опции Edgedriver см. в официальном пакете драйвера.
Все опции Safaridriver см. в официальном пакете драйвера.
Специальные возможности для конкретных случаев использования
Это список примеров, показывающих, какие возможности необходимо применить для достижения определенного варианта использования.
Запуск браузера в безголовом режиме
Запуск браузера в безголовом режиме означает запуск экземпляра браузера без окна или пользовательского интерфейса. Это в основном используется в средах CI/CD, где дисплей не используется. Чтобы запустить браузер в безголовом режиме, примените следующие возможности:
- Chrome
- Firefox
- Microsoft Edge
- Safari
{
browserName: 'chrome', // или 'chromium'
'goog:chromeOptions': {
args: ['headless', 'disable-gpu']
}
}
browserName: 'firefox',
'moz:firefoxOptions': {
args: ['-headless']
}
browserName: 'msedge',
'ms:edgeOptions': {
args: ['--headless']
}
Кажется, что Safari не поддерживает запуск в безголовом режиме.
Автоматизация разных каналов браузера
Если вы хотите тестировать версию браузера, которая еще не выпущена как стабильная, например, Chrome Canary, вы можете сделать это, установив возможности и указав на браузер, который вы хотите запустить, например:
- Chrome
- Firefox
- Microsoft Edge
- Safari
При тестировании в Chrome, WebdriverIO автоматически загрузит для вас нужную версию браузера и драйвер на основе определенного browserVersion
, например:
{
browserName: 'chrome', // или 'chromium'
browserVersion: '116' // или '116.0.5845.96', 'stable', 'dev', 'canary', 'beta' или 'latest' (то же, что и 'canary')
}
Если вы хотите протестировать вручную загруженный браузер, вы можете указать бинарный путь к браузеру через:
{
browserName: 'chrome', // или 'chromium'
'goog:chromeOptions': {
binary: '/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary'
}
}
Кроме того, если вы хотите использовать вручную загруженный драйвер, вы можете указать бинарный путь к драйверу через:
{
browserName: 'chrome', // или 'chromium'
'wdio:chromedriverOptions': {
binary: '/path/to/chromdriver'
}
}
При тестировании в Firefox, WebdriverIO автоматически загрузит для вас нужную версию браузера и драйвер на основе определенного browserVersion
, например:
{
browserName: 'firefox',
browserVersion: '119.0a1' // или 'latest'
}
Если вы хотите протестировать вручную загруженную версию, вы можете указать бинарный путь к браузеру через:
{
browserName: 'firefox',
'moz:firefoxOptions': {
binary: '/Applications/Firefox\ Nightly.app/Contents/MacOS/firefox'
}
}
Кроме того, если вы хотите использовать вручную загруженный драйвер, вы можете указать бинарный путь к драйверу через:
{
browserName: 'firefox',
'wdio:geckodriverOptions': {
binary: '/path/to/geckodriver'
}
}
При тестировании в Microsoft Edge убедитесь, что нужная версия браузера установлена на вашем компьютере. Вы можете указать WebdriverIO на браузер для выполнения через:
{
browserName: 'msedge',
'ms:edgeOptions': {
binary: '/Applications/Microsoft\ Edge\ Canary.app/Contents/MacOS/Microsoft\ Edge\ Canary'
}
}
WebdriverIO автоматически загрузит для вас нужную версию драйвера на основе определенного browserVersion
, например:
{
browserName: 'msedge',
browserVersion: '109' // или '109.0.1467.0', 'stable', 'dev', 'canary', 'beta'
}
Кроме того, если вы хотите использовать вручную загруженный драйвер, вы можете указать бинарный путь к драйверу через:
{
browserName: 'msedge',
'wdio:edgedriverOptions': {
binary: '/path/to/msedgedriver'
}
}
При тестировании в Safari убедитесь, что Safari Technology Preview установлен на вашем компьютере. Вы можете указать WebdriverIO на эту версию через:
{
browserName: 'safari technology preview'
}
Расширение пользовательских возможностей
Если вы хотите определить свой собственный набор возможностей, например, для хранения произвольных данных, которые будут использоваться в тестах для этой конкретной возможности, вы можете сделать это, например, установив:
export const config = {
// ...
capabilities: [{
browserName: 'chrome',
'custom:caps': {
// пользовательские конфигурации
}
}]
}
Рекомендуется следовать протоколу W3C при именовании возможностей, который требует символ :
(двоеточие), обозначающий специфическое для реализации пространство имен. В своих тестах вы можете получить доступ к своей пользовательской возможности через, например:
browser.capabilities['custom:caps']
Чтобы обеспечить безопасность типов, вы можете расширить интерфейс возможностей WebdriverIO через:
declare global {
namespace WebdriverIO {
interface Capabilities {
'custom:caps': {
// ...
}
}
}
}