在点击一个按钮跳转到新的 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;