Decision-making help for every selector and workflow. Click any question to expand.
QA Prompt Composer is a training and reference tool for understanding AI prompt structure. It shows you which options (purpose, role, coverage, guards) go into a quality QA prompt and how they combine — so you can build that awareness and apply it in your own AI agent workflow.
It also assembles a structured prompt you can copy and paste into an AI assistant (ChatGPT, Claude, Gemini, or any other). It does not call an AI itself.
The loop is:
Content sent to the server is only used to assemble the prompt. It is not stored, logged, or used for training. No account, no API key, no cost.
A freeform prompt like “write Gherkin test cases for this feature” tends to produce generic output because the AI has no persona, no explicit format constraint, no coverage instruction, and no grounding guard. It fills in the gaps with guesses.
The Composer shows you what those components look like and assembles them systematically:
The difference is most visible for complex or format-sensitive outputs — Gherkin scenarios, column-based test suites, Playwright specs, and bug reports with root-cause hypotheses. Understanding these components is also what you take with you when prompting any AI agent directly.
Work top to bottom through the three steps:
The prompt assembles live on the right panel. When it looks right, hit Copy prompt and paste it into your AI assistant.
Trust the defaults as the starting point. Each Purpose was calibrated with the most useful combination. Change a selector only when you have a concrete reason:
If you’re changing three or more selectors routinely for the same task type, save it as a preset so you don’t repeat that work.
Built-in presets are one-click configurations for the five most common daily QA workflows. Load them from the Presets ▾ menu in the left panel header.
| Preset | Best for |
|---|---|
| Gherkin from Jira Ticket | A new ticket that needs BDD scenarios immediately |
| Bug Report + Root Cause | Something broke and you need a dev-ready report with a root-cause hypothesis |
| Regression Smoke Checklist | Before a release — confirming nothing broke across existing features |
| API Test Cases (Column Suite) | Testing a REST endpoint for status codes, payload shape, auth, errors |
| Playwright E2E Spec | Converting a manual scenario to a runnable TypeScript spec |
All fields remain editable after loading. You can also save your own presets, export them as JSON, and share across browsers or team members.
Open the Presets ▾ menu, type a name in the “Save current configuration” field, and click Save. The entire state — purpose, all selectors, and context fields — is saved to your browser’s local storage.
Presets survive browser restarts but are browser-specific unless exported. Export regularly if the configuration matters.
It depends on how well-specified the ticket is.
Use “Requirement & Jira” if:
Use “Test case writing” directly if:
Always run Requirement & Jira first. It produces an ambiguity list — if the list is empty, the ticket is ready; if it has items, resolve them with the product owner before writing cases. Writing test cases against an ambiguous ticket wastes time.
These are opposite directions:
Use Data Generator to create the input data → run your process → use Data Validation to verify the output.
Use Automation Strategy first whenever you have more than one test case to automate.
Automation Strategy answers three questions the Playwright purpose cannot:
Skipping this step is the most common cause of brittle, high-maintenance test suites. Run Automation Strategy on your batch, get the “automate now / automate later / keep manual” decision for each case, then run Automation (Playwright) one case at a time on the approved candidates.
Use the Flake Triage purpose (Tier 2). Paste the failing test code and CI failure logs into the content field. The prompt will:
waitForTimeout with web-first assertions, isolate setup/teardown)The more log context you paste — stack trace, timing, CI environment, frequency of failure — the better the root-cause output.
These are two different failure modes at two different layers, and the right role depends on which layer the defect lives at.
If you can reproduce the defect without opening a browser (e.g. by querying the database or calling the API directly), it’s a data-layer bug — use the second-role pairing. If you need the UI to repro it, the bug is in the UI layer — use Bug Reporter alone.
Add a second role only when the task genuinely spans two failure dimensions — not as a default.
What it changes: the first selected role sets the primary lens (vocabulary, coverage instincts, output structure). The second role adds an additional set of instincts to the same output — it does not produce two separate outputs.
Example: Test Case Author + Accessibility Test Engineer → produces test cases that include functional coverage AND WCAG 2.2 AA checks (keyboard, focus, ARIA, contrast) in the same output.
Useful pairings:
| Format | Effort | Traceability | Use when |
|---|---|---|---|
| Lightweight checklist | Low | Low | Smoke sweeps, sanity checks, tight deadlines, MVPs. |
| BDD / Gherkin | Medium | Medium-High | Agile BDD/ATDD teams. Readable by non-technical stakeholders, can feed Cucumber/SpecFlow. |
| Column-based suite | Highest | Highest | Enterprise, regulated, compliance/audit. Imports to Xray/Zephyr/TestRail. |
The “Regression smoke checklist” preset locks Checklist + concise length. The “Gherkin from Jira Ticket” preset locks Gherkin. The “API Test Cases” preset locks Column-based suite.
The Runnable spec file output instructs the model to emit a single runnable file — imports, describe/test blocks, setup/teardown, and assertions — in the idioms of the framework set in the Framework context field.
How safe is it? Treat it as a strong first draft:
getByRole('button', { name: 'Save' })) will match your input — verify they reflect the actual DOM@playwright/test API changes between major versions--headed) to watch what it actually does before adding it to CITwo guards are safe defaults for almost every prompt:
Add these situationally:
Boundary targets individual field edges — min, min−1, max, max+1 values for a single field. Use it whenever constrained numeric or string fields exist.
Pairwise targets combinations of fields. When you have many inputs, an exhaustive cross-product of all combinations is too large to test. Pairwise (all-pairs) ensures every pair of field values appears in at least one test case. This gives ~90% defect detection at a fraction of the test count.
Example: a search form with 4 filters, each with 3 values = 81 combinations exhaustively. Pairwise reduces this to ~15 cases while still covering every value paired with every other value at least once.
Use both when a form has both range-constrained fields (needs Boundary) and multiple interacting inputs (needs Pairwise). They solve different coverage problems.
Fill it in whenever you select Permission coverage. Without it, the model has no role names to vary across and produces generic “authorized/unauthorized” language instead of concrete cases.
Also fill it in for:
Format: comma-separated role names matching what your system actually uses — e.g. admin, dealer, customer, guest. The model will vary test data and assertions across those exact names.
Constant fields are identical across every generated record — tenant ID, region code, account code. They give the dataset a shared context without wasting uniqueness budget on fields that don’t need to vary.
Varying fields must be unique per record — names, IDs, emails, amounts, dates. The type dropdown (Email, UUID, Decimal, Date, etc.) injects a format constraint into the prompt, telling the model exactly what shape each unique value should take.
At least one Varying field is required. A dataset where every field is constant has no per-record uniqueness and is useless for most test scenarios.
| Format | Use when |
|---|---|
| CSV / TSV | Importing into a tool, spreadsheet, or any system with a flat import feature. |
| JSON | API fixtures, frontend mock data, or any consumer that reads JSON. |
| SQL INSERT | Seeding a relational database. Set the dialect so escaping and date/boolean literals are correct. |
| XML | Structured feeds, EDI documents, or any legacy system that consumes XML. |
| Faker.js factory (TS) | When you need repeatable, version-controlled data generation in a TypeScript project. |
The model returns records inline — keep Quantity at or below 50 for reliable output. For larger volumes, generate a Faker.js factory or SQL script and run it yourself.
Toggling Edge-case records instructs the model to include deliberately invalid and boundary records, clearly flagged as such, alongside the normal records. Specifically it adds:
null variants for nullable fieldsThese records are useful for negative testing — loading the dataset and verifying the system rejects or handles them gracefully. Combine with Scenario mapping if you want each edge-case record linked to a specific test case ID.