Headless Chrome中的服务工作者安装(通过木偶操纵者)

时间:2018-04-28 05:51:12

标签: 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('Registration failed: ', error);
    });
}

实际的服务工作者正在使用常规的console.log()调用记录其installactivate事件,所有这些都按预期工作。

然而,当涉及到测试自动化时, Headless Chrome / puppeteer 解决方案无法按预期工作,服务工作者不是installed(安装事件不会发生)。所以,问题是,是否有任何特殊的方法使用无头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 :(得分:1)

是,

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

-enable-features = NetworkService启用服务工作者(实验性),并且忽略HTTPSError才能在伪造者上下文中(通过文件:///提供)克服服务工作者的https要求