Closing a page in Playwright is straightforward. You just need to call the page.close()
method. This method will close the page and wait for it to actually close.
However, there's a case where page.close()
doesn't wait for the page to close. This happens when you pass a truthy value for the runBeforeUnload
option.
Before closing a page, you might encounter dialogs. To handle these, you can register a dialog handler using page.on('dialog', dialog => {})
. Inside this handler, check if the dialog type is 'beforeunload'
and then dismiss it using dialog.dismiss()
.
Here's how you can do it:
import { chromium } from 'playwright';
async function closePage() {
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
// Register dialog handler
page.on('dialog', async (dialog) => {
if (dialog.type() === 'beforeunload') {
await dialog.dismiss();
}
});
// Close the page with runBeforeUnload option set to true
await page.close({ runBeforeUnload: true });
// Close browser
await browser.close();
}
closePage().catch(console.error);
In this code, we first launch a Chromium browser, create a new context, and open a new page. Then we register a dialog handler where we check if the dialog type is 'beforeunload'
and dismiss it.
Finally, we close the page while handling any beforeunload dialogs and close the browser.
Remember, this code is a general example and may need to be adapted to your specific use case. Happy testing with Playwright!
If you still have questions, please ask a question and I will try to answer it.
Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email [email protected].