День 1261. #Testing
E2E-тесты с Помощью Playwright в .NET
Playwright – это система end-to-end тестирования, поддерживающая тесты, написанные на NodeJS, Java, Python и C#. Допустим, нам нужно протестировать следующий сценарий:
- Учитывая, что я на https://www.google.com
- Когда я набираю "netdeveloperdiary" в поле поиска
- И нажимаю кнопку "Поиск в Google"
- Тогда первым результатом будет ссылка https://t.me/NetDeveloperDiary
Очевидно, что результат может не всегда быть одинаковым. Но это простейший пример. Playwright – это просто NuGet пакет, который можно использовать в MSTest, NUnit, XUnit или любой другой тестовой среде. В данном случае используем MSTest и пакет Microsoft.Playwright.MSTest. Вот тестовый класс:
[TestClass]
public class MyUnitTests : PageTest
{
[TestMethod]
public async Task TestGoogleSearch()
{
//Учитывая, что я на https://www.google.com
await Page.GotoAsync("https://www.google.com");
//Когда я набираю "netdeveloperdiary" в поле поиска
await Page.FillAsync("[title=\"Поиск\"]", "netdeveloperdiary");
//И нажимаю кнопку "Поиск в Google"
await Page.ClickAsync("[value=\"Поиск в Google\"] >> nth=1");
//Тогда первым результатом будет https://t.me › NetDeveloperDiary
var firstResult = await Page.Locator("//cite >> nth=0").InnerTextAsync();
Assert.AreEqual("https://t.me › NetDeveloperDiary", firstResult);
}
}
Вот на что стоит обратить внимание.
1. Тестовый класс наследует от PageTest
Пакет PlayWright.MSTest содержит код настройки объекта браузера, а также поддерживает параллельные тесты. Без использования этого пакета мы могли бы настроить объект браузера сами, и получить большую свободу:
IPage Page;
[TestInitialize]
public async Task TestInitialize()
{
var plwrt = await Playwright.CreateAsync();
var brw = await plwrt.Chromium.LaunchAsync(
new BrowserTypeLaunchOptions
{
Headless = false
});
Page = await brw.NewPageAsync();
}
2. Мы не используем таймауты и все методы асинхронные.
Нам не нужно ожидать запуска браузера и момента, пока элементы отобразятся на экране. Всё это берёт на себя Playwright. Например, когда вы хотите заполнить поле для ввода, Playwright предполагает, что оно должно появиться на странице, и ждёт его появления (по умолчанию 30 секунд). Помимо этого, то, что всё происходит асинхронно означает, что вы не столкнётесь с замиранием экрана во время ожидания следующей операции.
В остальном тесты должны быть понятны. Мы заполняем поле для ввода, нажимаем на кнопку поиска и проверяем первый результат.
Примечание. При первом использовании Playwright на вашей машине, нужно выполнить следующую команду из вашего проекта для установки движков браузеров:
bin\Debug\net6.0\playwright.ps1 install
Playwright содержит множество методов управления браузером и анализа результатов, а также может выполнять и более сложные действия, вроде снимка экрана, который можно сохранить для последующего анализа или сравнения.
Источник: dotnetcoretutorials.com/2022/05…th-c-net