Spec-Zone.ru › Playwright

Написание тестов

Введение​

Тесты 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API