Перейти к основному содержимому

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

Введение

Тесты Playwright просты, они

  • выполняют действия, и
  • проверяют состояние на соответствие ожиданиям.

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

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

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

Вы узнаете

Первый тест

Посмотрите на следующий пример, чтобы увидеть, как написать тест.

UnitTest1.cs
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Playwright;
using Microsoft.Playwright.MSTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace PlaywrightTests;

[TestClass]
public class ExampleTest : PageTest
{
[TestMethod]
public async Task HasTitle()
{
await Page.GotoAsync("https://playwright.dev");

// Ожидаем, что заголовок "содержит" подстроку.
await Expect(Page).ToHaveTitleAsync(new Regex("Playwright"));
}

[TestMethod]
public async Task GetStartedLink()
{
await Page.GotoAsync("https://playwright.dev");

// Клик по ссылке "Get started".
await Page.GetByRole(AriaRole.Link, new() { Name = "Get started" }).ClickAsync();

// Ожидаем, что на странице будет заголовок с именем Installation.
await Expect(Page.GetByRole(AriaRole.Heading, new() { Name = "Installation" })).ToBeVisibleAsync();
}
}

Действия

Навигация

Большинство тестов начнется с перехода страницы на URL. После этого тест сможет взаимодействовать с элементами страницы.

await Page.GotoAsync("https://playwright.dev");

Playwright будет ждать, пока страница достигнет состояния загрузки, прежде чем продолжить. Узнайте больше о параметрах Page.GotoAsync().

Взаимодействия

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

// Создать локатор.
var getStarted = Page.GetByRole(AriaRole.Link, new() { Name = "Get started" });

// Кликнуть по нему.
await getStarted.ClickAsync();

В большинстве случаев это будет записано в одну строку:

await Page.GetByRole(AriaRole.Link, new() { Name = "Get started" }).ClickAsync();

Основные действия

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

ДействиеОписание
Locator.CheckAsync()Установить флажок ввода
Locator.ClickAsync()Кликнуть по элементу
Locator.UncheckAsync()Снять флажок ввода
Locator.HoverAsync()Навести курсор на элемент
Locator.FillAsync()Заполнить поле формы, ввести текст
Locator.FocusAsync()Сфокусироваться на элементе
Locator.PressAsync()Нажать одну клавишу
Locator.SetInputFilesAsync()Выбрать файлы для загрузки
Locator.SelectOptionAsync()Выбрать опцию в выпадающем списке

Утверждения

Playwright предоставляет асинхронную функцию под названием Expect для утверждения и ожидания, пока ожидаемое условие не будет выполнено.

await Expect(Page).ToHaveTitleAsync(new Regex("Playwright"));

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

УтверждениеОписание
Expect(Locator).ToBeCheckedAsync()Флажок установлен
Expect(Locator).ToBeEnabledAsync()Элемент управления включен
Expect(Locator).ToBeVisibleAsync()Элемент виден
Expect(Locator).ToContainTextAsync()Элемент содержит текст
Expect(Locator).ToHaveAttributeAsync()Элемент имеет атрибут
Expect(Locator).ToHaveCountAsync()Список элементов имеет заданную длину
Expect(Locator).ToHaveTextAsync()Элемент соответствует тексту
Expect(Locator).ToHaveValueAsync()Элемент ввода имеет значение
Expect(Page).ToHaveTitleAsync()Страница имеет заголовок
Expect(Page).ToHaveURLAsync()Страница имеет URL

Изоляция тестов

Базовые классы тестовых фреймворков Playwright NUnit и MSTest изолируют каждый тест друг от друга, предоставляя отдельный экземпляр Page. Страницы изолированы между тестами благодаря Контексту Браузера, который эквивалентен совершенно новому профилю браузера, где каждый тест получает свежую среду, даже когда несколько тестов выполняются в одном браузере.

UnitTest1.cs
using System.Threading.Tasks;
using Microsoft.Playwright.MSTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace PlaywrightTests;

[TestClass]
public class ExampleTest : PageTest
{
[TestMethod]
public async Task BasicTest()
{
await Page.GotoAsync("https://playwright.dev");
}
}

Использование хуков тестов

Вы можете использовать TestInitialize/TestCleanup для подготовки и очистки вашей тестовой среды:

UnitTest1.cs
using System.Threading.Tasks;
using Microsoft.Playwright.MSTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace PlaywrightTests;

[TestClass]
public class ExampleTest : PageTest
{
[TestMethod]
public async Task MainNavigation()
{
// Утверждения используют API expect.
await Expect(Page).ToHaveURLAsync("https://playwright.dev/");
}

[TestInitialize]
public async Task TestInitialize()
{
await Page.GotoAsync("https://playwright.dev");
}
}

Что дальше