Основные функциональные пакетыНаконец, мы подходим к основным пакетам #Playwright, которые содержат всю главную функциональность проекта.
✳️playwright-core/
✳️playwright-test/
✳️playwright/
✳️protocol/
Обратите внимание, что папка
playwright-test
— это просто обёртка для связывания
playwright-core
и
playwright
вместе в пакете
@playwright/test,
устанавливаемом через npm. Если вы посмотрите в файл
index.js
, вы увидите только экспорт из
playwright/test
, который находится в пакете
playwright
.
Другой пакет, на который стоит обратить внимание, — это
protocol
, который содержит автоматически сгенерированный код через некоторые скрипты сборки в директории
utils
корневой директории проекта Playwright. Он содержит YAML-файл
protocol.yml
, который перечисляет все интерфейсы, используемые протоколом Playwright. Если вы когда-либо захотите создать драйвер для Playwright на другом языке, это один из основных файлов, к которому стоит обратиться при создании этой библиотеки.
Теперь два основных пакета всей библиотеки Playwright — это
playwright
и
playwright-core
. Первый из них является обёрткой вокруг
playwright-core
и отвечает за управление всей логикой тестирования. Это включает запуск рабочих процессов тестирования, выполнение тестов, отчёты о результатах, управление повторными запусками и утверждениями тестов. Хорошим ориентиром для кода, содержащегося в этом пакете, является любая конфигурационная логика, которую вы найдёте в файле
playwright.config.ts
, или любой связанный с запуском тестов код, например:
// my-test.spec.ts
import { test } from "@playwright/test";
В этом случае вы, вероятно, импортируете код из пакета
playwright
.
Другой основной пакет —
playwright-core
, который содержит всю функциональность автоматизации браузера. Эта функциональность разделена на два основных компонента: клиентскую библиотеку и серверную библиотеку. Серверная библиотека, находящаяся в
packages/playwright-core/src/server
, содержит всю логику, отвечающую за действия автоматизации браузера. Это означает, что она отправляет команды через Chrome DevTools Protocol (CDP) или аналогичные протоколы, чтобы сообщить браузеру выполнить такие действия, как "нажать кнопку входа", "ввести 'Hello' в текстовое поле" или "перейти на 'https://news.ycombinator.com'". Серверная библиотека содержит реализации для каждого из поддерживаемых браузеров и предоставляет унифицированный API через WebSocket-сервер для доступа к этой функциональности из других процессов.
С другой стороны, клиентская библиотека содержит все пользовательские API, которые вы используете при написании скриптов автоматизации браузера. Например, если у вас есть такой скрипт:
// my-automation-script.ts
import { chromium } from "@playwright/test";
(async function () {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
await page.goto("https://playwright.dev");
})();
Вы фактически импортируете
chromium
из экземпляра класса в
playwright-core/client/playwright
.
Затем вызовы
browser.newPage
и
page.goto
делают запросы к интерфейсам в серверной библиотеке, которая взаимодействует с браузерами через CDP или аналогичные протоколы. Это означает, что если вы когда-либо захотите написать собственный инструмент автоматизации браузера, независимый от конкретного браузера, полезной отправной точкой будет использование серверной библиотеки из пакета
playwright-core
, поскольку она предоставляет всесторонний и проверенный API для такой функциональности.
Такой принцип разделения ответственности работает хорошо, потому что позволяет поддерживать несколько языков, которые могут использовать API автоматизации браузера Playwright. Фактически, если вы посмотрите на другие реализации библиотеки Playwright, вы обнаружите те же шаблоны проектирования (например,
ChannelOwner
), что и в клиентской библиотеке, найденной в
playwright-core
.
ПереводЕще интересные статьи про архитектуру playwright:
➡️https://qacomet.com/playwright/how-playwright-initializes/
➡️https://medium.com/@divyarajsinhdev/understanding-playwright-architecture-e456fcee0222
Полезно? Ставьте 👍 👎