← Engineering lab · Laboratorio ES
NEGATIVE CONTROLS FOR BROWSER TESTS
Green tests.
Broken product?
One checkout. Two very different test suites.. The same journey, controlled faults, repeated checks. An armed fault is not evidence until it actually applies.
SCENARIO / weak-checkout
Weak checks: everything is still green
| Injected fault | Verdict | Evidence |
|---|---|---|
| Checkout button does nothingblock-click · dead-checkout | survived | 1 / 1 hits |
Why this result?The fault applied in every repetition; all verification checks still passed. Review the test and fault relevance. Run 1 · passed · 235 ms · phase: complete Run 2 · passed · 229 ms · phase: complete | ||
| Product image cannot decodebreak-image · broken-image | survived | 1 / 1 hits |
Why this result?The fault applied in every repetition; all verification checks still passed. Review the test and fault relevance. Run 1 · passed · 249 ms · phase: complete Run 2 · passed · 235 ms · phase: complete | ||
| Shipping information is invisiblehide-element · hidden-shipping | survived | 1 / 1 hits |
Why this result?The fault applied in every repetition; all verification checks still passed. Review the test and fault relevance. Run 1 · passed · 240 ms · phase: complete Run 2 · passed · 233 ms · phase: complete | ||
| Confirmation copy is corruptedreplace-text · wrong-confirmation | survived | 1 / 1 hits |
Why this result?The fault applied in every repetition; all verification checks still passed. Review the test and fault relevance. Run 1 · passed · 224 ms · phase: complete Run 2 · passed · 260 ms · phase: complete | ||
| Explicit button label is removedremove-attribute · missing-accessible-name | survived | 1 / 1 hits |
Why this result?The fault applied in every repetition; all verification checks still passed. Review the test and fault relevance. Run 1 · passed · 225 ms · phase: complete Run 2 · passed · 241 ms · phase: complete | ||
Inspect clean controls before and after
{
"before": [
{
"outcome": "passed",
"phase": "complete",
"hits": 0,
"durationMs": 322,
"message": null,
"blockedRequests": 0,
"injectionErrors": []
},
{
"outcome": "passed",
"phase": "complete",
"hits": 0,
"durationMs": 239,
"message": null,
"blockedRequests": 0,
"injectionErrors": []
}
],
"after": [
{
"outcome": "passed",
"phase": "complete",
"hits": 0,
"durationMs": 238,
"message": null,
"blockedRequests": 0,
"injectionErrors": []
},
{
"outcome": "passed",
"phase": "complete",
"hits": 0,
"durationMs": 246,
"message": null,
"blockedRequests": 0,
"injectionErrors": []
}
]
}SCENARIO / strong-checkout
Behavior checks: the same faults are detected
| Injected fault | Verdict | Evidence |
|---|---|---|
| Checkout button does nothingblock-click · dead-checkout | detected | 1 / 1 hits |
Why this result?An assertion failed during verification after the fault applied in every repetition. Run 1 · assertion-failed · 656 ms · phase: verify Run 2 · assertion-failed · 656 ms · phase: verify | ||
| Product image cannot decodebreak-image · broken-image | detected | 1 / 1 hits |
Why this result?An assertion failed during verification after the fault applied in every repetition. Run 1 · assertion-failed · 254 ms · phase: verify Run 2 · assertion-failed · 263 ms · phase: verify | ||
| Shipping information is invisiblehide-element · hidden-shipping | detected | 1 / 1 hits |
Why this result?An assertion failed during verification after the fault applied in every repetition. Run 1 · assertion-failed · 264 ms · phase: verify Run 2 · assertion-failed · 264 ms · phase: verify | ||
| Confirmation copy is corruptedreplace-text · wrong-confirmation | detected | 1 / 1 hits |
Why this result?An assertion failed during verification after the fault applied in every repetition. Run 1 · assertion-failed · 212 ms · phase: verify Run 2 · assertion-failed · 188 ms · phase: verify | ||
| Explicit button label is removedremove-attribute · missing-accessible-name | detected | 1 / 1 hits |
Why this result?An assertion failed during verification after the fault applied in every repetition. Run 1 · assertion-failed · 237 ms · phase: verify Run 2 · assertion-failed · 242 ms · phase: verify | ||
Inspect clean controls before and after
{
"before": [
{
"outcome": "passed",
"phase": "complete",
"hits": 0,
"durationMs": 283,
"message": null,
"blockedRequests": 0,
"injectionErrors": []
},
{
"outcome": "passed",
"phase": "complete",
"hits": 0,
"durationMs": 227,
"message": null,
"blockedRequests": 0,
"injectionErrors": []
}
],
"after": [
{
"outcome": "passed",
"phase": "complete",
"hits": 0,
"durationMs": 244,
"message": null,
"blockedRequests": 0,
"injectionErrors": []
},
{
"outcome": "passed",
"phase": "complete",
"hits": 0,
"durationMs": 239,
"message": null,
"blockedRequests": 0,
"injectionErrors": []
}
]
}