在点击一个按钮跳转到新的 Tab 页时会新开一个页面,这个时候我们如何获取该页面对应的 Page 实例呢?可以通过监听 Browser 上的 targetcreated 事件来实现,表示有新的页面创建:
let page = await browser.newPage(); await page.goto(url); let btn = await page.waitForSelector('#btn'); //在点击按钮之前,事先定义一个 Promise,用于返回新 tab 的 Page 对象 const newPagePromise = new Promise(res => browser.once('targetcreated', target => res(target.page()) ) ); await btn.click(); //点击按钮后,等待新tab对象 let newPage = await newPagePromise;
改良版:
let page = await browser.newPage(); await page.goto(url); let btn = await page.waitForSelector('#btn'); // 在点击按钮之前,事先定义一个 Promise,用于返回新 tab 的 Page 对象 const newPagePromise = new Promise(resolve => { //【特别注意】超时设置:20秒 let timeout = setTimeout(() => { resolve(); }, 20000); browser.once('targetcreated', target => { resolve(target.page()); clearTimeout(timeout); } ) } ); await btn.click(); // 点击按钮后,等待新tab对象 let newPage = await newPagePromise;