Условное выполнение кода для браузеров

Условное выполнение кода играет важную роль при тестировании веб-приложений с использованием Playwright. Это позволяет динамически изменять поведение тестов в зависимости от различных факторов, таких как состояние страницы, тип устройства или текущая версия браузера. В этом контексте условное выполнение может включать проверку элементов, выполнение кода только для определённых браузеров, а также обработку специфичных сценариев для разных устройств или операционных систем.

1. Основы условного выполнения

Playwright предоставляет инструменты для работы с браузерами, с помощью которых можно проверять состояние элементов, состояние страницы и различные параметры браузера. Условное выполнение можно использовать для того, чтобы адаптировать тесты под различные условия, такие как:

  • Тип браузера (Chrome, Firefox, WebKit).
  • Устройство (мобильное или десктопное).
  • Операционная система.
  • Текущий URL или состояние страницы.

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

2. Работа с браузерами

Playwright поддерживает несколько популярных браузеров: Chromium, Firefox и WebKit. Каждый из них имеет свои особенности, и иногда бывает нужно выполнить разные действия в зависимости от того, какой браузер используется для тестирования.

Для проверки текущего браузера можно использовать объект browser в Playwright. Например:

const { chromium, firefox, webkit } = require('playwright');

let browser;
if (process.env.BROWSER === 'firefox') {
  browser = await firefox.launch();
} else if (process.env.BROWSER === 'webkit') {
  browser = await webkit.launch();
} else {
  browser = await chromium.launch();
}

В данном примере мы проверяем значение переменной окружения BROWSER и в зависимости от её значения выбираем нужный браузер.

3. Условие для мобильных устройств

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

Для создания условия для мобильных устройств можно использовать метод browserContext.newPage() в сочетании с эмуляцией устройства:

const { devices } = require('playwright');
const iPhone = devices['iPhone 11'];

const context = await browser.newContext({
  ...iPhone
});

const page = await context.newPage();
await page.goto('https://example.com');

// Условие для мобильных устройств
if (await page.viewportSize().width <= 500) {
  // Выполняем действия для мобильного устройства
}

Здесь происходит проверка ширины экрана, и если она меньше или равна 500 пикселям, тест выполняется как для мобильного устройства.

4. Проверка состояния страницы

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

Для этого можно использовать методы Playwright, такие как page.isVisible() или page.waitForSelector(). Эти методы помогают не только проверять наличие элементов, но и ожидать их появления на странице:

const loginButton = await page.$('button.login');
if (loginButton) {
  await loginButton.click();
} else {
  // Если кнопка не найдена, пропускаем шаг
}

Этот код проверяет наличие кнопки входа на странице и, если кнопка существует, кликает по ней. В противном случае шаг пропускается.

5. Условное выполнение на основе URL

Часто бывает необходимо выполнить разные действия в зависимости от URL страницы. Например, на одной странице тестируется функциональность поиска, на другой — корзины покупок.

Можно использовать метод page.url(), чтобы получить текущий URL страницы и выполнить различные действия в зависимости от этого:

const currentUrl = page.url();
if (currentUrl.includes('search')) {
  // Выполняем тесты для страницы поиска
} else if (currentUrl.includes('cart')) {
  // Выполняем тесты для страницы корзины
}

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

6. Условное выполнение на основе операционной системы

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

Для проверки операционной системы можно использовать модуль os в Node.js:

const os = require('os');

if (os.platform() === 'win32') {
  // Выполняем тесты для Windows
} else if (os.platform() === 'darwin') {
  // Выполняем тесты для macOS
} else if (os.platform() === 'linux') {
  // Выполняем тесты для Linux
}

Этот код позволяет условно запускать тесты, ориентируясь на операционную систему, на которой выполняется тест.

7. Использование ожиданий и таймаутов

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

Методы, такие как page.waitForSelector() или page.waitForEvent(), могут быть использованы для условного выполнения кода, если элемент или событие не появляются сразу:

try {
  await page.waitForSelector('div.success', { timeout: 5000 });
  // Выполняем тесты после появления элемента
} catch (error) {
  // Если элемент не появился в течение 5 секунд
  console.log('Элемент не найден');
}

Это условное выполнение позволяет ожидать появления элементов или событий и выполнять тесты, только если определённые условия выполнены.

8. Пример условного теста для нескольких сценариев

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

if (os.platform() === 'win32' && browserType === 'chromium') {
  // Выполняем тесты для Chromium на Windows
  await page.goto('https://example.com');
  await page.fill('input[name="search"]', 'Playwright');
} else if (os.platform() === 'darwin' && browserType === 'webkit') {
  // Выполняем тесты для WebKit на macOS
  await page.goto('https://example.com');
  await page.click('button.download');
}

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

9. Заключение

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