Написание тестов
Введение
Тесты Playwright просты, они
- выполняют действия, и
- проверяют состояние по ожиданиям.
Нет необходимости ждать чего-либо перед выполнением действия: Playwright автоматически ожидает выполнения различных проверок действительности перед каждым действием.
Также нет необходимости обрабатывать условия гонки при выполнении проверок — утверждения Playwright разработаны таким образом, чтобы описывать ожидания, которые в конечном итоге должны быть выполнены.
Вот и всё! Эти решения позволяют пользователям Playwright забыть о нестабильных тайм-аутах и проверках в своих тестах.
Вы узнаете
- Как написать первый тест
- Как выполнять действия
- Как использовать утверждения
- Как тесты выполняются изолированно
- Как использовать хуки тестов
Первый тест
Посмотрите на следующий пример, чтобы увидеть, как написать тест.
import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Expect a title "to contain" a substring.
await expect(page).toHaveTitle(/Playwright/);
});
test('get started link', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Click the get started link.
await page.getByRole('link', { name: 'Get started' }).click();
// Expects page to have a heading with the name of Installation.
await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
}); примечаниеДобавьте
// @ts-checkв начале каждого файла теста при использовании JavaScript в VS Code, чтобы получить автоматическую проверку типов.
Действия
Навигация
Большинство тестов начнут с перехода на страницу по URL. После этого тест сможет взаимодействовать с элементами страницы.
await page.goto('https://playwright.dev/'); Playwright будет ожидать, пока страница достигнет состояния загрузки, прежде чем продолжить. Узнайте больше об параметрах page.goto().
Взаимодействия
Выполнение действий начинается с поиска элементов. Playwright использует API локеров для этого. Локаторы представляют способ поиска элемента(ов) на странице в любой момент, узнайте больше о различных типах доступных локаторов. Playwright будет ждать, пока элемент станет действительным перед выполнением действия, поэтому нет необходимости ждать его появления.
// Create a locator.
const getStarted = page.getByRole('link', { name: 'Get started' });
// Click it.
await getStarted.click(); В большинстве случаев это будет написано в одной строке:
await page.getByRole('link', { name: 'Get started' }).click(); Основные действия
Это список самых популярных действий Playwright. Обратите внимание, что их намного больше, поэтому обязательно ознакомьтесь с разделом Locator API, чтобы узнать больше о них.
| Действие | Описание |
|---|---|
| locator.check() | Установить флажок в поле ввода |
| locator.click() | Нажать на элемент |
| locator.uncheck() | Снять флажок в поле ввода |
| locator.hover() | Навести указатель мыши на элемент |
| locator.fill() | Заполнить поле формы, ввести текст |
| locator.focus() | Сфокусировать элемент |
| locator.press() | Нажать одиночную клавишу |
| locator.setInputFiles() | Выбрать файлы для загрузки |
| locator.selectOption() | Выбрать опцию в раскрывающемся списке |
Утверждения
Playwright включает утверждения тестов в виде expect функции. Чтобы сделать утверждение, вызовите expect(value) и выберите совпадение, отражающее ожидание.
Существует много общих совпадений, таких как toEqual, toContain, toBeTruthy, которые могут использоваться для проверки любых условий.
expect(success).toBeTruthy();
Playwright также включает асинхронные совпадения, которые будут ожидать, пока ожидаемое условие не будет выполнено. Использование этих совпадений позволяет делать тесты не хрупкими и устойчивыми. Например, этот код будет ожидать, пока заголовок страницы не будет содержать "Playwright":
await expect(page).toHaveTitle(/Playwright/);
Вот список самых популярных асинхронных утверждений. Обратите внимание, что их много больше для ознакомления:
| Утверждение | Описание |
|---|---|
| expect(locator).toBeChecked() | Флажок установлен |
| expect(locator).toBeEnabled() | Элемент доступен |
| expect(locator).toBeVisible() | Элемент виден |
| expect(locator).toContainText() | Элемент содержит текст |
| expect(locator).toHaveAttribute() | Элемент имеет атрибут |
| expect(locator).toHaveCount() | Список элементов имеет заданную длину |
| expect(locator).toHaveText() | Элемент соответствует тексту |
| expect(locator).toHaveValue() | Элемент ввода имеет значение |
| expect(page).toHaveTitle() | Страница имеет заголовок |
| expect(page).toHaveURL() | Страница имеет URL |
Изоляция тестов
Playwright Test основана на концепции наборов тестов, таких как встроенный набор тестов для страниц, который передается в ваш тест. Страницы изолированы между тестами из-за контекста браузера, что эквивалентно совершенно новой профилю браузера, где каждый тест получает свежую среду, даже когда несколько тестов выполняются в одном браузере.
import { test } from '@playwright/test';
test('example test', async ({ page }) => {
// "page" belongs to an isolated BrowserContext, created for this specific test.
});
test('another test', async ({ page }) => {
// "page" in this second test is completely isolated from the first test.
}); Использование хуков тестов
Вы можете использовать различные хуки тестов, такие как test.describe для объявления группы тестов и test.beforeEach и test.afterEach, которые выполняются до/после каждого теста. Другие хуки включают test.beforeAll и test.afterAll, которые выполняются один раз на работник до/после всех тестов.
import { test, expect } from '@playwright/test';
test.describe('navigation', () => {
test.beforeEach(async ({ page }) => {
// Go to the starting url before each test.
await page.goto('https://playwright.dev/');
});
test('main navigation', async ({ page }) => {
// Assertions use the expect API.
await expect(page).toHaveURL('https://playwright.dev/');
});
}); Что дальше
- Запуск одного теста, нескольких тестов, режим с графическим интерфейсом
- Генерация тестов с помощью Codegen
- Просмотр трассировки ваших тестов
- Исследование режима пользовательского интерфейса
- Запуск тестов на CI с GitHub Actions
© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/writing-tests