The evidence of a failed iPhone 15 Pro case, step by step: consent checkbox not pre-checked (pass), consent disclosure font 9 px below the default 10 px minimum (fail), axe-core accessibility with no violations (pass), then the form submits.
Step-by-step evidence: the consent check names exactly what failed and where.

What the consent disclosure check verifies

The Check consent disclosure step finds the disclosure by CSS selector or by a distinctive phrase and runs up to six checks in order. It checks visibility, and measures font size, contrast and distance to the submit button against thresholds you set. Whether a disclosure is sufficient is a legal question for your counsel.

  • Present: the block is found within the step timeout
  • Wording: the rendered text matches your approved text, exactly or contained, with a word-level diff when it differs
  • Visible: not hidden, clipped or covered by a modal, sticky footer or cookie banner; the covering element is named
  • Font size: the smallest rendered text is at least your minimum (a configurable default of 10 px)
  • Contrast: the lowest WCAG 2 contrast ratio is at least your minimum (a configurable default of 4.5:1)
  • Near: the disclosure is within a set distance of the submit button (200 px by default)

Consent checkbox: not pre-checked and labelled

The Check consent checkbox step goes before any step that ticks the box. It fails when the box is already checked, when the element is not a checkbox, or when it has no label from a label element, aria-label, aria-labelledby or title: a rule you can require in your QA. A box that the HTML marks checked but a script unchecks is reported as a warning.

Lead-certificate script checks

The Check script loaded step waits for your page's own lead-certificate script to finish. The runner never calls these services itself, and the token or certificate value is never recorded, only whether it is populated and its length.

  • TrustedForm: a script from api.trustedform.com loaded and the TrustedFormCertUrl input holds a certificate URL
  • Jornaya LeadiD: a script from create.lidstatic.com loaded and the leadid_token input is populated
  • Custom: a script URL pattern, plus an optional populated input or initialized global

TrustedForm, Jornaya and LeadiD are trademarks of their owners; this project is not affiliated with them.

State-specific wording with datasets

Put each state's approved disclosure in a dataset variable and use it as the approved text. Each dataset row runs separately and is named in results, and for location-dependent pages the same matrix can run from the states your campaign targets, with your own proxy plan.

One run reports every problem

With Continue if this check fails turned on, a failed check records its evidence, marks the case failed and lets the remaining steps run. Results show a summary of every failed or warning check above the matrix, such as "consent font 9px", a badge per check on each case and the evidence under each step.

  • Accessibility (axe-core) and performance budgets can run in the same scenario
  • JSON exports contain everything; JUnit adds a check property per check; the HTML report adds a Checks table
  • Export the scenario for the CI runner, Docker image or GitHub Action

QA aids, not legal advice

These checks automate repeatable parts of consent QA. They are not legal advice and do not decide whether a disclosure is sufficient. Approved wording, placement rules and consent requirements come from your counsel. Run them against staging with synthetic test leads that your systems tag as tests.

STEP BY STEP

How it works.

Every step and setting is covered in the documentation linked below.

Read the docs
  1. Use staging and synthetic data

    Point the scenario at a staging environment you own and submit only synthetic test leads that your systems tag as tests.

  2. Build the scenario

    Add steps by hand or record the steps to reach the form. Add the consent checkbox check before ticking the box, the disclosure check with your approved wording and the submit button as the nearby element, the script check and an accessibility check scoped to the form.

  3. Keep every check running

    Turn on Continue if this check fails for each check, so one run reports every problem on the page.

  4. Run the matrix

    Choose the devices your traffic uses, such as small phones and tablets, a large Android phone and a desktop, plus the engines and, where needed, the states. Small screens are where disclosures get covered or shrink.

  5. Fix and export

    Fix each failing combination, run again, and export the HTML report for the record or JUnit for CI.

GOOD TO KNOW

Common questions.

Is this legal advice?

No. The checks automate repeatable parts of consent QA and cannot prove that a page complies with any law. Your counsel decides the approved wording, placement rules and consent requirements; the checks test the page against the wording and thresholds you set. Disclaimer

Which font-size and contrast thresholds does the check use?

Configurable defaults, not legal minimums: 10 px font and a 4.5:1 WCAG AA contrast ratio, with no large-text exception (set 3 for disclosures that are WCAG large text). Your counsel decides the actual requirement; the check tests the page against the thresholds you set. Disclosure check reference

Does the check contact TrustedForm or Jornaya?

No. The runner never calls these services. Your page's own script contacts its vendor exactly as it would for a visitor, so use the vendor's test or staging configuration where it offers one. The token or certificate value is never recorded. Lead-certificate script check reference

What if a background image sits behind the disclosure?

Contrast cannot be measured over a background image or gradient, so the step records a warning instead of a pass or fail. Verify those disclosures by hand. How checks work

Which devices should I test?

The ones your traffic uses: a small phone such as iPhone SE, a large Android phone, a tablet and a desktop. Small screens are where disclosures get covered by sticky buttons or shrink below your minimum size. Pre-launch consent QA workflow

Do I need a proxy to run these checks?

No. The checks run on a direct connection; a proxy plan matters only for pages that change by visitor location. Location testing

What if my own bot protection blocks the test runs?

Allowlist your QA traffic on your site with a site access token: a secret header sent only to the origins you list. Tokens are sent by desktop launches and QA automation only; for CI, allowlist the runner's network on staging or use your vendor's test keys. The checks only read what your page renders and loads, and never try to get past bot protection. When to use site access tokens

Try it on your own site.

Free and open source, for Windows, Linux and macOS. Use it on sites you own or are contracted to test.