我有一个注册的 service worker
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);
});
}
实际的 service worker 正在使用常规的 console.log() 调用记录其 install
和 activate
事件,所有这些都按预期工作。
但是,当涉及到测试自动化时,Headless Chrome/puppeteer 解决方案没有按预期工作,service worker 没有安装
(安装事件不会发生)。所以,问题是,是否有任何特殊的方法可以使用 Headless Chrome/puppeteer 的服务人员测试页面?
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();
})();
链接:
最佳答案
是的,
const browser = await puppeteer.launch({
args: ['--enable-features=NetworkService'],
headless: true,
ignoreHTTPSErrors: true,
});
--enable-features=NetworkService 启用 service worker(实验性)并且在 puppeteer 上下文中(通过 file:///服务)需要 ignoreHTTPSErrors 来克服 service worker 的 https 要求
关于javascript - 在 Headless Chrome 中安装 Service Worker(通过 puppeteer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50073334/