Установка сервисного работника в Headless Chrome (через кукловода) - PullRequest
0 голосов
/ 28 апреля 2018

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

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();
})();

Ссылки:

1 Ответ

0 голосов
/ 12 декабря 2018

Да,

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

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

...