Разные браузеры в одном тесте

WebdriverIO позволяет запускать тесты в разных браузерах и на различных устройствах, что даёт гибкость при тестировании приложений. Возможность тестировать одно и то же приложение в нескольких браузерах в одном тесте даёт возможность обнаруживать проблемы, которые могут возникать из-за различий в поведении браузеров.

Механизм работы с несколькими браузерами

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

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

Настройка конфигурации

Чтобы запускать тесты в нескольких браузерах, в первую очередь необходимо настроить файл конфигурации wdio.conf.js. В данном файле указывается, какие браузеры будут использоваться для тестирования. Например, можно указать использование Chrome и Firefox, а также настроить параметры для каждого из них.

Пример конфигурации для запуска в нескольких браузерах:

exports.config = {
  // Список браузеров для запуска
  capabilities: [
    {
      browserName: 'chrome',
      platformName: 'Windows 10',
      'goog:chromeOptions': {
        args: ['--headless', '--disable-gpu']
      }
    },
    {
      browserName: 'firefox',
      platformName: 'Windows 10',
      'moz:firefoxOptions': {
        args: ['--headless']
      }
    }
  ],
  
  // Остальная конфигурация, например, тестовые фреймворки и репортеры
  framework: 'mocha',
  reporters: ['spec'],
  services: ['selenium-standalone']
};

В этом примере конфигурация позволяет запускать тесты как в браузере Chrome, так и в Firefox на платформе Windows 10. Здесь важно, что каждый браузер может иметь свои уникальные настройки (например, аргументы командной строки), которые также можно указать в конфигурации.

Запуск тестов параллельно

Для запуска тестов параллельно в разных браузерах можно использовать флаг maxInstances, который указывает количество экземпляров для каждого браузера.

Пример:

exports.config = {
  maxInstances: 5,  // Ограничение количества экземпляров для каждого браузера
  capabilities: [
    {
      browserName: 'chrome',
    },
    {
      browserName: 'firefox',
    }
  ]
};

При такой настройке WebdriverIO будет запускать до 5 экземпляров каждого браузера параллельно. Это ускоряет процесс тестирования и позволяет сэкономить время.

Совмещение нескольких браузеров в одном тесте

Если требуется запустить тесты в одном браузере, а затем переключиться на другой, WebdriverIO поддерживает возможность смены контекста браузера в рамках одного теста. Это можно сделать с помощью метода browser.switchWindow().

Пример:

it('Тестирование приложения в нескольких браузерах', async () => {
  // Открываем первую страницу в Chrome
  await browser.url('https://example.com');
  await browser.pause(1000);

  // Переключаемся на Firefox
  await browser.switchWindow('firefox');
  await browser.url('https://example.com');
  await browser.pause(1000);
});

Этот подход позволяет тестировать поведение приложения на разных браузерах без необходимости писать отдельные тесты для каждого из них.

Запуск нескольких браузеров с использованием Grid

Использование Selenium Grid позволяет распределить тесты между разными серверами и браузерами. Это даёт возможность запустить тесты на различных конфигурациях браузеров и операционных систем. WebdriverIO интегрируется с Selenium Grid через сервис selenium-standalone, который предоставляет возможность подключиться к удалённым серверам и выполнять тесты.

Пример конфигурации для работы с Selenium Grid:

exports.config = {
  services: [
    ['selenium-standalone', {
      logPath: './logs',
      installArgs: {
        drivers: { chrome: { version: '91.0.4472.101' }, firefox: { version: '89.0.2' } }
      },
      args: { seleniumArgs: ['-host', '127.0.0.1'] }
    }]
  ],
  capabilities: [
    {
      browserName: 'chrome',
      platformName: 'Windows 10',
    },
    {
      browserName: 'firefox',
      platformName: 'Windows 10',
    }
  ]
};

В данной конфигурации задаются драйверы для Chrome и Firefox, а также параметры для их установки через Selenium Grid.

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

Тестирование в нескольких браузерах может выявить ряд проблем, которые не были бы заметны при тестировании только в одном браузере. Например, различия в рендеринге элементов на странице, особенности работы с DOM, различия в скорости выполнения JavaScript или особенности обработки событий.

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

  1. Проверить поддержку всех используемых CSS и JavaScript функций в разных браузерах.
  2. Использовать полифиллы и вспомогательные библиотеки, чтобы гарантировать одинаковое поведение функций в старых версиях браузеров.
  3. Обращать внимание на время отклика и скорости рендеринга при запуске тестов на различных устройствах и платформах.

Таким образом, тестирование в разных браузерах с использованием WebdriverIO позволяет находить и устранять баги, которые могут возникать из-за особенностей реализации браузеров. Это способствует улучшению качества программного обеспечения и увеличивает его совместимость с разными платформами и браузерами.