@@ -2680,33 +2680,16 @@ class Playwright extends Helper {
26802680
26812681 this . debugSection ( 'Screenshot' , relativeDir ( outputFile ) )
26822682
2683- // Multiple layers of checking before attempting screenshot
2684- if ( ! this . page ) {
2685- this . debug ( 'Cannot take screenshot: page object is undefined' )
2683+ if ( ! this . page || ! this . browser || ! this . browserContext ) {
2684+ this . debug ( `Cannot take screenshot: page=${ ! ! this . page } , browser=${ ! ! this . browser } , browserContext=${ ! ! this . browserContext } ` )
26862685 return
26872686 }
2688-
2689- if ( ! this . browser ) {
2690- this . debug ( 'Cannot take screenshot: browser object is undefined' )
2691- return
2692- }
2693-
2694- if ( ! this . browserContext ) {
2695- this . debug ( 'Cannot take screenshot: browser context is undefined' )
2687+ if ( this . page . isClosed && this . page . isClosed ( ) ) {
2688+ this . debug ( 'Cannot take screenshot: page is closed' )
26962689 return
26972690 }
26982691
26992692 try {
2700- // Check if page is still accessible before taking screenshot
2701- if ( this . page . isClosed && this . page . isClosed ( ) ) {
2702- this . debug ( 'Cannot take screenshot: page is closed' )
2703- return
2704- }
2705-
2706- // Additional check - try to access page properties to ensure it's alive
2707- await Promise . race ( [ this . page . url ( ) , new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Page URL check timeout' ) ) , 1000 ) ) ] )
2708-
2709- // Take screenshot with timeout protection
27102693 await Promise . race ( [
27112694 this . page . screenshot ( {
27122695 path : outputFile ,
@@ -2718,18 +2701,10 @@ class Playwright extends Helper {
27182701 } catch ( err ) {
27192702 this . debug ( `Failed to take screenshot: ${ err . message } ` )
27202703
2721- // Track screenshot failures that could affect test results
27222704 this . hasCleanupError = true
27232705 this . testFailures . push ( `Screenshot failed: ${ err . message } ` )
27242706
2725- if (
2726- err . message . includes ( 'Target page, context or browser has been closed' ) ||
2727- err . message . includes ( 'Page has been closed' ) ||
2728- err . message . includes ( 'Browser has been closed' ) ||
2729- err . message . includes ( 'Protocol error' ) ||
2730- err . message . includes ( 'Connection closed' ) ||
2731- err . message . includes ( 'timeout' )
2732- ) {
2707+ if ( err . message . includes ( 'closed' ) || err . message . includes ( 'Protocol error' ) || err . message . includes ( 'timeout' ) ) {
27332708 this . debug ( 'Screenshot failed due to browser/page closure or timeout, continuing...' )
27342709 return
27352710 }
0 commit comments