我正在使用Puppeteer在网站内运行测试。单击按钮后,将出现一个带有报告的新弹出浏览器窗口。在该新窗口内是我想要提取的信息。如何让木偶操作者将注意力转移到这个新创建的浏览器窗口?
我的木偶操作页面上有多个打印按钮,点击它会创建弹出窗口,我正在尝试获取这些页面的pdf。这是我正在使用的代码。
let printButtons = await this.page.$$('#printNowButton');
for (var i = 0; i < printButtons.length; i++) {
printButtons[i].click();
const fileName = ('Document'+ i + '.pdf');
browser.on('targetcreated', async target => {
if ((target.url() !== 'about:blank')) {
try {
const pageList = await browser.pages();
const newPage = await pageList[pageList.length - 1];
await newPage.pdf({
path: fileName,
format: 'A4'
}).then(() => {
newPage.close();
});
} catch (e) {
console.log('Error: ' + e);
}
}
});
}
我正在使用puppeteer版本0.13.0 任何其他方式来获得我想要实现的目标也是值得赞赏的。
答案 0 :(得分:1)
您的情况有两种情况 首先,如果您使用的版本低于v0.13.0,您将无法做到 其次,如果您使用节点版本6,则必须手动构建节点组件
cd node_modules/puppeteer
npm run build
答案 1 :(得分:1)
我已经解决了一个类似的用例,我正在测试一个通过window.open打开一个新窗口的页面,我需要在运行一些测试后找到它。只要在打开新窗口之前注册侦听器,就可以为“targetcreated”添加侦听器。
这是我的测试运行器,它执行以下操作:
为“targetcreated”事件添加一个侦听器,其中包含:
查找新打开的页面对象
在打开的页面上运行一些测试。
最后,调用“openSearchWindow”实际上触发了window.open。
这是测试跑步者。我已经用注释替换了我自己的代码,以便您更容易使用。
await browser.on('targetcreated', async () => {
const foundPage = await changePage(theNewURLOfThePopUpWindow);
if(foundPage) {
//Run some basic tests on the new page
const hasLoaded = await runSomeTestsHere();
expect(hasLoaded).to.be.true;
done();
} else {
done('Failed to find new page.');
}
});
//Opens the new popup window by clicking a button
await openSearchWindow(page);
changePage是一个简单的函数,它遍历所有打开的浏览器页面,并使用匹配的URL保存页面的页面对象。运行此项后,您可以使用新页面进行测试(如果已打开)。
async function changePage(url) {
let pages = await browser.pages();
let foundPage = false;
for(let i = 0; i < pages.length; i += 1) {
if(pages[i].url() === url) {
foundPage = true;
module.exports.page = pages[i];//set the new working page as the popup
break;
}
}
return foundPage;
}