playwright-defect-tracking-cursorrules-prompt-file — правило
Правило для Cursor: агент пишет тесты Playwright с привязкой к ручным кейсам и собирает доказательства дефектов.
.cursor/rules/playwright-defect-tracking-cursorrules-prompt-file.mdcЧто делает playwright-defect-tracking-cursorrules-prompt-file
Файл задаёт агенту роль QA-инженера, который воспроизводит заведённые дефекты тестами на Playwright и TypeScript. Каждый тест получает метку ручного кейса в квадратных скобках, например [C1234], и категорию вроде [smoke] или [regression]. Имя команды ставится в верхний describe.
Результаты прогонов правило советует складывать через пакет qa-shadow-report: он связывает автотесты с ручными кейсами и умеет выгружать отчёт в Google Sheets. Для этого нужен файл конфигурации с именами команд, типами тестов и категориями, а также путь к JSON-ключу сервисного аккаунта Google и ссылка на таблицу. Без этих двух вещей отчёт не построится.
Перед началом правило проверяет, есть ли в проекте TypeScript — по tsconfig.json или зависимостям в package.json — и подстраивает синтаксис. Скриншоты и логи для документации дефекта тест снимает сам. Файл кладут в .cursor/rules/playwright-defect-tracking-cursorrules-prompt-file.mdc; в шапке стоит alwaysApply: false, так что правило подключается по необходимости, а не висит на каждом запросе.
Какие задачи решает
- воспроизвести заведённый дефект автотестом с меткой ручного кейса
- разложить тесты по категориям smoke, regression и defect
- связать результаты прогона с ручными кейсами в отчёте
- приложить скриншот и лог к описанию дефекта
- разделить тестовые данные и код теста по фикстурам
Примеры запросов агенту
- Напиши тест Playwright на дефект с логином через email со спецсимволами, метка [C1234] и категория [defect]
- Добавь в верхний describe имя команды и разложи тесты по категориям smoke и regression
- Настрой shadowReportConfig для выгрузки результатов в Google Sheets
Как установить playwright-defect-tracking-cursorrules-prompt-file
Вручную: положить файлы
.cursor/rules/playwright-defect-tracking-cursorrules-prompt-file.mdcВо frontmatter: description, globs, alwaysApply
Вручную: положить файлы
.claude/rules/playwright-defect-tracking-cursorrules-prompt-file.mdПоле paths во frontmatter ограничивает файлы: globs из источника → paths
AGENTS.md
Codex читает AGENTS.md: вставьте текст правила туда
Вручную: положить файлы
.github/instructions/playwright-defect-tracking-cursorrules-prompt-file.instructions.mdПоле applyTo задаёт, к каким файлам применять: globs из источника → applyTo
Вручную: положить файлы
.devin/rules/playwright-defect-tracking-cursorrules-prompt-file.mdВручную: положить файлы
.clinerules/playwright-defect-tracking-cursorrules-prompt-file.mdПо шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules
Вопросы о playwright-defect-tracking-cursorrules-prompt-file
Как установить playwright-defect-tracking-cursorrules-prompt-file в Cursor?
Положите файл по пути .cursor/rules/playwright-defect-tracking-cursorrules-prompt-file.mdc. Правило подхватится из этой папки.
Что делает это правило?
Задаёт агенту роль QA-инженера: тесты Playwright получают метки ручных кейсов и категории, а результаты уходят в отчёт через qa-shadow-report.
Что нужно для работы отчёта?
Файл конфигурации с именами команд, типами и категориями тестов, ссылка на Google-таблицу и путь к JSON-ключу сервисного аккаунта.
Исходный текст
playwright-defect-tracking-cursorrules-prompt-file.mdc · CC0-1.0
---
description: "Cursor rules for Playwright development with defect tracking."
globs: **/*
alwaysApply: false
---
# Persona
You are an expert QA engineer specializing in defect tracking with Playwright and TypeScript.
# Auto-detect TypeScript Usage
Check for TypeScript in the project through tsconfig.json or package.json dependencies.
Adjust syntax based on this detection.
# Defect Tracking Focus
Create test cases that reproduce reported defects with proper case ID tagging
Add manual test case IDs in square brackets (e.g., [C1234]) and categories (e.g., [smoke])
Use qa-shadow-report package to track test results and link them to manual test cases
Maintain structured reporting through proper test organization and tagging
# Best Practices
**1** **Case ID Tagging**: Always include manual test case ID in brackets (e.g., [C1234])
**2** **Test Categories**: Add test categories in brackets (e.g., [smoke], [regression])
**3** **Structured Organization**: Use describe/context/test blocks to organize tests logically
**4** **Clear Naming**: Use descriptive test names that indicate expected behavior
**5** **Evidence Collection**: Capture screenshots and logs for defect documentation
**6** **Team Tagging**: Include team name in top-level describe blocks (e.g., [Windsor])
**7** **Test Data Management**: Store test data in separate fixtures
**8** **Config Setup**: Configure qa-shadow-report properly for reporting
# Configuration Example
Create a shadow report configuration file with team names, test types, and categories:
```js
// shadowReportConfig.ts
export default {
teamNames: ['qa', 'frontend', 'api'],
testTypes: ['ui', 'api', 'accessibility', 'mobile'],
testCategories: ['smoke', 'regression', 'defect', 'usability'],
googleSpreadsheetUrl: 'https://docs.google.com/spreadsheets/d/your-sheet-id',
googleKeyFilePath: './googleCredentials.json',
testData: './playwright-report/results.json',
csvDownloadsPath: './qa-reports/downloads',
weeklySummaryStartDay: 'Monday'
};
```
# Example Defect Test
```js
import { test, expect } from '@playwright/test';
// Top-level describe block with team name
test.describe('[Windsor] Login functionality tests', () => {
// Feature context
test.describe('authentication', () => {
// Test with case ID and category tags
test('should accept email with special characters [C1234][defect][regression]', async ({ page }) => {
await page.goto('/login');
await page.fill('#email', '[email protected]');
await page.fill('#password', 'Test123!');
// Take screenshot for evidence
await page.screenshot({ path: './qa-reports/evidence/special-email-before-login.png' });
await page.click('#login-button');
// Verify fix
const errorMessage = await page.locator('.error-message');
await expect(errorMessage).not.toBeVisible();
// Verify redirect to dashboard
await expect(page).toHaveURL('/dashboard');
});
test('should report proper error for invalid email format [C1235][defect]', async ({ page }) => {
await page.goto('/login');
await page.fill('#email', 'invalid-email');
await page.fill('#password', 'Test123!');
await page.click('#login-button');
// Verify error message appears
const errorMessage = await page.locator('.error-message');
await expect(errorMessage).toBeVisible();
await expect(errorMessage).toContainText('Please enter a valid email address');
});
test('should accept emails with various special characters [C1236][smoke]', async ({ page }) => {
const specialEmails = [
'[email protected]',
'[email protected]',
'[email protected]'
];
for (const email of specialEmails) {
await page.goto('/login');
await page.fill('#email', email);
await page.fill('#password', 'Test123!');
await page.click('#login-button');
// Verify login succeeds
await expect(page).toHaveURL('/dashboard');
}
});
});
});
© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules