Глобальные переменные в контексте тестирования с использованием WebDriverIO играют важную роль, особенно когда необходимо управлять состоянием тестов, обмениваться данными между различными шагами теста или сделать код более читаемым и удобным для поддержки. В этой части рассмотрим, как правильно использовать глобальные переменные в WebDriverIO, их преимущества и возможные риски.
Глобальная переменная — это переменная, которая доступна во всей области видимости вашего теста. Она может быть использована в разных частях теста или даже между разными тестами. В WebDriverIO глобальные переменные могут быть использованы для хранения данных, которые должны быть доступны для различных шагов, или для выполнения операций, которые должны быть выполнены до, после или в процессе теста.
В WebDriverIO глобальные переменные могут быть определены разными способами, в зависимости от того, какие данные нужно передавать.
WebDriverIO позволяет использовать несколько типов глобальных переменных, такие как:
browser,
element, $, $$)В WebDriverIO есть несколько глобальных объектов, доступных в контексте тестов, например:
browser — объект для взаимодействия с браузером.$ и $$ — для поиска элементов на
странице.element и elements — для работы с
элементами DOM.Эти объекты доступны на протяжении выполнения теста и позволяют вам взаимодействовать с браузером и DOM. Они являются встроенными переменными WebDriverIO, не требующими явного объявления.
Пример использования:
describe('Тестирование страницы', () => {
it('Проверка заголовка', () => {
browser.url('https://example.com');
const title = browser.getTitle();
console.log(title); // Выводит заголовок страницы
});
});
В этом примере глобальная переменная browser
используется для получения заголовка страницы и выполнения других
операций.
Вы можете определить глобальные переменные в файле конфигурации
WebDriverIO (wdio.conf.js). Эти переменные могут быть
полезны для задания общих параметров, таких как URL базы, путь к отчетам
или настройки для тестов.
Пример конфигурации с использованием глобальных переменных:
exports.config = {
specs: ['./tests/*.js'],
baseUrl: 'https://example.com', // глобальная переменная для базового URL
capabilities: [{
browserName: 'chrome',
}],
before: function (capabilities, specs) {
global.customTimeout = 5000; // Глобальная переменная для таймаута
}
};
В этом примере переменная baseUrl задаёт общий URL для
всех тестов, а customTimeout используется в коде тестов для
задания времени ожидания.
WebDriverIO позволяет работать с переменными на более высоком уровне
с помощью функций API, например, через механизм browser или
специальные утилиты, такие как browser.getCookies(),
browser.execute() и другие. Такие глобальные переменные
обычно предоставляют данные о состоянии браузера, о текущей сессии или
окружении.
Пример использования глобальной переменной через API:
describe('Тестирование сессии', () => {
it('Проверка куки', () => {
browser.url('https://example.com');
const cookies = browser.getCookies();
console.log(cookies); // Выводит все куки текущей сессии
});
});
Удобство в написании тестов: Глобальные переменные позволяют не повторять один и тот же код многократно, что делает тесты более компактными и читаемыми.
Общий доступ к данным: Когда данные или состояния должны быть использованы несколькими тестами или шагами теста, глобальные переменные позволяют легко передавать информацию между ними.
Параметризация тестов: Используя глобальные переменные, можно задавать параметры, такие как URL сайта, данные для логина и другие параметры, которые будут использоваться в нескольких местах.
Конфигурируемость: Глобальные переменные могут быть настроены через конфигурационные файлы WebDriverIO, что даёт гибкость в настройке тестового окружения.
Проблемы с поддерживаемостью: Использование глобальных переменных может усложнить поддержку тестов, особенно когда переменные изменяются в разных частях теста. Это делает код сложным для отладки и понимания.
Конфликты имен: При использовании глобальных переменных существует риск конфликтов имен, когда несколько частей теста могут использовать одинаковые переменные с разными значениями. Это может привести к нежелательным побочным эффектам.
Невозможность изоляции тестов: Глобальные переменные делают тесты менее изолированными. Это может вызвать проблемы, если один тест изменяет состояние переменной, которое затем влияет на другие тесты.
Неопределённость состояния: Глобальные переменные могут содержать непредсказуемые данные, если они изменяются между тестами, что затрудняет диагностику и предсказуемость результатов.
Минимизация использования глобальных переменных: Постоянное использование глобальных переменных следует избегать, особенно если переменные используются для хранения данных, которые специфичны для конкретных тестов.
Использование окружений и конфигураций: Все данные, которые должны быть доступны во всей серии тестов, лучше хранить в конфигурационных файлах или использовать специальные переменные окружения, а не определять их напрямую в коде теста.
Явное управление состоянием: При использовании
глобальных переменных важно следить за тем, чтобы каждый тест начинался
с “чистого” состояния. Для этого можно использовать функции
before и after в конфигурации
WebDriverIO.
Именование переменных: Чтобы избежать конфликтов и путаницы, глобальные переменные должны иметь уникальные и описательные имена, чтобы было понятно, что они хранят и для чего используются.
Глобальные переменные в WebDriverIO могут значительно упростить создание и поддержание тестов, однако их использование требует внимательности. Они удобны для хранения данных, которые используются во многих частях теста, но также могут привести к проблемам с поддерживаемостью и изоляцией тестов. Своевременное и правильное управление состоянием глобальных переменных и их грамотная настройка в конфигурации помогут избежать множества потенциальных ошибок и улучшат качество тестирования.