diff --git a/packages/html-reporter/src/index.tsx b/packages/html-reporter/src/index.tsx index 0c3f0a6dc0..16c1ae1a88 100644 --- a/packages/html-reporter/src/index.tsx +++ b/packages/html-reporter/src/index.tsx @@ -50,6 +50,8 @@ window.onload = () => { ReactDOM.createRoot(document.querySelector('#root')!).render(); }; +const kPlaywrightReportStorageForHMR = 'playwrightReportStorageForHMR'; + class ZipReport implements LoadedReport { private _entries = new Map(); private _json!: HTMLReport; @@ -58,8 +60,20 @@ class ZipReport implements LoadedReport { const zipURI = await new Promise(resolve => { if (window.playwrightReportBase64) return resolve(window.playwrightReportBase64); - window.addEventListener('message', event => event.source === window.opener && resolve(event.data), { once: true }); - window.opener.postMessage('ready', '*'); + if (window.opener) { + window.addEventListener('message', event => { + if (event.source === window.opener) { + localStorage.setItem(kPlaywrightReportStorageForHMR, event.data); + resolve(event.data); + } + }, { once: true }); + window.opener.postMessage('ready', '*'); + } else { + const oldReport = localStorage.getItem(kPlaywrightReportStorageForHMR); + if (oldReport) + return resolve(oldReport); + alert('couldnt find report, something with HMR is broken'); + } }); const zipReader = new zipjs.ZipReader(new zipjs.Data64URIReader(zipURI), { useWebWorkers: false });