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 |
| 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: [],
};
isolation
Включает запуск тестов в изолированных браузерных контекстах. Это означает, что testsPerSession может быть задан Infinity, чтобы запускать все тесты в одной сессии и значительно ускорить прогон тестов.
Работает начиная с Chrome 93 и выше.
По умолчанию: true для Chrome 93 и выше, false иначе.