@@ -270,6 +270,31 @@ async function savePreviewScreenshot(page, name) {
270270 await handle . dispose ( ) ;
271271}
272272
273+ async function saveImageEvidenceFromBrowser ( url , evidenceName , contentType ) {
274+ assert ( browser , "Browser is unavailable for image evidence" ) ;
275+ const evidencePage = await browser . newPage ( ) ;
276+ try {
277+ await evidencePage . setViewport ( { width : 1200 , height : 800 , deviceScaleFactor : 1 } ) ;
278+ await evidencePage . goto ( url , {
279+ waitUntil : "networkidle0" ,
280+ timeout : RENDER_TIMEOUT_MS ,
281+ } ) ;
282+ const image = await evidencePage . waitForSelector ( "img" , {
283+ visible : true ,
284+ timeout : RENDER_TIMEOUT_MS ,
285+ } ) ;
286+ assert ( image , `Browser did not render image evidence for ${ url } ` ) ;
287+ const outputPath = join ( EVIDENCE_DIR , evidenceName ) ;
288+ if ( contentType . includes ( "jpeg" ) ) {
289+ await image . screenshot ( { path : outputPath , type : "jpeg" , quality : 92 } ) ;
290+ } else {
291+ await image . screenshot ( { path : outputPath , type : "png" } ) ;
292+ }
293+ } finally {
294+ await evidencePage . close ( ) ;
295+ }
296+ }
297+
273298async function fetchImage ( url , evidenceName , expectedContentType = null ) {
274299 const controller = new AbortController ( ) ;
275300 const timeout = setTimeout ( ( ) => controller . abort ( ) , RENDER_TIMEOUT_MS ) ;
@@ -286,7 +311,7 @@ async function fetchImage(url, evidenceName, expectedContentType = null) {
286311 }
287312 const bytes = Buffer . from ( await response . arrayBuffer ( ) ) ;
288313 assert ( bytes . length > 1_000 , `Image evidence was unexpectedly small (${ bytes . length } bytes)` ) ;
289- writeFileSync ( join ( EVIDENCE_DIR , evidenceName ) , bytes ) ;
314+ await saveImageEvidenceFromBrowser ( url , evidenceName , contentType ) ;
290315 return { contentType, sha256 : sha256 ( bytes ) , size : bytes . length } ;
291316 } finally {
292317 clearTimeout ( timeout ) ;
@@ -700,7 +725,6 @@ try {
700725 error : error instanceof Error ? ( error . stack ?? error . message ) : String ( error ) ,
701726 serverLogs : serverLogs . join ( "" ) . slice ( - 12_000 ) ,
702727 } ;
703- writeFileSync ( join ( EVIDENCE_DIR , "failure.json" ) , `${ JSON . stringify ( failure , null , 2 ) } \n` ) ;
704728 console . error ( failure . error ) ;
705729 process . exitCode = 1 ;
706730} finally {
0 commit comments