Javascript 服务工人安装在无头铬合金中(通过木偶机)

Javascript 服务工人安装在无头铬合金中(通过木偶机),javascript,google-chrome,google-chrome-devtools,puppeteer,google-chrome-headless,Javascript,Google Chrome,Google Chrome Devtools,Puppeteer,Google Chrome Headless,我有一名服务人员在 if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.bundle.js').then(registration => { console.log('Service worker was registered'); }).catch(error => { console.log('Registrati

我有一名服务人员在

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);
    });
}
实际的服务人员正在使用常规的console.log()调用记录其
安装
激活
事件,所有这些都正常工作

但是,在测试自动化方面,无头Chrome/Puppeter解决方案未按预期工作,服务人员未安装
(安装事件未发生)。因此,问题是,是否有任何特殊的方法可以使用无头铬/木偶演员测试服务人员的页面

木偶演员代码:

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

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

      --enable features=NetworkService启用服务工作者(实验性)并且需要ignoreHTTPSErrors来克服服务工作者在Puppeter上下文中的https要求(通过文件提供:///)

      谢谢。问题:当设置为
      headless:false时,这不起作用,可能是什么问题?请参阅此问题:如果导航器中的('serviceWorker'){}控件进入if块,但在执行SW register()时出错。