HTML report troubleshooting
A report that works on your machine and breaks everywhere else is not a random event. It is one of about six causes, and the browser console names which one before you start guessing.
Start here: read the console
| Console says | Cause | Page |
|---|---|---|
404 on .css / .js |
Only the entry file travelled | Lost CSS |
CORS error against file:///… |
Opaque local origin | Allure blank · Playwright blank |
Refused to … violates … Content Security Policy |
The host's policy | Mixed content vs CSP |
…requested an insecure resource… |
Mixed content | Mixed content |
| Nothing — the page just downloads | Wrong Content-Type |
S3 downloads instead of rendering |
| Nothing — the chart box is empty | The library never loaded | Plotly missing |
Blank pages and missing content
- Allure report opens as a blank page — the XHR-loaded
data/tree, and whyallure openworks - Playwright report is blank or won't open —
show-report, traces, and the CI zip that makes it worse - Plotly chart missing from the exported HTML — the four
include_plotlyjsmodes - Jupyter widgets don't render in the export — what survives without a kernel
- My HTML report lost its CSS — five causes, in order
- Coverage report links 404 on click-through — the directory you left behind
Hosting and delivery
- GitHub Actions artifact HTML won't open — why it is always a zip
- GitLab Pages report 404s — the
public/rule and branch collisions - The CI artifact link expired — four deletion mechanisms, only one of them retention
- S3 downloads your HTML instead of rendering it — the
Content-Typefix - Mixed content blocked — telling it apart from a CSP refusal
- The localhost link doesn't work for others — why, and the two real options
Getting it in front of people
- The HTML file is too big to email — what is making it large, and what to cut
- Slack won't preview an HTML file — the security reason, and what to post
- The agent's output is too long to paste — comment and message ceilings
The pattern underneath all of them
Three things make a report work on your machine, and all three are lost in transit:
- The whole output directory is present. Copy the entry file out and every relative reference breaks.
- The origin is permissive. Your local server gave it a real
http://origin;file://on the recipient's laptop does not. - Your network reaches the CDN. Theirs might not, and the viewer they open it in may refuse the request regardless.
Publishing the output directory to a URL restores all three at once: the entry HTML becomes the report body, assets upload alongside it with their relative references rewritten to the uploaded copies, and the whole thing is served over HTTPS from an address that does not depend on anyone's machine being awake.
Interactivity survives — scripts run in a sandboxed iframe
(allow-scripts, no allow-same-origin) — and readers can select the
failing assertion or the suspicious number and comment on it, rather
than screenshotting it into chat (comment on HTML).
Limits: entry HTML 5 MB; assets 25 MB per file, 250 MB and 500 files per report.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.
Publish a report that opens for everyone →
Related
- Report types — 190+ per-tool publishing guides
- Publish from CI · Quickstart
- Stop screenshotting reports