Test Runtime

Real Playwright code. Self-healing selectors. Zero replay cost.

Lastest is built on the official Playwright base image. Recorded and AI-generated tests are emitted as ordinary Playwright TypeScript with 7-layer fallback selectors, so every replay is deterministic and costs $0 in AI tokens.

Try Lastest free →Read the docs

What you get

Three things this integration does - and what they mean for your team.

01

Recorder → real Playwright code

Record a flow once. Lastest emits human-readable Playwright TypeScript using @playwright/test, ready to commit, code-review, and run in any Playwright-compatible CI.

02

7-layer self-healing selectors

Every locator is captured at seven levels. If your UI shifts, Lastest falls back through data-testid → id → role → aria-label → text → CSS → OCR before it gives up - surviving most refactors and AI-driven UI churn.

03

Embedded Browser pods

Tests run only inside Embedded Browser pods on Kubernetes (k3d locally, your real cluster in prod). Pods are provisioned dynamically per build, isolated, and torn down after each run.

How it works

Data flow, configuration, and result routing - visualised.

Diagram 1 · Recorder pipeline

From a click-through to committable Playwright code

Click-throughrecorderDOM eventsNetwork callsScreenshots + a11yCodegenmulti-strategyPlaywright .tscommittable
The recorder captures DOM events, network calls, screenshots, and accessibility metadata. The codegen emits @playwright/test TypeScript with multi-strategy locators, ready to commit.

Diagram 2 · 7-layer selector fallback

How Lastest survives selector churn

Step runlocator()data-testididrolearia-labeltextcss pathOCRon miss → fall back to next layer7 layers · all logged for follow-up fix-up
On each step, Lastest tries data-testid first, then id, role, aria-label, text content, CSS path, and finally OCR over the screenshot. Each fallback is logged for future fix-up.

Diagram 3 · Embedded Browser pod provisioning

Where the Playwright runtime actually lives

LASTEST CONTROL PLANEKUBERNETES · lastest namespaceBuild queuerunner_commandsEB provisionerpod specPlaywright base imagemcr.microsoft.com/playwrightEB podephemeral · per-buildScreenshots / tracesprovisionuploadresults
Lastest server queues a run; the EB provisioner spins up a pod from mcr.microsoft.com/playwright; the pod claims the test, runs it, and uploads screenshots and traces. Pod is destroyed after the run.

Configure

Drop-in config for Playwright

Excerpt of generated Playwright code with multi-layer selectors

import { test, expect } from '@playwright/test';

test('checkout completes with stripe test card', async ({ page }) => {
  await page.goto('/pricing');
  await page.locator('[data-testid="cta-upgrade"]')   // layer 1
    .or(page.getByRole('button', { name: /upgrade/i })) // layer 3
    .or(page.getByText('Upgrade'))                     // layer 5
    .first()
    .click();

  await expect(page).toHaveScreenshot('checkout.png', {
    maxDiffPixelRatio: 0.001,
  });
});

Frequently asked questions about Lastest + Playwright

Can I run the generated tests outside of Lastest?
Yes. The generated files import @playwright/test like any other Playwright project, so npx playwright test runs them locally or in plain GitHub Actions.
What Playwright version does Lastest target?
Lastest tracks the latest stable @playwright/test and ships pre-installed in the official Playwright base image (mcr.microsoft.com/playwright).
How is this different from Playwright codegen?
Playwright codegen captures only one selector per step. Lastest captures seven and falls back through them at runtime, plus adds visual diff baselines, AI test fixing, and CI-native review workflows.
Do replays use AI?
No. Replays are pure Playwright. AI is only used at create-time and at fix-time. This is what makes Lastest cheap to run: replays cost $0 per run regardless of suite size.
Does Lastest support cross-browser?
Yes - Chromium, Firefox, and WebKit, all via Playwright. Configure browsers per repo or per test in the EB pod spec.