QA Ultimate Stack
Read form test results: never observed, params missing, fired more than once
What each form test result means, how to tell a site problem from a tag problem from a config problem, and what the run records to help you decide.
Pass or fail per layer
Results show each form's overall status (failures first) and each expectation's result per layer: dataLayer, tag and cookies. A form passes only if every required expectation passed. On Premium, export the results, including the captured values, to Excel.
A results table with rows for several forms showing params OK, params missing, never observed, fired more than once and never got to submit.
What each result means
| Result | Meaning | Usually points at |
|---|---|---|
| Fired, params OK | Observed, with every expected parameter non-blank | Nothing: it works |
| Fired, params missing | Observed, but a parameter was blank or absent | The site's code (dataLayer) or the tag's parameter mapping (tag) |
| Never observed | Not seen before the timeout | The site didn't push it, or the tag didn't fire |
| Fired more than once | The duplicate check found extra fires | A GTM trigger matching twice |
| Never got to submit | A step failed before the submit click | The config: a moved field or a changed page |
| Confirmation never appeared | The success URL or final wait wasn't reached | The site's own validation rejected the submission |
| Missing (info only) | A third-party cookie wasn't set | Usually the browser's tracking prevention |
| Not checked | No expectation was set for this layer | Add one if you need the layer |
A two-column list of form test results with short meanings.
When the site's validation swallowed the submit
A submit click that the site's own validation rejects looks like a tracking gap: no navigation, no conversion push, every post-submit event never observed. ODDVX separates the two. It records whether the page navigated after submit and the URLs it went through. On a failing run, it also records the visible error text and a screenshot. "Please choose an option" next to an unset radio group is a config problem, not a tag problem.
A failure detail showing no navigation after submit, the visible error text and a captured screenshot.
Site, tag or config?
Work down the layers:
- Did the submit land? If not, fix the config or answer the question the site's validation complained about.
- Did the dataLayer push happen, with values? If not, it's the site's code. Send it to the developers with the spec.
- Did the GA4 hit go out? If the push happened but the hit didn't, it's the GTM tag or trigger.
A decision diagram from a missing event to three questions, each pointing at the config, the site's code or the GTM tag.
Read everything the run observed
Each form keeps a timeline of what was observed: every dataLayer push and every GA4 hit, with time and parameters, including the ones you didn't list as expectations. When a parameter is blank in the dataLayer push and blank in the hit, the site sent it blank. When it's filled in the push but blank in the hit, the tag's parameter mapping is wrong.
A timeline of observed dataLayer pushes and GA4 hits, with one push carrying a blank value.
ODDVX for Windows
From the page to the hit, proved.
Start free with one saved form, one page and one parity check. Premium adds batch runs, exports and scheduled QA.