Использование глобальных переменных

Глобальные переменные в контексте тестирования с использованием WebDriverIO играют важную роль, особенно когда необходимо управлять состоянием тестов, обмениваться данными между различными шагами теста или сделать код более читаемым и удобным для поддержки. В этой части рассмотрим, как правильно использовать глобальные переменные в WebDriverIO, их преимущества и возможные риски.

Что такое глобальная переменная?

Глобальная переменная — это переменная, которая доступна во всей области видимости вашего теста. Она может быть использована в разных частях теста или даже между разными тестами. В WebDriverIO глобальные переменные могут быть использованы для хранения данных, которые должны быть доступны для различных шагов, или для выполнения операций, которые должны быть выполнены до, после или в процессе теста.

В WebDriverIO глобальные переменные могут быть определены разными способами, в зависимости от того, какие данные нужно передавать.

Использование глобальных переменных в WebDriverIO

WebDriverIO позволяет использовать несколько типов глобальных переменных, такие как:

  1. Глобальные переменные теста (browser, element, $, $$)
  2. Глобальные переменные, определённые в конфигурации WebDriverIO
  3. Глобальные переменные, доступные через API WebDriverIO

1. Глобальные переменные теста

В WebDriverIO есть несколько глобальных объектов, доступных в контексте тестов, например:

  • browser — объект для взаимодействия с браузером.
  • $ и $$ — для поиска элементов на странице.
  • element и elements — для работы с элементами DOM.

Эти объекты доступны на протяжении выполнения теста и позволяют вам взаимодействовать с браузером и DOM. Они являются встроенными переменными WebDriverIO, не требующими явного объявления.

Пример использования:

describe('Тестирование страницы', () => {
  it('Проверка заголовка', () => {
    browser.url('https://example.com');
    const title = browser.getTitle();
    console.log(title); // Выводит заголовок страницы
  });
});

В этом примере глобальная переменная browser используется для получения заголовка страницы и выполнения других операций.

2. Глобальные переменные, определённые в конфигурации

Вы можете определить глобальные переменные в файле конфигурации 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 используется в коде тестов для задания времени ожидания.

3. Глобальные переменные через API WebDriverIO

WebDriverIO позволяет работать с переменными на более высоком уровне с помощью функций API, например, через механизм browser или специальные утилиты, такие как browser.getCookies(), browser.execute() и другие. Такие глобальные переменные обычно предоставляют данные о состоянии браузера, о текущей сессии или окружении.

Пример использования глобальной переменной через API:

describe('Тестирование сессии', () => {
  it('Проверка куки', () => {
    browser.url('https://example.com');
    const cookies = browser.getCookies();
    console.log(cookies); // Выводит все куки текущей сессии
  });
});

Преимущества использования глобальных переменных

  1. Удобство в написании тестов: Глобальные переменные позволяют не повторять один и тот же код многократно, что делает тесты более компактными и читаемыми.

  2. Общий доступ к данным: Когда данные или состояния должны быть использованы несколькими тестами или шагами теста, глобальные переменные позволяют легко передавать информацию между ними.

  3. Параметризация тестов: Используя глобальные переменные, можно задавать параметры, такие как URL сайта, данные для логина и другие параметры, которые будут использоваться в нескольких местах.

  4. Конфигурируемость: Глобальные переменные могут быть настроены через конфигурационные файлы WebDriverIO, что даёт гибкость в настройке тестового окружения.

Риски и проблемы при использовании глобальных переменных

  1. Проблемы с поддерживаемостью: Использование глобальных переменных может усложнить поддержку тестов, особенно когда переменные изменяются в разных частях теста. Это делает код сложным для отладки и понимания.

  2. Конфликты имен: При использовании глобальных переменных существует риск конфликтов имен, когда несколько частей теста могут использовать одинаковые переменные с разными значениями. Это может привести к нежелательным побочным эффектам.

  3. Невозможность изоляции тестов: Глобальные переменные делают тесты менее изолированными. Это может вызвать проблемы, если один тест изменяет состояние переменной, которое затем влияет на другие тесты.

  4. Неопределённость состояния: Глобальные переменные могут содержать непредсказуемые данные, если они изменяются между тестами, что затрудняет диагностику и предсказуемость результатов.

Лучшие практики использования глобальных переменных

  1. Минимизация использования глобальных переменных: Постоянное использование глобальных переменных следует избегать, особенно если переменные используются для хранения данных, которые специфичны для конкретных тестов.

  2. Использование окружений и конфигураций: Все данные, которые должны быть доступны во всей серии тестов, лучше хранить в конфигурационных файлах или использовать специальные переменные окружения, а не определять их напрямую в коде теста.

  3. Явное управление состоянием: При использовании глобальных переменных важно следить за тем, чтобы каждый тест начинался с “чистого” состояния. Для этого можно использовать функции before и after в конфигурации WebDriverIO.

  4. Именование переменных: Чтобы избежать конфликтов и путаницы, глобальные переменные должны иметь уникальные и описательные имена, чтобы было понятно, что они хранят и для чего используются.

Заключение

Глобальные переменные в WebDriverIO могут значительно упростить создание и поддержание тестов, однако их использование требует внимательности. Они удобны для хранения данных, которые используются во многих частях теста, но также могут привести к проблемам с поддерживаемостью и изоляцией тестов. Своевременное и правильное управление состоянием глобальных переменных и их грамотная настройка в конфигурации помогут избежать множества потенциальных ошибок и улучшат качество тестирования.