Running your first QA audit

Run a comprehensive, structured QA run that tests every page’s elements with happy-path and negative tests.

A QA audit is Canary’s comprehensive battle-test of your app. It runs an exhaustive, structured set of checks across your pages, broken down by the elements detected on each page (tables, forms, buttons, inputs, links, etc.).

It’s designed to:

  • Execute happy paths and negative tests consistently
  • Produce high-quality issues with clear evidence (screenshots, trace, network/console context)
  • Give you a report you can use as a release gate and regression baseline

When to run it

  • Before a release (especially after auth/navigation changes)
  • After major refactors
  • After onboarding a new area of the app
  • On a schedule (nightly/weekly) to catch regressions early

Before you start

  • You have a Property for the environment you want to audit.
  • If login is required, set up credentials: Credentials and login.
  • Crawl recently so Canary has current pages + detected elements: Crawling.

1) Start a QA audit from Runs

  1. Go to Runs.
  2. Select the Property you want to audit.
  3. Create a new QA Run (use crawl-based mode when you want the most comprehensive coverage).

Canary will queue page tests and run structured testing against each page it selects for the run.

2) How structured testing works

For each page in the run, Canary:

  • Uses the latest crawl snapshot to identify page elements.
  • Matches those elements to a catalog of test templates.
  • Generates a pre-populated checklist (a TODO list) like:
    • [Form] Invite teammate - Submit empty form
    • [Data Table] Users - Test sort by column
  • Executes all tests, including happy-path and negative checks.
  • Files issues when tests fail, with supporting artifacts.

If an interaction reveals new elements (a modal form, a dropdown menu, a new table state), Canary adds additional checks and tests them too.

Elements Canary detects

Structured testing is based on detected element types:

  • Data Table: paginated/sortable/filterable data grids.
  • Form: multi-field submission surfaces (create/edit, settings, onboarding).
  • Table: static/read-only tables.
  • Button: primary actions (save, create, delete, open dialogs).
  • Link: navigation and deep links.
  • Input: single input controls (textboxes, comboboxes, search inputs, etc.).
  • Other: interactive elements that don’t match the types above.

Default tests Canary runs (happy paths + negative tests)

These are the default template tests Canary applies per element type.

Form

  • Submit empty form: Verify validation errors appear when required fields are missing.
  • Submit with valid data: Fill valid values and verify the submit succeeds.
  • Verify required fields are marked: Required fields show indicators and enforce validation.
  • Verify optional fields accept empty values: Optional fields can be blank without errors.
  • Test field type validation: Email/phone/URL formats validate correctly.
  • Test form reset/clear: Reset/clear returns fields to default state.
  • Verify submit button disabled state: Disabled while invalid or during submission.
  • Test field character limits: Max lengths enforced where applicable.

Button

  • Click triggers expected action: Click performs the intended action.
  • Verify loading/disabled states: Loading indicator + disabled during async operations.
  • Test keyboard activation: Activates with Enter/Space.
  • Verify button label matches action: Text matches what it does.
  • Test focus visibility: Focus ring/indicator is visible for keyboard users.

Data Table

  • Verify pagination controls: Page navigation, page size, indicators.
  • Test sort by column: Sort toggles and data order changes correctly.
  • Test filter/search functionality: Filters narrow results appropriately.
  • Verify empty state message: Clear empty state when no rows match.
  • Test row selection: Single/multi-select works (when present).
  • Verify data refresh: Refresh updates data from the server.
  • Test column visibility toggle: Show/hide columns (when present).
  • Verify row actions: Row action buttons/menus work correctly.

Link

  • Navigate to correct destination: Click navigates to expected URL/location.
  • Opens in correct context: Same tab vs new tab behavior is correct.
  • Verify link text is descriptive: Text clearly indicates destination/action.
  • Test keyboard navigation: Focusable and activates with Enter.
  • Verify visual link styling: Visual treatment (color/underline) is appropriate.

Input

  • Accept valid input: Valid values accepted without errors.
  • Reject invalid input: Invalid values show errors.
  • Test clear field functionality: Clear button/action works (when present).
  • Verify placeholder text: Helpful placeholder and correct focus behavior.
  • Test character limits: Max lengths enforced where applicable.
  • Verify autocomplete behavior: Suggestions work (when present).
  • Test copy/paste functionality: Paste works and formats correctly.

Table (static)

  • Verify column headers: Headers present and correctly labeled.
  • Verify data displays correctly: Cell values match expected formats.
  • Test empty state: Empty message when no data.
  • Verify responsive behavior: Usable on different screen sizes.
  • Test row hover states: Hover feedback is appropriate (when present).

Other

  • Verify expected interaction: Primary interaction works as intended.
  • Test keyboard accessibility: Reachable and usable by keyboard.
  • Verify visual feedback: Clear feedback on interaction.
  • Test screen reader compatibility: Properly announced by screen readers.

3) View the full report

To review results:

  1. Open the run from Runs.
  2. Use the results table to drill into a specific page’s report.
  3. Review artifacts (screenshots/trace) and any captured console/network context.

4) Turn audit coverage into a release gate

Once your audit is stable, take the highest-signal coverage and operationalize it:

  • Use the audit results to identify the “must-not-regress” journeys.
  • Turn those journeys into Flows.
  • Add the top flows to a smoke suite and run it before every release.

Next steps