木偶不断检查选择器是否单击

时间:2018-10-27 23:28:17

标签: javascript node.js automation ui-automation puppeteer

我一直在研究Puppeteer系统,以帮助我进行自动化测试。但是,我的页面会提示随机弹出窗口,以通知客户正在进行的促销活动-这阻止了我的测试继续进行。我最初的想法是在测试waitForSelector的过程中在后台运行一个无限循环,然后单击是否存在。但是,我当时认为这种方法听起来不太聪明,而且在API中找不到合适的方法。

有人遇到过类似的问题,并提出了出色的解决方案吗?

1 个答案:

答案 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});
});