Reputation: 689
How do I focus on the newly opened tab in puppeteer? I click an element on the page that opens up a new tab and then puppeteer stays focused on the page that was just left for some reason. How can I focus on the newly opened tab? I'm using google chrome browser
Upvotes: 10
Views: 4017
Reputation: 4189
Each browser context can host multiple pages (tabs).
Each page behaves like a focused, active page. Bringing the page to front is not required. Pages inside a context respect context-level emulation, like viewport sizes, custom network routes or browser locale.
// Create two pages
const pageOne = await context.newPage();
const pageTwo = await context.newPage();
// Get pages of a browser context
const allPages = context.pages();
The page event on browser contexts can be used to get new pages that are created in the context. This can be used to handle new pages opened by target="_blank" links.
// Start waiting for new page before clicking. Note no await.
const pagePromise = context.waitForEvent('page');
await page.getByText('open new tab').click();
const newPage = await pagePromise;
await newPage.waitForLoadState();
console.log(await newPage.title());
If the action that triggers the new page is unknown, the following pattern can be used.
// Get all new pages (including popups) in the context context.on('page', async page => { await page.waitForLoadState(); console.log(await page.title()); });
If the page opens a pop-up (e.g. pages opened by target="_blank" links), you can get a reference to it by listening to the popup event on the page.
This event is emitted in addition to the browserContext.on('page') event, but only for popups relevant to this page.
// Start waiting for popup before clicking. Note no await.
const popupPromise = page.waitForEvent('popup');
await page.getByText('open the popup').click();
const popup = await popupPromise;
// Wait for the popup to load.
await popup.waitForLoadState();
console.log(await popup.title());
Reference: https://playwright.dev/docs/pages#multiple-pages
Upvotes: 0
Reputation: 21695
You can use the bringToFront function.
await page.bringToFront();
Upvotes: 7