Документация Миграция с Playwright

Миграция с Playwright на Mockarty

Вы уже пишете браузерные тесты на Playwright. Mockarty даёт ту же end-to-end
мощь — запись → готовый код → правка → запуск в реальном браузере → отчёт —
но добавляет две вещи, которых у Playwright самого по себе нет:

  1. Не нужен инспектор Playwright или codegen. Запишите сценарий прямо в
    браузере расширением Mockarty Capture и получите готовый к коммиту тест
    на своём языке — TypeScript (совместимо с Playwright), Go, Python или Java.
  2. Запуск объединён со всем остальным тестированием. Тот же браузерный тест
    попадает в тот же отчёт, что и 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/.

Связанное