@@ -162,70 +162,74 @@ function BenchmarkJsonReporter(runner) {
162162}
163163
164164async function startTest ( ) {
165+ try {
166+ console . log ( 'Starting' , browserName , 'on' , testUrl ) ;
167+
168+ const options = {
169+ headless : true ,
170+ } ;
171+ const browser = await playwright [ browserName ] . launch ( options ) ;
172+
173+ const page = await browser . newPage ( ) ;
174+
175+ // Playwright's Browser.on('close') event handler would be the more obvious
176+ // choice here, but it does not seem to be triggered if the browser is closed
177+ // by an external event (e.g. process is killed, user closes non-headless
178+ // browser window).
179+ page . on ( 'close' , ( ) => {
180+ if ( ! closeRequested ) {
181+ console . log ( '!!! Browser closed by external event.' ) ;
182+ process . exit ( 1 ) ;
183+ }
184+ } ) ;
165185
166- console . log ( 'Starting' , browserName , 'on' , testUrl ) ;
186+ const runner = new RemoteRunner ( browser ) ;
187+ new MochaSpecReporter ( runner ) ;
188+ new BenchmarkConsoleReporter ( runner ) ;
167189
168- const options = {
169- headless : true ,
170- } ;
171- const browser = await playwright [ browserName ] . launch ( options ) ;
190+ if ( process . env . JSON_REPORTER ) {
191+ if ( ! process . env . PERF ) {
192+ console . log ( '!!! JSON_REPORTER should only be set if PERF is also set.' ) ;
193+ process . exit ( 1 ) ;
194+ }
195+ new BenchmarkJsonReporter ( runner ) ;
196+ }
172197
173- const page = await browser . newPage ( ) ;
198+ page . exposeFunction ( 'handleMochaEvent' , runner . handleEvent ) ;
199+ page . addInitScript ( ( ) => {
200+ window . addEventListener ( 'message' , ( e ) => {
201+ if ( e . data . type === 'mocha' ) {
202+ window . handleMochaEvent ( e . data . details ) ;
203+ }
204+ } ) ;
205+ } ) ;
174206
175- // Playwright's Browser .on('close') event handler would be the more obvious
176- // choice here, but it does not seem to be triggered if the browser is closed
177- // by an external event (e.g. process is killed, user closes non-headless
178- // browser window).
179- page . on ( 'close' , ( ) => {
180- if ( ! closeRequested ) {
181- console . log ( '!!! Browser closed by external event.' ) ;
182- process . exit ( 1 ) ;
207+ page . on ( 'pageerror' , err => {
208+ if ( browserName === 'webkit' && err . toString ( )
209+ . match ( / ^ F e t c h A P I c a n n o t l o a d h t t p . * d u e t o a c c e s s c o n t r o l c h e c k s . $ / ) ) {
210+ // This is an _uncatchable_, error seen in playwright v1.36.1 webkit. If
211+ // it is ignored, fetch () will also throw a _catchable_:
212+ // `TypeError: Load failed`
213+ console . log ( 'Ignoring error:' , err ) ;
214+ return ;
183215 }
184- } ) ;
185-
186- const runner = new RemoteRunner ( browser ) ;
187- new MochaSpecReporter ( runner ) ;
188- new BenchmarkConsoleReporter ( runner ) ;
189216
190- if ( process . env . JSON_REPORTER ) {
191- if ( ! process . env . PERF ) {
192- console . log ( '!!! JSON_REPORTER should only be set if PERF is also set.' ) ;
217+ console . log ( 'Unhandled error in test page:' , err ) ;
193218 process . exit ( 1 ) ;
194- }
195- new BenchmarkJsonReporter ( runner ) ;
196- }
219+ } ) ;
197220
198- page . exposeFunction ( 'handleMochaEvent' , runner . handleEvent ) ;
199- page . addInitScript ( ( ) => {
200- window . addEventListener ( 'message' , ( e ) => {
201- if ( e . data . type === 'mocha' ) {
202- window . handleMochaEvent ( e . data . details ) ;
203- }
221+ page . on ( 'console' , message => {
222+ console . log ( message . text ( ) ) ;
204223 } ) ;
205- } ) ;
206224
207- page . on ( 'pageerror' , err => {
208- if ( browserName === 'webkit' && err . toString ( )
209- . match ( / ^ F e t c h A P I c a n n o t l o a d h t t p .* d u e t o a c c e s s c o n t r o l c h e c k s .$ / ) ) {
210- // This is an _uncatchable_, error seen in playwright v1.36.1 webkit. If
211- // it is ignored, fetch() will also throw a _catchable_:
212- // `TypeError: Load failed`
213- console . log ( 'Ignoring error:' , err ) ;
214- return ;
215- }
225+ await page . goto ( testUrl ) ;
216226
217- console . log ( 'Unhandled error in test page:' , err ) ;
227+ const userAgent = await page . evaluate ( 'navigator.userAgent' ) ;
228+ console . log ( 'Testing on:' , userAgent ) ;
229+ } catch ( err ) {
230+ console . log ( 'Error starting tests:' , err ) ;
218231 process . exit ( 1 ) ;
219- } ) ;
220-
221- page . on ( 'console' , message => {
222- console . log ( message . text ( ) ) ;
223- } ) ;
224-
225- await page . goto ( testUrl ) ;
226-
227- const userAgent = await page . evaluate ( 'navigator.userAgent' ) ;
228- console . log ( 'Testing on:' , userAgent ) ;
232+ }
229233}
230234
231235devserver . start ( function ( ) {
0 commit comments