Playwright — это современный инструмент для автоматизации тестирования веб-приложений. Он поддерживает множество функций, включая автоматизацию браузеров, работу с сетью, файлами и многое другое. Одной из ключевых возможностей Playwright является встроенная поддержка assertions (проверок) через библиотеку expect
, которая позволяет легко проверять состояние элементов, страниц и данных.
В этой статье мы подробно рассмотрим, как использовать expect
в Playwright для написания надежных и читаемых тестов.
Что такое expect
?
expect
— это функция, которая используется для написания assertions (проверок) в тестах. Она позволяет проверять, соответствует ли фактическое значение ожидаемому. Если проверка не проходит, тест завершается с ошибкой, что помогает быстро выявить проблемы.
Playwright использует библиотеку expect
из пакета Jest, что делает её мощным и гибким инструментом для тестирования.
Основные методы expect
Вот список наиболее часто используемых методов expect
в Playwright:
toBe
: Проверяет строгое равенство (сравнение по ссылке или значению).toEqual
: Проверяет глубокое равенство (сравнение объектов и массивов).toBeTruthy
: Проверяет, что значение является «истинным» (true, не null, не undefined, не 0, не пустая строка).toBeFalsy
: Проверяет, что значение является «ложным» (false, null, undefined, 0, пустая строка).toContain
: Проверяет, что массив или строка содержит определённый элемент или подстроку.toHaveLength
: Проверяет длину массива или строки.toMatch
: Проверяет, что строка соответствует регулярному выражению.toBeGreaterThan
/toBeLessThan
: Проверяет, что число больше или меньше определённого значения.toBeCloseTo
: Проверяет, что число близко к определённому значению (с учётом погрешности).toHaveText
: Проверяет, что элемент содержит определённый текст.toHaveAttribute
: Проверяет, что элемент имеет определённый атрибут с заданным значением.toBeVisible
: Проверяет, что элемент виден на странице.toBeEnabled
/toBeDisabled
: Проверяет, что элемент доступен или недоступен для взаимодействия.
Примеры использования expect
в Playwright
Рассмотрим несколько примеров, как использовать expect
в тестах.
1. Проверка текста элемента
const { test, expect } = require('@playwright/test');
test('Проверка текста на странице', async ({ page }) => {
await page.goto('https://example.com');
const heading = page.locator('h1');
await expect(heading).toHaveText('Example Domain');
});
В этом примере мы проверяем, что элемент <h1>
содержит текст «Example Domain».
2. Проверка видимости элемента
test('Проверка видимости кнопки', async ({ page }) => {
await page.goto('https://example.com');
const button = page.locator('button');
await expect(button).toBeVisible();
});
Здесь мы проверяем, что кнопка видна на странице.
3. Проверка атрибута элемента
test('Проверка атрибута ссылки', async ({ page }) => {
await page.goto('https://example.com');
const link = page.locator('a');
await expect(link).toHaveAttribute('href', 'https://www.iana.org/domains/example');
});
В этом примере мы проверяем, что ссылка имеет атрибут href
с определённым значением.
4. Проверка длины массива
test('Проверка количества элементов списка', async ({ page }) => {
await page.goto('https://example.com');
const items = page.locator('ul li');
await expect(items).toHaveCount(3);
});
Здесь мы проверяем, что список содержит 3 элемента.
5. Проверка числового значения
test('Проверка числового значения', async ({ page }) => {
await page.goto('https://example.com');
const counter = page.locator('#counter');
const value = await counter.innerText();
await expect(Number(value)).toBeGreaterThan(10);
});
В этом примере мы проверяем, что значение счётчика больше 10.
6. Проверка с использованием регулярного выражения
test('Проверка текста с использованием регулярного выражения', async ({ page }) => {
await page.goto('https://example.com');
const paragraph = page.locator('p');
await expect(paragraph).toHaveText(/Example Domain/);
});
Здесь мы проверяем, что текст элемента соответствует регулярному выражению.
7. Проверка состояния элемента (включён/выключен)
test('Проверка состояния кнопки', async ({ page }) => {
await page.goto('https://example.com');
const button = page.locator('button');
await expect(button).toBeEnabled();
});
В этом примере мы проверяем, что кнопка доступна для взаимодействия.
Лучшие практики использования expect
- Используйте явные проверки:
- Убедитесь, что проверки точно отражают ожидаемое поведение. Например, вместо
toBeTruthy
лучше использоватьtoBe(true)
, если вы ожидаете конкретное значение.
- Убедитесь, что проверки точно отражают ожидаемое поведение. Например, вместо
- Проверяйте элементы после их загрузки:
- Убедитесь, что элемент загружен на странице перед выполнением проверки. Используйте
await
для ожидания.
- Убедитесь, что элемент загружен на странице перед выполнением проверки. Используйте
- Используйте локаторы:
- Локаторы (
locator
) в Playwright позволяют находить элементы на странице. Используйте их для более читаемых и поддерживаемых тестов.
- Локаторы (
- Проверяйте несколько аспектов:
- Если элемент должен соответствовать нескольким условиям (например, текст и видимость), добавьте несколько проверок.
- Используйте кастомные сообщения об ошибках:
- Вы можете добавить кастомное сообщение об ошибке, чтобы упростить отладку:javascriptCopyawait expect(element).toHaveText(‘Expected Text’, { message: ‘Текст элемента не совпадает’ });
- Избегайте избыточных проверок:
- Не проверяйте то, что уже проверено в других тестах. Это поможет ускорить выполнение тестов.
Ошибки и их решение
- Элемент не найден:
- Убедитесь, что локатор указан правильно. Используйте DevTools для проверки селекторов.
- Элемент не загрузился:
- Добавьте ожидание перед проверкой. Например, используйте
await page.waitForSelector()
.
- Добавьте ожидание перед проверкой. Например, используйте
- Неправильный текст или атрибут:
- Проверьте, что текст или атрибут действительно соответствуют ожидаемым значениям. Убедитесь, что данные не изменяются динамически.
- Тест завершается с ошибкой:
- Проверьте, что все асинхронные операции завершены перед выполнением проверки.
Заключение
expect
в Playwright — это мощный инструмент для написания assertions в тестах. Он позволяет легко проверять состояние элементов, страниц и данных, делая ваши тесты более надёжными и читаемыми. Используя методы expect
и следуя лучшим практикам, вы сможете создавать эффективные и поддерживаемые тесты для ваших веб-приложений.
Добавить комментарий