我一直在研究Puppeteer系统,以帮助我进行自动化测试。但是,我的页面会提示随机弹出窗口,以通知客户正在进行的促销活动-这阻止了我的测试继续进行。我最初的想法是在测试waitForSelector
的过程中在后台运行一个无限循环,然后单击是否存在。但是,我当时认为这种方法听起来不太聪明,而且在API中找不到合适的方法。
有人遇到过类似的问题,并提出了出色的解决方案吗?
答案 0 :(得分:0)
如果弹出窗口总是在会话开始时出现,则可以使用page.waitForSelector()
:
await page.waitForSelector('#popup', {visible: true});
await page.click('#popup'); // Close Popup
或者,如果将元素动态添加到页面中并且可能不会出现,则可以使用MutationObserver
界面来监视要添加到DOM树中的元素,然后单击它:
await page.evaluate(() => {
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
for (let i = 0; i < mutation.addedNodes.length; i++) {
if (mutation.addedNodes[i].id === 'popup' && window.getComputedStyle(mutation.addedNodes[i]).display !== 'none') {
mutation.addedNodes[i].click(); // Close Popup
}
}
});
});
observer.observe(document, {subtree: true});
});