CURSOR RULESPlaywright E2E Cursor Rules (.mdc) | Resilient Browser Automation
Generate Playwright Cursor rules enforcing user-facing locators (getByRole, getByText), auto-waiting assertions, page object models, and zero sleep() calls. AI models frequently write fragile test automation scripts with brittle CSS/XPath selectors (e.g. div > span:nth-child(3)), hardcoded page.waitForTimeout() delays, and un-isolated test state, leading to flaky test suites.
.cursor/rules/playwright.mdcWhat this file changes for Playwright End-to-End Testing
AI models frequently write fragile test automation scripts with brittle CSS/XPath selectors (e.g. div > span:nth-child(3)), hardcoded page.waitForTimeout() delays, and un-isolated test state, leading to flaky test suites.
Playwright End-to-End Testing: code to avoid and code to write instead
// Flaky: Brittle selectors, arbitrary sleep timeouts, and no auto-waiting
test("bad test", async ({ page }) => {
await page.goto("/catalog");
await page.click("div.col-md-4 > button:nth-child(2)"); // Breaks on minor CSS tweak!
await page.waitForTimeout(5000); // Flaky anti-pattern!
const text = await page.innerText("#cart-total");
expect(text).toBe("1");
});import { test, expect } from "@playwright/test";
test.describe("Checkout Flow", () => {
test("allows user to complete cart purchase", async ({ page }) => {
await page.goto("/catalog");
// Accessible, user-facing locators
await page.getByRole("button", { name: "Add to Cart" }).first().click();
await page.getByRole("link", { name: "Cart (1)" }).click();
// Auto-waiting assertions
await expect(page.getByRole("heading", { name: "Your Shopping Cart" })).toBeVisible();
await page.getByRole("button", { name: "Proceed to Checkout" }).click();
await expect(page).toHaveURL(/.*checkout/);
});
});How to Install Playwright End-to-End Testing Cursor Rules (.mdc) via Terminal
Step 1: Open Project Directory & Verify Target Placement
Open your terminal and navigate to your project root folder where the .cursor/rules/playwright.mdc file will reside. Ensure the file is placed at the exact path below relative to your project root so the AI engine automatically loads it:
Step 2: Fetch Rule File via Terminal Command
Run curl, PowerShell, or wget to stream the rule directly from the DevScratchpad raw API endpoint and write it to .cursor/rules/playwright.mdc:
Terminal One-Liner Install
Run directly in your project root to stream and write this rule file with one command.
mkdir -p ".cursor/rules" && curl -fsSL "https://www.devscratchpad.tech/api/raw/cursor-rules/playwright-e2e" -o ".cursor/rules/playwright.mdc"Step 3: Check that Cursor uses it
Cursor picks up rules in .cursor/rules/ automatically. This one attaches when files matching its globs are in the request, or when you @-mention it.
Cursor rules generator: .cursor/rules/*.mdc for your stack
Cursor Rules (.mdc): how it works, where the file goes, and every Cursor Rules preset.
Tools for Playwright End-to-End Testing work
Browser-based utilities to test, format and inspect the code your AI tool writes. Nothing you paste is uploaded.
YAML to JSON / JSON to YAML Converter
Bidirectional YAML and JSON conversion with syntax validation.
Cron Expression Visualizer
Translates complex cron schedules into plain English with a 5-column breakdown grid.
CIDR Calculator & Subnet Inspector
Calculate IPv4 subnet masks, broadcast addresses, and usable ranges.
Base64 / Hex / Binary Multi-Inspector & Image Previewer
Auto-detects Base64, URL-safe Base64, Hex, Binary, URL-encoded, and Data URL input and converts it to every format, plus a Canonical Hex Dump.
Live Repository & Schema Ingestion
Inspect any public or private GitHub repository, or paste SQL DDL and Prisma models directly in AI Skill Studio to auto-generate authentic rules. Zero server transmission.
Migrating from Legacy .cursorrules or CLAUDE.md?
Use the free, in-browser converter to turn one long rules file into Cursor .mdc, Claude SKILL.md or Windsurf rules.
Technical FAQ: Playwright End-to-End Testing AI Rulebooks
Why are arbitrary sleep timeouts banned?
Arbitrary delays like waitForTimeout waste CI test execution time and still fail randomly under variable network latency. Playwright auto-waiting assertions check conditions dynamically.
Why use getByRole instead of class names?
getByRole verifies that elements are accessible to screen readers and resilient to CSS redesigns.