Langwright is a LangChain-powered Playwright testing library that makes end-to-end tests feel more LLM-native. It preserves the familiar Playwright workflow while allowing browser interactions and assertions to be written in natural language.
Playwright
import { test, expect } from '@playwright/test'; test('has title', async ({ page }) => { await page.goto('https://playwright.dev/'); await expect(page).toHaveTitle(/Playwright/); }); test('get started link', async ({ page }) => { await page.goto('https://playwright.dev/'); await page.getByRole('link', { name: 'Get started' }).click(); await expect( page.getByRole('heading', { name: 'Installation' }), ).toBeVisible(); });
Langwright
import { test, scenario } from '@hakjuoh/langwright/test'; test('has title', async () => { await scenario( `Go to https://playwright.dev/.`, `The page title should contain Playwright.`, ); }); test('get started link', async () => { await scenario( `Go to https://playwright.dev/. Click the Get started link.`, `The Installation heading should be visible.`, ); });
Each scenario(steps, expect?) runs a four-stage pipeline — generate → execute → heal → report. A Generator
agent converts the natural-language scenario into Playwright code (inspecting the live page for robust locators),
Playwright executes that code directly (no LLM in the loop), and on failure a Healer agent diagnoses the cause and
proposes a fix. This mirrors Playwright's test agents: the test plan is
authored inline as natural language, so Langwright fuses the Generator and Healer roles into a single run.