随着 Chrome 59 的发布,“headless”模式 现在可以 在 Linux 和 macOS 的稳定版本中使用(很快还有带有 Chrome 60 的 Windows)。这使我们能够在没有任何可见 UI 的情况下运行功能齐全的 Chrome 版本,这是自动化测试的强大功能。 这里有例子。
chrome --headless --disable-gpu --dump-dom https://stackoverflow.com/
在我的 JavaScript 测试运行器中,我喜欢记录尽可能多的有关正在使用的浏览器的信息,以帮助隔离问题。比如我记录了 navigator
的很多属性,包括当前的浏览器插件:
JSON.stringify(Array.from(navigator.plugins).map(p => p.name))
["Chrome PDF Viewer","Widevine Content Decryption Module","Shockwave Flash","Native Client","Chrome PDF Viewer"]
我的理解是 Chrome 在无头模式下 应该 表现相同,但我有足够的经验对可能显着改变渲染管道的新功能持怀疑态度。
现在,我将在两种模式下运行测试。我想让测试运行器记录是否正在使用无头模式。我可以在测试配置中传递这些信息,但我更愿意拥有一个可以构建到测试运行器本身的纯 JavaScript 解决方案。但是,我无法找到任何显示无头模式是否处于活动状态的浏览器界面。
有什么方法可以检测 Chrome 是否从 JavaScript 以无头模式运行?
原文由 Jeremy 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以检查
navigator.webdriver
属性,即:W3C WebDriver Recommendation 对其描述 如下: