根据我使用许多无头浏览器的经验,我会说:
HtmlUnitDriver:我遇到的所有实现中最快的,非常适合简单的静态页面,尤其是那些没有 JavaScript 的页面。任何远程复杂的页面似乎都会产生问题——即使我无法详细说明,这也是我的实践经验。非常适合在演示页面、抓取状态页面等上测试 Selenium 功能。
PhantomJSDriver (PhantomJS + GhostDriver):与桌面浏览器相比,速度没有您希望的那么快,但是比 Firefox + xvfb 更容易设置。默认情况下,屏幕截图可能看起来有点奇怪,但这通常是因为 PhantomJS 默认为窄窗口,除非明确设置(请阅读下文了解原因)。
更新:关于 PhantomJS 版本的更多细节,来自我的其他答案。
与 Safari 一样,PhantomJS 使用WebKit进行渲染(例如 Firefox 使用 Gecko)
不同的 PhantomJS 版本是针对不同的 WebKit 版本构建的。PhantomJS 2.x 使用WebKit 538.x,这使得它等同于 Safari 7 或 8。而 PhantomJS 1.9.8 使用WebKit 534.34,相当于 Safari 5。
这对您来说可能是个问题,因为 Google 将 Safari 5 确定为“旧”浏览器,因此可能会以不同的方式呈现其搜索页面。
因此,确保您使用 PhantomJS 2.x 可以减少很多人报告的与桌面浏览器相比的渲染差异。
另一个有趣的可能性是SlimerJS。但是,我还没有让它足够可靠地工作。
我从来没有遇到过 HtmlUnitDriver 或 PhantomJSDriver 的可靠性问题(唯一的烦恼是HttpClient 4.5 / HtmlUnit 2.17 不兼容问题)。
(在回答有关修改 HTTP 请求的评论时,我个人建议坚持使用 WebDriver API 并使用BrowserMob之类的代理来改变请求和响应,而不是利用浏览器特定的功能。)
总而言之,我建议不要创建强制用户选择一个浏览器而不是另一个浏览器的工具或流程。如果可能,允许他们配置或覆盖。在大多数情况下,我会选择 PhantomJS,因为它不会让你失望。但是,对于最简单的页面,应考虑 HtmlUnit 的性能。
另请参阅(也许):http ://www.guru99.com/selenium-with-htmlunit-driver-phantomjs.html和https://www.quora.com/Software-Testing/How-does-PhantomJS-compare-硒