Sitemap
William Shakespeare

Playwright у світі .NET

3 min readMar 29, 2021

У 2020 році, окрім пандемії COVID-19, світ автоматизованого тестування сколихнула нова подія — у гру ввійшов новий гравець та ім’я йому Playwright.

Переважно, розробки від Microsoft зустрічають скептично, але Playwright підняв дуже багато обговорень навколо себе. І не дарма, цей проект дуже активно розвивається.

Хоча розроблявся він у JavaScript екосистемі, Microsoft дуже швидко випустили порт на python, java та C#. Ця стаття буде про мій досвід з Playwright-ом та C#.

Чому Playwright ?

Playwright для роботи з браузером використовує DevTools protocol. І окрім того, що він швидкий є наступні переваги:

  • можливість перехоплювати HTTP трафік
  • можливо змінювати HTTP трафік
  • робота з WebSocket
  • підтримка геолокацій
  • можливість емулювати мобільні пристрої
  • Робота з функціями JS на сторінці
  • Зручна робота з різними вкладками браузера
  • Вбудовані очікування
  • Вбудований Logger

Якщо одна з подібних фіч вам потрібна — розгляньте Playwright.

Для мене легка робота з HTTP трафіком дуже стає у нагоді — можна кожен запит\відповідь логувати і відповідно мати багато інформації, коли тест падає.

Основні концепти

Є декілька рівнів абстракції у Playwright

  • IPlaywright — дає можливість нам створити браузер який нам потрібно. На даний момент є: Firefox, Chrome та WebKit
  • IBrowser — власне сам браузер. Він може створити нову сторінку IPage або новий браузер контекст IBrowserContext. Відмінність у тому, що IBrowserContext є ізольований. Тобто, кеш та куки будуть спільні для сторінок одного контексту.
  • IPage — сутність, яка містить дану сторінку. Власне, з нею будуть проводитись всі взаємодії. Сюди попадає не лише HTML сторінка, а також і DevTool.

Важливо зрозуміти, що кожна з цих сутностей отримає дані під час створення. Тобто, наприклад, коли ми працюємо з WebDriver-ом, то при виконанні команди findElement() він буде звертатись до сторінки браузера і повертати знайдені елементи. Натомість, Playwright збереже всю сторінку у змінну IPage, і вже вам доведеться з нею працювати.

Особливості C# реалізації Playwright

Найперше, що мені кинулось у очі це те, як Playwright заточений під JS.

Перше — це через асинхронне програмування. Більшість методів є асинхронними. Вам потрібно бути ознайомленим з концепцією async\await у C#. Нічого складного, але свої нюанси добавляє.

Друге, це велика к-сть подій (events). На них можна підписатись і виконувати якісь дії коли ця подія виникне. Наприклад, таким чином можна записувати у логи різні HTTP запити та відповіді.

Третє, відсутність перевантажених методів у Playwright. Кожен метод має велику к-сть стандартних аргументів. Наприклад, метод GetPdfAsync() має 13 (!!!) аргументів.

Такі особливості не є недоліками. На моїй практиці всі вони мало де або взагалі не використовувались у автоматизації за допомогою WebDriver-а та C#. Тому до цього потрібно бути готовим. Особливо до асинхронних тестів.

Моя реалізація

Я ще не мав можливості попрацювати з Playwright на якомусь проекті, але вирішив пограти з ним вдома.

Посилання на моє репо з прикладом використання Playwright та C# тут

Це дуже маленький та простий проект, мета якого продемонструвати якісь основи цієї бібліотеки. Там ви знайдете один тест та декілька сторінок.

Я спробував використати PageObject патерн, десь так само як він використовується з WebDriver-ом.

Недоліки Playwright

Також є декілька ложок дьогтю у Playwright:

  • Немає підтримки IE та Edge браузерів
  • Поки мала к-сть навчальних матеріалів
  • Відсутня інфраструктура для паралелізації (Moon підтримує, але є комерційним рішенням)

Summary

Драматург вчинив багато галасу у світі Test Automation. Це дійсно новий та цікавий інструмент який заслуговує уваги. По темпах його розвитку можна сказати, що він можливо і складе конкуренцію WebDriver-у. А можливо його можна буде використовувати у тандемі. Тим не менше, побачимо, що для нас приготує Selenium 4, адже у ньому також повинна з ‘явитись підтримка DevTool протоколу. Але про реліз Selenium 4 говорять з 2019, а його і досі (березень 2021) немає.

P.S. я прихильник того, щоб технологію чи інструмент обирали не по принципу “ооо, щось новеньке. Треба все перенести на неї”, а з чітким розуміння, для чому саме ця технологія. То ж обирайте правильно.

--

--

Oleg Zarevych
Oleg Zarevych

Written by Oleg Zarevych

Вирішив писати про ІТ українською

No responses yet