Puppeteer 不断检查要单击的选择器

Puppeteer Constantly Check for Selector to Click

我一直在使用 Puppeteer 系统来帮助我处理自动化测试。但是,我的页面会提示随机弹出窗口以通知客户正在进行的促销活动 - 这会阻止我的测试继续进行。我一开始的想法是测试的时候后台运行无限循环到waitForSelector如果存在就点击。但是,我在想这种方法听起来不太聪明,我在 API.

中找不到合适的东西

有没有人遇到过类似的问题并且想出了绝妙的解决方案?

如果弹出窗口总是在会话开始时出现,您可以使用 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});
});