Skip to content

Commit 519e331

Browse files
authored
playwright: handle externally-triggered browser-close event (#8836)
Previously if the browser is closed during a playwright test run by an external event, the tests would hang indefinitely. This commit makes the test run fail immediately.
1 parent e90267b commit 519e331

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

bin/test-browser.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ var devserver = require('./dev-server.js');
1212
// BAIL=0 to disable bailing
1313
var bail = process.env.BAIL !== '0';
1414

15+
// Track if the browser has closed at the request of this script, or due to an external event.
16+
let closeRequested;
17+
1518
// Playwright BrowserType whitelist.
1619
// See: https://playwright.dev/docs/api/class-playwright
1720
const SUPPORTED_BROWSERS = [ 'chromium', 'firefox', 'webkit' ];
@@ -91,12 +94,14 @@ class RemoteRunner {
9194
} catch (e) {
9295
console.error('Tests failed:', e);
9396

97+
closeRequested = true;
9498
await this.browser.close();
9599
process.exit(3);
96100
}
97101
}
98102

99103
async handleEnd(failed) {
104+
closeRequested = true;
100105
await this.browser.close();
101106
process.exit(!process.env.PERF && failed ? 1 : 0);
102107
}
@@ -147,8 +152,20 @@ async function startTest() {
147152
headless: true,
148153
};
149154
const browser = await playwright[browserName].launch(options);
155+
150156
const page = await browser.newPage();
151157

158+
// Playwright's Browser.on('close') event handler would be the more obvious
159+
// choice here, but it does not seem to be triggered if the browser is closed
160+
// by an external event (e.g. process is killed, user closes non-headless
161+
// browser window).
162+
page.on('close', () => {
163+
if (!closeRequested) {
164+
console.log('!!! Browser closed by external event.');
165+
process.exit(1);
166+
}
167+
});
168+
152169
const runner = new RemoteRunner(browser);
153170
new MochaSpecReporter(runner);
154171
new BenchmarkConsoleReporter(runner);

0 commit comments

Comments
 (0)