33

我们正在选择我们的无头浏览器驱动程序解决方案,该解决方案将是 Selenium WebDriver 的一些实现。一方面是GhostDriver,它利用后端中的PhantomJS ,另一方面是基于HtmlUnit的HtmlUnitDriver

PhantomJS 使用 Safari 的渲染引擎 WebKit 来渲染页面,而 HtmlUnitDriver 使用其他浏览器不使用的 Rhino 引擎(它只是“模拟”浏览器行为。最后一个事实被认为是一个骗局,因为渲染行为可能与流行的浏览器。

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

4

3 回答 3

23

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

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-硒

于 2016-02-07T23:01:59.400 回答
3

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

我没有过多地使用 HtmlUnit,但是当我键入它时,它可以避免我在使用 keycloak 登录页面进行测试时出现上述一些幻象问题。

于 2016-04-29T15:38:51.893 回答
1

PhantomJS 开发已于2018 年 3 月 3 日暂停,而无头模式已添加到 Chrome 和 Firefox

这意味着如果您想接收更新,您应该使用 HtmlUnit、ChromeFirefox作为无头驱动程序。

于 2019-01-01T13:16:49.247 回答