Any tool can print a coverage percentage. The number is almost always inflated, because the hard half of a QA suite quietly falls out of the denominator — the steps that need a human eye, a second device, a real charge on a real card.
This inverts it. Coverage is claimed only where a real selector can be emitted, and every step that does not make the cut comes back with a reason you can act on. Two rules hold that line.
No guessed selectors
If a test case says tap the first card, there is no label to target. A tool that guesses produces a test that passes while checking nothing — strictly worse than no test. So that step is reported as a gap, with the fix named: quote the label, or add an accessibility id.
A scenario counts only if every step compiled
A flow that silently skips its one manual step still goes green. Incomplete flows are written as .partial.yaml, carry a header saying a green run proves nothing, and are excluded from the coverage number everywhere.
Why the second rule matters. Step coverage and scenario coverage are different numbers, and they diverge a long way on real suites. The step percentage is what a vendor puts on a slide. The count of scenarios that run start to finish is what you can trust on a release night. You get both, side by side, and the gap between them is usually the finding.