Возможности
Возможность (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
Путь к пользовательскому двунаправленному маппингу.
Тип: 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': {
// ...
}
}
}
}