Кукловод постоянно проверяет селектор на нажатие - PullRequest
0 голосов
/ 28 октября 2018

Я работал над системой Puppeteer, чтобы помочь мне справиться с тестированием автоматизации.Тем не менее, моя страница будет предлагать случайное всплывающее окно, чтобы уведомить клиентов о текущих акциях - это препятствует проведению моего теста.Первоначально я думал, что во время теста нужно запустить бесконечный цикл в фоновом режиме до waitForSelector и щелкнуть, если он существует.Однако я подумал, что этот подход звучит не слишком умно, и я не смог найти ничего подходящего в API.

Кто-нибудь сталкивался с подобной проблемой и предложил блестящее решение?

1 Ответ

0 голосов
/ 28 октября 2018

Если всплывающее окно всегда будет появляться в начале сеанса, вы можете использовать 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});
});
...