Установка сервис-воркера в Headless Chrome (через кукольника)

У меня есть сервисный работник, который зарегистрирован в

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.bundle.js').then(registration => {
        console.log('Service worker was registered');
    }).catch(error => {
        console.log('Registration failed: ', error);
    });
}

Фактический сервис-воркер регистрирует свои install и activate события с помощью обычных вызовов console.log (), все это работает, как ожидалось.

Однако, когда дело дошло до автоматизации тестирования, решение Headless Chrome / puppeteer не работает, как ожидалось, служебный работник не installed (событие установки не происходит). Итак, вопрос в том, есть ли какой-либо особый способ тестирования страниц с помощью сервис-воркеров с помощью Headless Chrome / puppeteer?

Код кукловода:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ args: ['--no-sandbox']});
  const page = await browser.newPage();
  page.on('console', msg => console.log('PAGE LOG:', msg.text()));

  await page.goto('https://***.com', { waitUntil: 'networkidle0' });
  await page.waitFor(1*4000);
  console.log('Before reload');
  await page.reload({ waitUntil: 'networkidle0' });
  await page.screenshot({path: 'public/vidi.png'});
  await browser.close();
})();

Ссылки:


person Aleksandr Shumilov    schedule 28.04.2018    source источник


Ответы (1)


Да,

const browser = await puppeteer.launch({
    args: ['--enable-features=NetworkService'],
    headless: true,
    ignoreHTTPSErrors: true,
  });

--enable-features = NetworkService включает сервис-воркера (экспериментальный), и ignoreHTTPSErrors требуется для преодоления требования https сервис-воркеров, когда он находится в контексте кукловода (обслуживается через file: ///)

person Greg Benner    schedule 12.12.2018
comment
Спасибо. Однако вопрос: это не работает, если установлено значение headless: false, в чем может быть проблема? См. Эту проблему: github.com/GoogleChrome/puppeteer/issues/4129 - person Anas Tiour; 08.03.2019
comment
if ('serviceWorker' в навигаторе) {} элемент управления переходит в блок if, но выдает ошибку при выполнении SW register (). - person MechaCode; 10.07.2020