При тестировании веб-приложений часто возникает необходимость учёта различных особенностей браузеров. Каждый браузер может по-разному интерпретировать код страницы, что влияет на стабильность и предсказуемость тестов. В таких случаях может быть полезным использование условных операторов для исключения конкретных браузеров из набора тестов. WebdriverIO предоставляет несколько способов для реализации таких исключений, позволяя адаптировать тесты под различные браузеры.
Для того чтобы условно исключить выполнение тестов для определённого
браузера, первым шагом необходимо определить, какой браузер в данный
момент используется. В WebdriverIO доступна переменная
browser.capabilities, которая содержит информацию о текущем
браузере, его версии и других характеристиках. Например:
const browserName = browser.capabilities.browserName;
const browserVersion = browser.capabilities.version;
Это позволяет точно определить, какой браузер используется на данный момент, и в дальнейшем использовать эту информацию для настройки условий исключения.
Одним из наиболее простых способов условного исключения браузеров
является использование операторов if. Например, если
требуется выполнить тесты только для браузеров Chrome, то код может
выглядеть следующим образом:
if (browser.capabilities.browserName !== 'chrome') {
return; // Пропуск теста для всех браузеров, кроме Chrome
}
Такой подход легко расширяется для добавления исключений для других браузеров. Например, чтобы исключить Firefox и Safari:
if (browser.capabilities.browserName === 'firefox' || browser.capabilities.browserName === 'safari') {
return; // Пропуск теста для Firefox и Safari
}
Также можно добавить проверку версии браузера:
if (browser.capabilities.browserName === 'chrome' && parseInt(browser.capabilities.version) < 90) {
return; // Пропуск теста для версий Chrome ниже 90
}
WebdriverIO позволяет использовать хуки, которые срабатывают до и
после выполнения тестов. Один из таких хуков — before или
beforeEach, который можно использовать для проверки
браузера до начала выполнения тестов.
Пример использования хука before для исключения тестов в
определённых браузерах:
before(() => {
if (browser.capabilities.browserName === 'firefox') {
console.log('Тесты пропущены для Firefox');
return false; // Пропуск всех тестов в случае использования Firefox
}
});
Если условие выполняется, можно пропустить выполнение тестов, либо
завершить тестовый набор. Важно отметить, что в случае использования
return false в хук, тесты, связанные с данным набором, не
будут выполнены.
В WebdriverIO возможно настроить условные исключения прямо в
конфигурационном файле, определяя, какие браузеры должны быть включены
или исключены из выполнения тестов. Для этого можно использовать
условные конструкции в конфигурационном файле wdio.conf.js,
задавая конфигурацию в зависимости от браузера.
Пример конфигурации для исключения браузеров:
exports.config = {
before: function (capabilities, specs) {
if (capabilities.browserName === 'safari') {
console.log('Пропуск тестов для Safari');
return false; // Пропуск всех тестов для Safari
}
},
capabilities: [
{
browserName: 'chrome',
maxInstances: 1
},
{
browserName: 'firefox',
maxInstances: 1
},
{
browserName: 'safari',
maxInstances: 1
}
]
};
Таким образом, можно настраивать исключения на уровне конфигурации, что позволяет централизованно управлять поддержкой тестов для различных браузеров.
Для упрощения работы с условными исключениями браузеров в WebdriverIO
можно использовать плагины и сторонние решения. Например, пакет
wdio-browserstack-service позволяет легко интегрировать
WebdriverIO с платформой BrowserStack, которая автоматически управляет
браузерами и их версиями. В таких случаях исключения могут быть
настроены через параметры сервиса, упрощая тестирование в облачных
сервисах.
На практике условное исключение браузеров полезно для выполнения специфических тестов, зависящих от функционала браузера, например, для проверки поддержки новейших возможностей CSS, JavaScript или API. Следующий пример иллюстрирует, как это может быть реализовано:
describe('Тесты на поддержку нового API', () => {
it('Должен работать новый API в Chrome', () => {
if (browser.capabilities.browserName === 'chrome') {
// Запускать тесты, требующие нового API, только в Chrome
const isApiSupported = browser.execute(() => {
return window.MyNewApi !== undefined;
});
expect(isApiSupported).toBe(true);
} else {
console.log('Пропуск теста для браузера ' + browser.capabilities.browserName);
}
});
});
В этом примере тесты для нового API выполняются только в Chrome, в то время как для других браузеров выполнение теста пропускается с выводом сообщения в консоль.
Условные исключения браузеров — это мощный инструмент для тестирования веб-приложений в различных условиях. Используя возможности WebdriverIO, можно гибко управлять запуском тестов, исключая те браузеры, которые не поддерживают необходимые функции или вызывают нестабильность тестов. Это позволяет сделать процесс тестирования более адаптивным и эффективным, сосредотачиваясь на нужных браузерах в зависимости от их характеристик и версий.