【问题标题】:HtmlUnitDriver (HtmlUnit) vs GhostDriver (PhantomJS)?HtmlUnitDriver (HtmlUnit) vs GhostDriver (PhantomJS)?
【发布时间】:2015-03-16 12:36:55
【问题描述】:

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

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

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

【问题讨论】:

  • htmlunit的好处是可以修改http请求,创建自定义请求等
  • 太好了,谢谢艾莉亚。你想总结成“答案”,这样我就可以接受它给下一代?
  • @Arya - 很有趣。所以 HtmlUnitDriver 在单元测试中能很好地工作吗?我将不得不对此进行调查。谢谢。
  • @djangofan 我从未使用过 HtmlUnitDriver(带有 Selenium 的那个)我直接使用 HtmlUnit。此外,如果有很多 javascript,您可能不想使用 HtmlUnit。使用 HtmlUnit 有利有弊。
  • @Arya - 是的,这就是我的意思。

标签: selenium-webdriver phantomjs htmlunit ghostdriver htmlunit-driver


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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


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

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

      不同的 PhantomJS 版本是针对不同的 WebKit 版本构建的。 PhantomJS 2.x uses WebKit 538.x,这使它成为 equivalent to Safari 7 or 8。而 PhantomJS 1.9.8 uses WebKit 534.34,相当于 Safari 5。

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

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


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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        • 2013-12-20
        • 2015-03-03
        相关资源
        最近更新 更多