Skip to content

Releases: RoninForge/roninforge-playwright

v1.0.0 - Playwright rules for Cursor

Choose a tag to compare

@Solomonic Solomonic released this 14 May 10:42

First public release.

What's in the box

  • 5 rules (playwright-core, playwright-anti-patterns, playwright-config, playwright-auth, playwright-network)
  • 4 skills (/playwright-new-test, /playwright-setup-auth, /playwright-validate, /playwright-visual-regression)
  • 1 reviewer agent (playwright-reviewer) with severity-grouped output (CRITICAL / ERROR / WARN / SUGGESTION)
  • 2 fixture projects (anti-pattern-sample, correct-sample)

What it catches

34 LLM regressions including: text/CSS/XPath engine selectors instead of getByRole, page.$/page.$$ ElementHandles, page.waitForTimeout, expect(await loc.isVisible()).toBeTruthy(), missing await on web-first assertion (a no-op that silently passes), assert from node:assert, hardcoded credentials in test files, login via UI in beforeEach (instead of setup-project + storageState), page.route after page.goto (mock never applies), route handler with no continue/fallback branch (request hangs), beforeEach for what should be a fixture, untyped test.extend, Page/Locator imported from playwright instead of @playwright/test, ElementHandle in POM constructors, assertions inside POM, headless: false committed, missing forbidOnly, missing webServer, trace: \"on\" in CI, aggressive retries hiding flake, page.waitForNavigation in Promise.all (discouraged), hardcoded viewport over devices, caching ~/.cache/ms-playwright in CI (against official guidance), the deprecated microsoft/playwright-github-action, and test.describe.configure({ mode: 'serial' }) as a default.

Playwright versions

Targets @playwright/test 1.x current stable (1.50-1.60). Deltas for newer features (1.48 page.routeWebSocket, 1.49 toMatchAriaSnapshot, 1.54 page.ariaSnapshot, 1.57 Chrome-for-Testing + webServer.wait regex, 1.60 toContainClass) are called out inline with hedging where the underlying API has shifted across releases.

Install

git clone https://github.com/RoninForge/roninforge-playwright.git
cp -rn roninforge-playwright/rules/*  your-project/.cursor/rules/
cp -rn roninforge-playwright/skills/* your-project/.cursor/skills/
cp -rn roninforge-playwright/agents/* your-project/.cursor/agents/

Why this vs the existing community Playwright rule

A short Playwright rule already exists on cursor.directory: ~10 prompt-style bullets, no BAD/CORRECT pairs, no fixtures, no version awareness, no auth/storageState, no sharding, no page.route patterns, no POM-via-fixture, no visual-regression OS-baseline trap. This plugin is the depth play: 34 documented anti-patterns with BAD/CORRECT TS code, five focused rules, the setup-project + storageState auth pattern (including per-worker isolation, multi-role, JWT bypass), the sharded-CI-with-merge-reports workflow, the macOS-vs-Linux baseline trap (the #1 visual-regression gotcha) called out in a dedicated skill, a reviewer agent with severity grouping, and compilable test fixtures.

Quality

Reviewed across four sequential code-reviewer rounds. 2 critical findings (page.screencast and await using route - both APIs that don't exist on current stable), 8 errors, and multiple warnings/suggestions were fixed before this release. Validation script runs clean.