我有一个在
注册的服务工作者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()调用记录其install
和activate
事件,所有这些都按预期工作。
然而,当涉及到测试自动化时, 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();
})();
链接:
答案 0 :(得分:1)
是,
const browser = await puppeteer.launch({
args: ['--enable-features=NetworkService'],
headless: true,
ignoreHTTPSErrors: true,
});
-enable-features = NetworkService启用服务工作者(实验性),并且忽略HTTPSError才能在伪造者上下文中(通过文件:///提供)克服服务工作者的https要求