Ответ
Playwright — это современный фреймворк для сквозного (E2E) тестирования веб-приложений, разработанный Microsoft. Он напрямую взаимодействует с браузерами через DevTools Protocol.
Преимущества:
- Кроссплатформенность и мультиязычность: Единый API для Chromium, Firefox и WebKit. Поддерживает TypeScript/JavaScript, Python, Java, .NET.
- Автоматическое ожидание (Auto-waiting): Встроенные умные ожидания для элементов (видимость, стабильность, возможность клика). Это устраняет необходимость вручную добавлять
sleepилиwaitв большинстве сценариев, делая тесты стабильнее. - Высокая производительность: Работает через протокол браузера, а не через WebDriver, что делает выполнение быстрее. Поддерживает параллельное выполнение тестов.
- Мощные возможности:
- Сетевые перехватчики: Мокайте API-запросы, перехватывайте и проверяйте сетевую активность.
- Эмуляция устройств: Тестирование на мобильных viewport, с эмуляцией геолокации, языка, тач-событий.
- Скриншоты и видео: Встроенная запись видео тестового прогона и создание скриншотов.
- Работа с iframe, файлами, popup'ами.
- Генерация кода: Инструмент Codegen позволяет записывать действия в браузере и сразу получать код теста.
Недостатки/Ограничения:
- Молодая экосистема: Сообщество и количество готовых плагинов/интеграций пока меньше, чем у Selenium.
- Нет поддержки legacy браузеров: Не работает с Internet Explorer или старыми версиями Safari.
- Требует установки специфичных бинарных файлов браузеров: Управление версиями браузеров происходит через Playwright, что может быть менее гибким в некоторых корпоративных средах.
Пример базового теста на Python:
import re
from playwright.sync_api import Page, expect
def test_homepage_has_title(page: Page):
# Переход на страницу
page.goto("https://playwright.dev")
# Ожидание и проверка заголовка
expect(page).to_have_title(re.compile("Playwright"))
def test_get_started_link(page: Page):
page.goto("https://playwright.dev")
# Клик по ссылке
page.get_by_role("link", name="Get started").click()
# Проверка, что открылась нужная страница
expect(page).to_have_url(re.compile(".*/docs/intro")) Ответ 18+ 🔞
Так, слушай, тут есть одна штука — Playwright. Ну, фреймворк, блядь, для тестирования веб-приложений, от Microsoft. Не через WebDriver, а прямо в душу браузеру лезет, через их родной протокол. В общем, мощно.
Что в нём такого охуенного, а?
- Один на всех, как швейцарский нож: Единый API для трёх главных движков — Chromium, Firefox и WebKit. И писать можно почти на чём угодно: TypeScript, Python, Java, .NET. Удобно, ёпта.
- Автоматическое ожидание, или «не еби мозг»: Он сам, сука, ждёт, когда элемент станет видимым, кликабельным, стабильным. Никаких этих ручных
sleep(10)на ровном месте, от которых тесты пляшут, как угорелые. Стабильность — почти как у швейцарских часов, блядь. - Быстрый, как хуй с горы: Работает напрямую с браузером, поэтому шустрее, чем старичок Selenium. И тесты можно гонять параллельно — овердохуища производительность.
- Фичи, от которых волосы дыбом:
- Сеть под колпаком: Можешь подменить API-запросы, перехватывать их и смотреть, что там летает. Идеально для тестирования с моками.
- Эмуляция всего: Хочешь проверить, как на телефоне татарского пастуха? Пожалуйста — мобильный экран, геолокация, язык, тач-события.
- Скриншоты и видео из коробки: Весь прогон теста можно записать на видео. Упал тест? Открываешь видео и видишь, на каком моменте всё пошло по пизде. Бесценно.
- IFrame'ы, файлы, popup'ы — со всем этим он тоже умеет работать без лишних танцев с бубном.
- Генератор кода — для ленивых гениев: Запускаешь штуку, делаешь действия в браузере, а он тебе код теста пишет. Просто ебать мои старые костыли, как удобно.
Но не всё же так гладко, есть и подводные ебли:
- Молодой ещё, сопливый: Сообщество и готовых плагинов пока не так дохуя, как у того же Selenium. Экосистема растёт, но не гигантская.
- Стариков не любит: Забудь про Internet Explorer и древние Safari. Только современные браузеры. Ну, а кому они, эти легаси, нахуй сдались, кроме корпоративных мазохистов?
- Свои заморочки с браузерами: Он сам ставит себе нужные версии браузеров. В какой-нибудь конторе со строгими правилами безопасности это может вызвать вопросы у местных айти-жрецов.
Ну и примерчик, чтобы понятно было, о чём речь. Смотри, как просто:
import re
from playwright.sync_api import Page, expect
def test_homepage_has_title(page: Page):
# Поехали на сайт
page.goto("https://playwright.dev")
# Ждём и проверяем заголовок. Всё автоматом, без ручного ожидания.
expect(page).to_have_title(re.compile("Playwright"))
def test_get_started_link(page: Page):
page.goto("https://playwright.dev")
# Кликаем на ссылку с текстом "Get started"
page.get_by_role("link", name="Get started").click()
# Проверяем, что нас принесло куда надо
expect(page).to_have_url(re.compile(".*/docs/intro"))
Вот такая, блядь, машинка. В целом, штука мощная и современная. Если не нужно тестировать археологические экспонаты вроде IE — очень даже годный вариант, в рот меня чих-пых.