@@ -355,7 +355,7 @@ class Playwright extends Helper {
355355 this . recordingWebSocketMessages = false
356356 this . recordedWebSocketMessagesAtLeastOnce = false
357357 this . cdpSession = null
358-
358+
359359 // Filter out invalid customLocatorStrategies (empty arrays, objects without functions)
360360 // This can happen in worker threads where config is serialized/deserialized
361361 let validCustomLocators = null
@@ -367,7 +367,7 @@ class Playwright extends Helper {
367367 validCustomLocators = config . customLocatorStrategies
368368 }
369369 }
370-
370+
371371 this . customLocatorStrategies = validCustomLocators
372372 this . _customLocatorsRegistered = false
373373
@@ -794,10 +794,7 @@ class Playwright extends Helper {
794794 await Promise . allSettled ( pages . map ( p => p . close ( ) . catch ( ( ) => { } ) ) )
795795 }
796796 // Use timeout to prevent hanging (10s should be enough for browser cleanup)
797- await Promise . race ( [
798- this . _stopBrowser ( ) ,
799- new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser stop timeout' ) ) , 10000 ) ) ,
800- ] )
797+ await Promise . race ( [ this . _stopBrowser ( ) , new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser stop timeout' ) ) , 10000 ) ) ] )
801798 } catch ( e ) {
802799 console . warn ( 'Warning during browser restart in _after:' , e . message )
803800 // Force cleanup even on timeout
@@ -840,10 +837,7 @@ class Playwright extends Helper {
840837 if ( this . isRunning ) {
841838 try {
842839 // Add timeout protection to prevent hanging
843- await Promise . race ( [
844- this . _stopBrowser ( ) ,
845- new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser stop timeout in afterSuite' ) ) , 10000 ) ) ,
846- ] )
840+ await Promise . race ( [ this . _stopBrowser ( ) , new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser stop timeout in afterSuite' ) ) , 10000 ) ) ] )
847841 } catch ( e ) {
848842 console . warn ( 'Warning during suite cleanup:' , e . message )
849843 // Track suite cleanup failures
@@ -954,10 +948,7 @@ class Playwright extends Helper {
954948 if ( this . isRunning ) {
955949 try {
956950 // Add timeout protection to prevent hanging
957- await Promise . race ( [
958- this . _stopBrowser ( ) ,
959- new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser stop timeout in cleanup' ) ) , 10000 ) ) ,
960- ] )
951+ await Promise . race ( [ this . _stopBrowser ( ) , new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser stop timeout in cleanup' ) ) , 10000 ) ) ] )
961952 } catch ( e ) {
962953 console . warn ( 'Warning during final cleanup:' , e . message )
963954 // Force cleanup on timeout
@@ -970,10 +961,7 @@ class Playwright extends Helper {
970961 if ( this . browser ) {
971962 try {
972963 // Add timeout protection to prevent hanging
973- await Promise . race ( [
974- this . _stopBrowser ( ) ,
975- new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser stop timeout in forced cleanup' ) ) , 10000 ) ) ,
976- ] )
964+ await Promise . race ( [ this . _stopBrowser ( ) , new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser stop timeout in forced cleanup' ) ) , 10000 ) ) ] )
977965 } catch ( e ) {
978966 console . warn ( 'Warning during forced cleanup:' , e . message )
979967 // Force cleanup on timeout
@@ -1390,7 +1378,7 @@ class Playwright extends Helper {
13901378 this . context = null
13911379 this . frame = null
13921380 popupStore . clear ( )
1393-
1381+
13941382 // Remove all event listeners to prevent hanging
13951383 if ( this . browser ) {
13961384 try {
@@ -1399,7 +1387,7 @@ class Playwright extends Helper {
13991387 // Ignore errors if browser is already closed
14001388 }
14011389 }
1402-
1390+
14031391 if ( this . options . recordHar && this . browserContext ) {
14041392 try {
14051393 await this . browserContext . close ( )
@@ -1408,16 +1396,11 @@ class Playwright extends Helper {
14081396 }
14091397 }
14101398 this . browserContext = null
1411-
1399+
14121400 if ( this . browser ) {
14131401 try {
14141402 // Add timeout to prevent browser.close() from hanging indefinitely
1415- await Promise . race ( [
1416- this . browser . close ( ) ,
1417- new Promise ( ( _ , reject ) =>
1418- setTimeout ( ( ) => reject ( new Error ( 'Browser close timeout' ) ) , 5000 )
1419- )
1420- ] )
1403+ await Promise . race ( [ this . browser . close ( ) , new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'Browser close timeout' ) ) , 5000 ) ) ] )
14211404 } catch ( e ) {
14221405 // Ignore errors if browser is already closed or timeout
14231406 if ( ! e . message ?. includes ( 'Browser close timeout' ) ) {
@@ -1539,7 +1522,7 @@ class Playwright extends Helper {
15391522 acceptDownloads : true ,
15401523 ...this . options . emulate ,
15411524 }
1542-
1525+
15431526 try {
15441527 this . browserContext = await this . browser . newContext ( contextOptions )
15451528 } catch ( err ) {
@@ -3183,14 +3166,14 @@ class Playwright extends Helper {
31833166 this . debugSection ( 'Response' , await response . text ( ) )
31843167
31853168 // hook to allow JSON response handle this
3186- if ( this . config . onResponse ) {
3169+ if ( this . options . onResponse ) {
31873170 const axiosResponse = {
31883171 data : await response . json ( ) ,
31893172 status : response . status ( ) ,
31903173 statusText : response . statusText ( ) ,
31913174 headers : response . headers ( ) ,
31923175 }
3193- this . config . onResponse ( axiosResponse )
3176+ this . options . onResponse ( axiosResponse )
31943177 }
31953178
31963179 return response
@@ -4337,11 +4320,11 @@ function isRoleLocatorObject(locator) {
43374320 */
43384321async function handleRoleLocator ( context , locator ) {
43394322 if ( ! isRoleLocatorObject ( locator ) ) return null
4340-
4323+
43414324 const options = { }
43424325 if ( locator . text ) options . name = locator . text
43434326 if ( locator . exact !== undefined ) options . exact = locator . exact
4344-
4327+
43454328 return context . getByRole ( locator . role , Object . keys ( options ) . length > 0 ? options : undefined ) . all ( )
43464329}
43474330
@@ -4350,7 +4333,7 @@ async function findElements(matcher, locator) {
43504333 const isReactLocator = locator . type === 'react' || ( locator . locator && locator . locator . react ) || locator . react
43514334 const isVueLocator = locator . type === 'vue' || ( locator . locator && locator . locator . vue ) || locator . vue
43524335 const isPwLocator = locator . type === 'pw' || ( locator . locator && locator . locator . pw ) || locator . pw
4353-
4336+
43544337 if ( isReactLocator ) return findReact ( matcher , locator )
43554338 if ( isVueLocator ) return findVue ( matcher , locator )
43564339 if ( isPwLocator ) return findByPlaywrightLocator . call ( this , matcher , locator )
@@ -4391,7 +4374,7 @@ async function findCustomElements(matcher, locator) {
43914374 // Always prioritize this.customLocatorStrategies which is set in constructor from config
43924375 // and persists in every worker thread instance
43934376 let strategyFunction = null
4394-
4377+
43954378 if ( this . customLocatorStrategies && this . customLocatorStrategies [ locator . type ] ) {
43964379 strategyFunction = this . customLocatorStrategies [ locator . type ]
43974380 } else if ( globalCustomLocatorStrategies . has ( locator . type ) ) {
@@ -4967,7 +4950,7 @@ async function refreshContextSession() {
49674950 this . debugSection ( 'Session' , 'Skipping storage cleanup - no active page/context' )
49684951 return
49694952 }
4970-
4953+
49714954 const currentUrl = await this . grabCurrentUrl ( )
49724955
49734956 if ( currentUrl . startsWith ( 'http' ) ) {
0 commit comments