browsers
Обзор
Раздел browsers
является обязательным в настройках Testplane. В нем задаются все браузеры, в которых будут запускаться тесты.
Настройка
Данный раздел имеет следующий формат:
import type { ConfigInput } from "testplane";
export default {
browsers: {
"<browser-id>": {
desiredCapabilities: {
browserName: "<browser-name>",
// ...
},
// ...
},
},
} satisfies ConfigInput;
Где <browser-id>
— это имя браузера, которое используется для его идентификации.
Чтобы не повторять одни и те же настройки для разных браузеров, вы можете задать все нужные вам значения по умолчанию в корне конфига Testplane. Например:
import type { ConfigInput } from "testplane";
export default {
sessionsPerBrowser: 10,
browsers: {
chrome: {
/* ... */
},
firefox: {
// ...
sessionsPerBrowser: 5,
},
},
} satisfies ConfigInput;
В этом примере для браузера chrome будет использовано значение 10
для опции sessionsPerBrowser
, а для firefox — 5
.
Основные настройки браузера
Параметр | Тип | По умолчанию | Описание |
desiredCapabilities | DesiredCapabilities | N/A | Обязательный параметр. Определяет свойства, которыми должен обладать браузер. Используется WebDriver'ом, см. DesiredCapabilities. |
gridUrl | string | "http://localhost:4444/wd/hub" | URL грида Selenium. |
baseUrl | string | "http://localhost" | Базовый URL тестируемого сервиса. |
browserWSEndpoint | string | null | Эндпойнт websocket-соединения для подключения к браузеру через Chrome DevTools Protocol (CDP). |
automationProtocol | string | "webdriver" | Протокол общения с браузером. См. WebDriver vs CDP. |
sessionEnvFlags | SessionEnvFlags | {} | Флаги окружения, задающие протокол, который будет использоваться в созданной сессии браузера. |
windowSize | string | WindowSize | null | Размеры окна браузера. |
headless | boolean | "new" | "old" | depends on browser | Позволяет запускать браузер в headless режиме. |
desiredCapabilities
Обязательный параметр. Определяет свойства, которыми должен обладать браузер.
Формат объекта desiredCapabilities определяется стандартом WebDriver.
Помимо стандартных опций ряд инструментов предоставляют специфичные в своих неймспейсах.
Опции, специфичные для браузеров:
- Chrome,
goog:chromeOptions
— документации по опциям ChromeDriver - Firefox,
moz:firefoxOptions
— документации по Geckodriver - Edge,
ms:edgeOptions
— документации по EdgeDriver
Опции, специфичные для браузерных гридов:
- Sauce Labs,
sauce:options
— документация - BrowserStack,
bstack:options
— документация - TestingBot,
tb:options
— документация
Опции, специфичные для некоторых инструментов автоматизации:
- Appium,
appium:*
— документация - Selenoid,
selenoid:options
— документация
Пример расширенного задания desiredCapabilities
:
import type { ConfigInput } from "testplane";
export default {
browsers: {
chrome: {
desiredCapabilities: {
browserName: "chrome",
browserVersion: "125.0",
"goog:chromeOptions": {
args: ["--hide-scrollbars", "--headless=new"],
},
},
},
},
} satisfies ConfigInput;
gridUrl
URL грида (адрес, на котором слушает ChromeDriver/Selenium Standalone/Sauce Labs/и т.д.).
По умолчанию: http://localhost:4444/wd/hub
.
Также можно использовать значение "local"
, чтобы запускать тесты на локальных браузерах,
управляемых Testplane. Читайте больше в рецепте Как запустить Testplane в локальном
браузере.
baseUrl
Базовый URL тестируемого сервиса. Позволяет более удобно использовать команды browser.url
:
- если целевой адрес начинается с
/
, в начало будет добавленbaseUrl
без path-части. - если целевой адрес не начинается с
/
, в начало будет добавлен весьbaseUrl
.
По умолчанию: http://localhost
.
browserWSEndpoint
Эндпойнт websocket-соединения для подключения к браузеру через Chrome DevTools Protocol (CDP). Например, вы указываете browserWSEndpoint: "ws://YOUR_HOST/devtools"
, к которому в конце будет добавлен идентификатор сеанса браузера: ws://YOUR_HOST/devtools/12345
, где 12345
— это идентификатор сеанса.
Значение по умолчанию: null
. Означает, что Testplane попытается самостоятельно определить эндпойнт для веб-сокета.
automationProtocol
Протокол общения с браузером. Доступные значения: webdriver
и devtools
. См. также WebDriver vs CDP. По умолчанию: webdriver
.
sessionEnvFlags
Флаги окружения задают протоколы, которые будут использоваться в созданной сессии браузера. По умолчанию флаги окружения автоматически устанавливаются в соответствии с заданными desiredCapabilities
. Однако в редких случаях они могут принимать некорректные значения и тогда с помощью этой опции их можно будет задать явно.
Доступные флаги:
Флаг | Протоколы |
isW3C | WebDriverProtocol или по умолчанию JsonWProtocol |
isChrome | ChromiumProtocol |
isMobile | |
isSauce | |
isSeleniumStandalone | Специальные команды для Selenium при запуске тестов в Selenium Grid или с помощью Selenium Standalone Server. |
Например:
import type { ConfigInput } from "testplane";
export default {
browsers: {
"chrome-phone": {
// ...
sessionEnvFlags: {
isMobile: true,
},
},
},
} satisfies ConfigInput;
windowSize
Размеры окна браузера. Если не указывать, то размер окна будет зависеть от WebDriver'а. Можно указывать как строку, например, 800x1000
или как объект с ключами width
и height
, значениями которых нужно указать целые числа.
Например:
const browserOptions = {
windowSize: "800x1000",
};
и
const browserOptions = {
windowSize: {
width: 800,
height: 1000,
},
};
эквивалентны между собой.
Настройка разрешения для браузера Opera или для мобильных браузеров не работает, так как эти браузеры используют только полноэкранный режим.
headless
Позволяет управлять запуском браузера в headless режиме (без видимого отображения браузера). Можно задавать как boolean
значение, а с Chrome версии 112 — можно задавать как строку "new" | "old"
. Подробнее про новый headless режим — в блоге Chrome.
По умолчанию: null
(определяется на стороне браузера).
Таймауты
Параметр | Тип | По умолчанию | Описание |
waitTimeout | number | 3000 | Таймаут для событий на веб-странице, в мс. |
waitInterval | number | 500 | Интервал для событий на веб-странице, в мс. |
httpTimeout | number | 30000 | Таймаут для любы х запросов к Selenium-серверу, в мс. |
urlHttpTimeout | number | = httpTimeout | Таймаут для запроса /url к Selenium-серверу, в мс. |
pageLoadTimeout | number | 20000 | Таймаут для полной загрузки страницы, в мс. |
sessionRequestTimeout | number | = httpTimeout | Таймаут запроса сессии браузера, в мс. |
sessionQuitTimeout | number | 5000 | Таймаут для завершения сессии, в мс. |
testTimeout | number | null | Таймаут для прогона теста, в мс. Если значение не задано, то будет использован общий таймаут для всех браузеров, который задается настройкой system.mochaOpts.timeout. |
waitTimeout
Таймаут для событий на веб-странице, в миллисекундах. По умолчанию: 3000
мс (3 секунды).
Применя ется в команде waitUntil, которая используется во всех waitFor*
-командах при поиске заданного элемента на странице.
Например, при выполнении команды browser.$('.element').click()
подкоманда $('element')
будет по умолчанию ждать существования элемента до 3000 мс, прежде чем кликнуть по нему.
waitInterval
Интервал для событий на веб-странице, в миллисекундах. По умолчанию: 500
мс.
Применяется в команде waitUntil, которая используется во всех waitFor*
-командах при поиске заданного элемента на странице.
Например, при выполнении команды browser.$('.element').click()
подкоманда $('element')
будет по умолчанию проверять существование элемента каждые 500 мс.
httpTimeout
Таймаут для любых запросов к Selenium-серверу, в миллисекундах. По умолчанию: 30000
мс.
urlHttpTimeout
Таймаут для запроса /url
к Selenium-серверу, в миллисекундах. Иногда при открытии ссылки на стороне сервера выполняется масса логики в мидлварах, из-за чего ссылка долго открывается. Чтобы не поднимать из-за этого таймаут для всех команд, Testplane позволяет настроить отдельный таймаут для запроса /url
.
pageLoadTimeout
Таймаут для полной загрузки страницы, в миллисекундах. По умолчанию: 20000
мс.
sessionRequestTimeout
Таймаут для запроса сессии браузера, в миллисекундах. По умолчанию берет значение настройки httpTimeout
.
sessionQuitTimeout
Таймаут для завершения сессии, в миллисекундах. По умолчанию: 5000
мс.
testTimeout
Таймаут для прогона теста, в миллисекундах. При использовании для набора тестов (suite), будет применяться для всех тестов и хуков внутри этого набора тестов.
Если значение не задано, то будет использован общий таймаут для всех браузеров, который задается настройкой system.mochaOpts.timeout.
Запуск тестов
Параметр | Тип | По умолчанию | Описание |
sessionsPerBrowser | number | 1 | Число сессий, которые будут запущены одновременно для конкретного браузера. |
testsPerSession | number | Infinity | Сколько тестов можно запускать последовательно в одной сессии браузера. Параметр ограничивает переиспользование сессии, чтобы не допустить падения тестов из-за деградации браузера, и не имеет отношения к параллельному запуску тестов. |
retry | number | 0 | Сколько раз нужно перезапускать падающий тест. |
shouldRetry | (data: FailedTestData) => boolean | см. описание | Функция, которая определяет нужен ли ретрай. По умолчанию задается функция, которая возвращает true, если retry > 0, и false, если retry == 0. |
strictTestsOrder | boolean | false | Гарантировать строгий порядок тестов. Если true, то функция API testplane.readTests будет всегда возвращать один и тот же результат. |
passive | boolean | false | Позволяет сделать браузер пассивным. В пассивных браузерах тесты не запускаются по умолчанию. Доступна с testplane@8.16.0. Внимание: есть ограничения, см. ниже. |
openAndWaitOpts | OpenAndWaitOpts | см. описание | Позволяет задать дефолтные опции для команды browser.openAndWait . |
isolation | boolean | true для Chrome 93+ | Включает режим изоляции с помощью браузерных контекстов. |
sessionsPerBrowser
Число сессий, которые будут запущены одновременно для конкретного браузера. По умолчанию: 1
.
testsPerSession
Параметр определяет сколько тестов можно запускать последовательно в одной сессии браузера. Может быть полезно, чтобы ограничить переиспользование сессии. Если одну и ту же сессию браузера использовать много раз для прогона различных тестов, то в какой-то момент браузер может начать деградировать. И это начнет влиять на прогон тестов, приводя к их п адениям. После того как будет достигнут лимит тестов, сессия будет закрыта и запустится новая сессия.
По умолчанию: Infinity
. То есть сессия будет переиспользована бесконечное число раз. Однако в реальной эксплуатации возможны ограничения со стороны грида, в рамках которого запускаются браузеры. Например, грид может ограничивать со своей стороны максимальное время жизни одной сессии, и тогда количество тестов, которые окажутся выполненными в рамках одной сессии, будет определяться временем её жизни.
Будьте внимательны: данный параметр не имеет отношения к параллельному запуску тестов.
retry
Сколько раз нужно запустить тест снова, если он будет падать. По умолчанию: 0
.
shouldRetry
Функция, которая определяет нужен ли ретрай. Должна возвращать значение типа Boolean
. По умолчанию задается функция, которая возвращает true
, если ещё остались доступные ретраи, и false
, если достигнут предел ретраев для теста (см. настройку retry).
Аргументом данной функции является объект со следующими полями:
interface FailedTestData {
ctx: {
id(): string;
browserId: string;
sessionId: string;
};
retriesLeft: number;
error?: Error;
}
strictTestsOrder
Данная опция включает гарантию строгого порядка чтения тестов. По умолчанию: false
.
passive
Доступна с testplane@8.16.0.
В данный момент эта оп ция не работает с html-reporter. В данный момент мы рекомендуем продолжить использовать плагин hermione-passive-browsers. Обратите внимание, что нельзя использовать плагин и эту опцию одновременно. Мы уже работаем над исправлением проблемы.
Позволяет сделать браузер пассивным. В пассивных браузерах тесты не запускаются по умолчанию. С помощью хелпера testplane.also.in
можно включить тест или сьют, перед которым он указан.
По умолчанию: false
.
openAndWaitOpts
Позволяет задать опции, которые нужно использовать при вызове команды browser.openAndWait
.
По умолчанию:
const defaultOpenAndWaitOpts = {
waitNetworkIdle: true,
waitNetworkIdleTimeout: 500,
failOnNetworkError: true,
ignoreNetworkErrorsPatterns: [],
};