当我们使用page来获取一个页面的实例的时候,如果tab一直没有切换的话,一直使用page是没有问题的
但是,如果一个页面打开了一个新的链接的时候,还是用之前的page,就会发生获取不到新页面的元素的情况,因为你的page不一样,所以这个时候就要切换page
方案:
-
1.browser.pages()可以获取所有打开的Page对象,可以通过遍历或筛选找到自己想获取的Page对象
//获取地址为‘http://woleigequ.net/’的Page对象 let pageList = await browser.pages(); let newPage = pageList.filter(item=>item.url() == 'http://woleigequ.net/')[0]
这种情况, 你也可以选择使用pageList[2]之类的获取当前页面数组的第一个元素来获取新的页面的实例
-
通过browser.waitForTarget获取target
//获取地址为‘http://woleigequ.net/’的Page对象 const target = await browser.waitForTarget(t=>t.url() == 'http://woleigequ.net/') const newPage = await target.page();
-
browser.on(‘targetcreated’)
await page.goto('woleigequ.net'); // 打开woleigequ.net await page.waitForSelector('#goto'); // 等待并获取点击跳转的goto元素 const link = await page.$('#goto'); const newPagePromise = new Promise(x => browser.once('targetcreated', target => x(target.page()))); // 声明变量 await link.click(); // 点击跳转 const newPage = await newPagePromise; // newPage就是a链接打开窗口的Page对象