I am looking for a simpler solution to a current situation. For example, you open the google (any another website) and you want BY CLICK on the button (ex. Gmail) - open this page in the new tab using Playwright.
let browser, page, context;
describe('Check the main page view', function () {
before(async () => {
for (const browserType of ['chromium']) {
browser = await playwright[browserType].launch({headless: false});
context = await browser.newContext();
page = await context.newPage();
await page.goto(baseUrl);
}
});
after(async function () {
browser.close();
});
await page.click(tax);
const taxPage = await page.getAttribute(taxAccount, 'href');
const [newPage] = await Promise.all([
context.waitForEvent('page'),
page.evaluate((taxPage) => window.open(taxPage, '_blank'), taxPage)]);
await newPage.waitForLoadState();
console.log(await newPage.title());
it('Open a new tab', async function () {
await page.click(button, { button: "middle" });
await page.waitForTimeout(); //waitForNavigation and waitForLoadState do not work in this case
let pages = await context.pages();
expect(await pages[1].title()).equal('Title');
You could pass a modifier
to the click
function. In macos it would be Meta
because you'd open in a new tab with cmd+click. In windows it would be Control
.
const browser = await playwright["chromium"].launch({headless : false});
const page = await browser.newPage();
await page.goto('https://www.facebook.com/');
var pagePromise = page.context().waitForEvent('page', p => p.url() =='https://www.messenger.com/');
await page.click('text=Messenger', { modifiers: ['Meta']});
const newPage = await pagePromise;
await newPage.bringToFront();
await browser.close();
In my case i am clicking on link in a pop up like ( ctrl + click on link ) then it opens new tab and work on that new tab
await page.click('#open')
const [newTab] = await Promise.all([
page.waitForEvent('popup'),
await page.keyboard.down('Control'),
await page.frameLocator('//iframe[@title="New tab."]').locator('a').click(), // in popup
await page.keyboard.up('Control'),
console.log("clicked on link")
]);
await newTab.waitForFunction(()=>document.title === 'new tab title')
await newTab.fill('#firstname')
await newTab.close() // close the current tab
await page.click('#exitbutton') //back to parent tab and work on it
....
....
await page.close() // close the parent tab
Waiting for new pages is mentioned in the playwright docs now, copied below:
// 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());
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.