HtmlUnitDriver (HtmlUnit) vs GhostDriver (PhantomJS)?

HtmlUnitDriver (HtmlUnit) vs GhostDriver (PhantomJS)?

我们正在选择我们的 无头浏览器 驱动程序解决方案,它将是 Selenium WebDriver 的一些实现。 另一边是 GhostDriver, which leverages the PhantomJS in the backend on the one side and HtmlUnitDriver which based on HtmlUnit

PhantomJS 使用 Safari 的渲染引擎 WebKit 来渲染页面,而 HtmlUnitDriver 使用其他浏览器不使用的 Rhino 引擎(这只是 "simulating" 浏览器行为。最后一个事实被认为是一个骗局,因为呈现行为可能与流行的浏览器有很大不同。

在我们看来,PhantomJS 是一个更强大的候选者。但是,我们并非一无所知 :) 在做出决定时是否还应考虑其他因素和权衡? HtmlUnitDriver 可以成为更好解决方案的其他场景?

根据我使用大量无头浏览器的经验,我会说:

HtmlUnitDriver:我遇到的所有实现中最快的,非常适合简单的静态页面,尤其是那些没有 JavaScript 的页面。任何远程复杂的页面似乎都会产生问题 - 这是我的实际经验,即使我无法详细证明。非常适合在演示页面、抓取状态页面等上测试 Selenium 功能

PhantomJSDriver(PhantomJS + GhostDriver):与桌面浏览器相比,速度没有您希望的那么快,但是,比 Firefox + xvfb 更容易设置。默认情况下,屏幕截图可能看起来有点奇怪,但 这通常是因为 PhantomJS 默认为窄 window 除非明确设置 (请阅读下文了解原因)。


更新: 关于 PhantomJS 版本的更多细节,来自 my other answer

与 Safari 一样,PhantomJS 使用 WebKit 进行渲染(例如 Firefox 使用 Gecko)

不同的 PhantomJS 版本是针对不同的 WebKit 版本构建的。 PhantomJS 2.x WebKit 538.x, which makes it equivalent to Safari 7 or 8. whereas PhantomJS 1.9.8 uses WebKit 534.34,相当于Safari 5.

这对您来说可能是个问题,因为 Google 确定 Safari 5 是 "old" 浏览器,因此可能 render its search pages differently

因此确保您使用 PhantomJS 2.x 可以减少很多人报告的与桌面浏览器的渲染差异。


另一个有趣的可能性是SlimerJS。但是,我还没有让它足够可靠地工作。

我从来没有遇到过 HtmlUnitDriver 或 PhantomJSDriver 的可靠性问题(唯一的烦恼是 HttpClient 4.5 / HtmlUnit 2.17 incompatibility issue)。

(在回答有关修改 HTTP 请求的评论时,我个人建议坚持使用 WebDriver API 并使用 proxy,例如 BrowserMob改变请求和响应,而不是利用特定于浏览器的功能。)

总而言之,我建议不要创建强制 用户选择一种浏览器而不是另一种浏览器的工具或流程。如果可能,允许他们配置或覆盖。在大多数情况下,我会选择 PhantomJS,因为它不会让您失望。但是,对于最简单的页面,应该考虑HtmlUnit的性能。

另见(也许):http://www.guru99.com/selenium-with-htmlunit-driver-phantomjs.html and https://www.quora.com/Software-Testing/How-does-PhantomJS-compare-to-Selenium

过去几年我在几个项目中使用过 phantomJS,但经常遇到问题。例如 javascript 在与 chrome、firefox、internet explorer 表现不同的页面上。有些页面根本无法加载,可能是由于重定向,但我不是肯定的(例如 keycloak 登录页面)。

我没有经常使用 HtmlUnit,但是当我输入它时,它避免了我在使用 keycloak 登录页面进行测试时出现的一些幻影问题。

PhantomJS 开发 been suspended as of March 3rd 2018 而 headless 模式已添加到 Chrome 和 Firefox

这意味着如果您想接收更新,您应该使用 HtmlUnit,Chrome or Firefox 用于无头驱动程序。