Миграция с Playwright на Mockarty
Вы уже пишете браузерные тесты на Playwright. Mockarty даёт ту же end-to-end
мощь — запись → готовый код → правка → запуск в реальном браузере → отчёт —
но добавляет две вещи, которых у Playwright самого по себе нет:
- Не нужен инспектор Playwright или
codegen. Запишите сценарий прямо в
браузере расширением Mockarty Capture и получите готовый к коммиту тест
на своём языке — TypeScript (совместимо с Playwright), Go, Python или Java. - Запуск объединён со всем остальным тестированием. Тот же браузерный тест
попадает в тот же отчёт, что и API-, нагрузочные, fuzz- и контрактные
прогоны — с пошаговыми скриншотами, видео, time-travel трейсом и визуальной
регрессией.
Кратко
| В Playwright | В Mockarty |
|---|---|
npx playwright codegen открывает браузер + инспектор |
Нажимаете Запись в расширении Mockarty Capture, обычным образом кликаете по приложению |
Копируете сгенерированный *.spec.ts из инспектора |
Запись сохраняется как UI-тест; экспортируете как .spec.ts, Go, Python или Java |
npx playwright test (нужны Node + браузеры на каждой машине) |
Запускаете на browser-runner — один общий раннер прогоняет для всей команды; локально ставить нечего |
Trace через playwright show-trace |
Тот же трейс + видео + пошаговые скриншоты прямо в отчёте — без CLI |
Результаты в playwright-report/ |
Результаты в общем отчёте рядом с API/нагрузкой/fuzz/контрактами |
Ваши знания Playwright не выбрасываются: Mockarty записывает локаторы в стиле
Playwright (#id, [data-testid='x'], role=button[name='x'],
text="Sign in"), а экспортированный TypeScript — это обычный файл
@playwright/test, который при желании запускается вашей текущей установкой
Playwright.
Рабочий цикл
1. Запись (без инспектора)
Установите расширение Mockarty Capture для Chrome, откройте Запись UI и
пользуйтесь приложением. Расширение фиксирует клики, ввод, навигацию, select,
нажатия клавиш, drag-and-drop и загрузку файлов, подбирая стабильный локатор для
каждого элемента (text → role → data-testid → id → CSS, в этом порядке
приоритета). Ассерты можно добавлять по ходу.
Записывать можно и без расширения — через живую сессию по API (см.
UI-тестирование браузера и мобильных).
2. Готовый код на вашем языке
Каждая запись — это UI-тест. Экспортируйте в нужном формате:
# CLI
mockarty ui list
mockarty ui export <ui-test-id> --lang playwright # .spec.ts
mockarty ui export <ui-test-id> --lang go # Go SDK
mockarty ui export <ui-test-id> --lang python # Python SDK
mockarty ui export <ui-test-id> --lang java # Java SDK
То же доступно по REST
(GET /api/v1/ui-tests/{id}/export?format=playwright|go|python|java|appium)
и из AI-агента (инструмент ui_test_export).
Playwright TypeScript — обычный файл @playwright/test, запускается как есть:
import { test, expect } from '@playwright/test';
test('Login flow', async ({ page }) => {
await page.goto('https://app.example.com/login');
await page.locator('#email').fill('user@example.com');
await page.locator('#pw').fill('secret');
await page.locator('#login').click();
await expect(page.locator('#welcome')).toContainText('Welcome');
});
Или тот же сценарий как код SDK, который вы коммитите рядом с остальными
тестами — например, на Python:
from mockarty import UITest
def login_flow() -> UITest:
"""UI-тест Mockarty, сгенерированный из записи."""
return (
UITest("Login flow")
.navigate("https://app.example.com/login")
.fill("#email", "user@example.com")
.fill("#pw", "secret")
.click("#login")
.assert_text("#welcome", "Welcome")
)
Go и Java дают тот же сценарий идиоматичным билдером
(mockarty.NewUITest(...), UITestBuilder.named(...)).
3. Правьте и копируйте в свою кодовую базу
Экспортированный код — источник истины: правьте шаги напрямую (переименовать,
переставить, уточнить локатор, добавить ассерт) и коммитьте рядом с приложением.
Без round-trip через инспектор: билдер SDK реконструирует ровно тот же список
записанных шагов, который Mockarty исполняет, — что закоммитили, то и выполнится.
4. Запуск — в реальном браузере, без локальной установки
Сохраните и запустите тест через SDK; он исполнится на browser-runner
(настоящий Chromium, Firefox или WebKit под управлением Playwright), а результат
попадёт в отчёт:
from mockarty import MockartyClient
client = MockartyClient(base_url="http://localhost:5770", api_key="mk_...")
saved = client.ui_tests.create(login_flow())
run = client.ui_tests.run(saved["id"]) # диспатч на раннер
result = client.ui_tests.wait_for_run(run["taskId"]) # поллинг до вердикта
print(result["status"]) # passed | failed | broken
Не нужно ставить Node и браузеры на каждый ноутбук и CI-агент — один
browser-runner прогоняет для всей команды. См.
Запуск UI-тестов в своём браузере (это один бинарник или
контейнер на базе mcr.microsoft.com/playwright).
Соответствие локаторов
Mockarty записывает те же семейства локаторов, что и Playwright, — переводить
нечего:
| Playwright | Локатор Mockarty |
|---|---|
page.locator('#id') |
#id (css) |
page.getByTestId('x') |
[data-testid='x'] |
page.getByRole('button', { name: 'Save' }) |
role=button[name='Save'] |
page.getByText('Sign in') |
text="Sign in" |
page.getByPlaceholder('Email') |
локатор по placeholder |
| структурный CSS-путь | структурный CSS-путь |
Если локатор «уплыл», прогон Mockarty самозаживляется по альтернативным
локаторам, записанным для того же элемента, и сообщает, на какой перешёл, — так
переименованный класс не «покраснит» молча весь сьют.
Соответствие действий и ассертов
| Playwright | Шаг Mockarty |
|---|---|
page.goto(url) |
navigate |
.click() / .dblclick() |
click / doubleClick |
.fill(v) / .type(v) |
fill / type |
.selectOption(v) |
select |
.check() / .uncheck() |
check / uncheck |
.hover() |
hover |
.press(key) |
press |
.setInputFiles(f) |
upload / setInputFiles |
.dragTo(target) |
dragAndDrop |
expect(l).toContainText(t) |
assertText |
expect(l).toBeVisible() / toBeHidden() |
assertVisible / assertHidden |
expect(l).toHaveValue(v) |
assertValue |
expect(l).toHaveCount(n) |
assertCount |
expect(page).toHaveURL(u) |
assertURL |
expect(page).toHaveTitle(t) |
assertTitle |
expect(l).toBeEnabled() / toBeDisabled() |
assertEnabled / assertDisabled |
expect(l).toBeChecked() |
assertChecked |
expect(l).toHaveScreenshot() |
визуальный чекпоинт (см. ниже) |
Config и fixtures → переменные окружения
use: { baseURL } и fixtures, подставляющие данные, становятся переменными
окружения прогона. Ссылайтесь на {{name}} в URL навигации или в значении
fill и передавайте значения при запуске:
run = client.ui_tests.run(saved["id"], {
"envVars": {"BASE_URL": "https://staging.example.com"},
"browser": "firefox", # chromium | firefox | webkit
"viewport": "1280x800",
})
baseURL → переменная для подстановки; projects: [{ browserName }] → опция
browser на прогон; viewport → опция viewport. Storage-state
(залогиненные cookies) тоже поддержан — сохраните авторизованное состояние один
раз и прогоняйте из него («войди один раз, гоняй месяц»).
Что переносится из Playwright 1:1
- Trace —
RecordTraceдаётtrace.zip, который открывается
playwright show-trace; предлагается на скачивание в отчёте. - Видео —
RecordVideoзаписывает весь прогон. - Скриншоты — пошагово, при провале или на каждом шаге (
screenshotMode). - Визуальная регрессия — пошаговый или общий diff скриншота против эталона
(аналогtoHaveScreenshot()) с inline-подтверждением в отчёте. - Кросс-браузер — один тест на Chromium, Firefox и WebKit.
Зачем уходить с Playwright?
Можно и не уходить — экспортированный .spec.ts без изменений запускается вашей
установкой Playwright. К Mockarty тянутся, когда нужно: запись без инспектора,
тесты на Go/Python/Java (не только TypeScript), общий раннер вместо Node на
каждой машине и один отчёт для браузера + API + нагрузки + fuzz + контрактов
вместо отдельного playwright-report/.
Связанное
- Запись UI-тестов — запись подробно
- UI-тестирование браузера и мобильных — вся поверхность
- Запуск UI-тестов в своём браузере — поднять раннер
- Руководство по SDK — SDK, которые использует код
- Миграция с Cypress