Skip to content

Commit 366e86a

Browse files
authored
test-browser: add try/catch (#8824)
1 parent 75070d6 commit 366e86a

File tree

1 file changed

+56
-52
lines changed

1 file changed

+56
-52
lines changed

bin/test-browser.js

Lines changed: 56 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -162,70 +162,74 @@ function BenchmarkJsonReporter(runner) {
162162
}
163163

164164
async 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(/^Fetch API cannot load http.* due to access control checks.$/)) {
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(/^Fetch API cannot load http.* due to access control checks.$/)) {
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

231235
devserver.start(function () {

0 commit comments

Comments
 (0)