为什么开发者需要PhantomJS而不是仅仅使用一些testing框架呢?

我不知道为什么PhantomJS是必要的,我希望有人可以帮助。

需要DOM的JavaScript需要运行,通常在浏览器中运行。 所以testing框架通常会启动一个浏览器,然后控制它们来运行testing和执行断言。 testing框架本身往往不能直接控制浏览器,所以最终会有三层来testing:

  • 框架:如茉莉花
  • 司机:例如Selenium
  • 浏览器:例如Firefox

简而言之,PhantomJS是一个无头运行的浏览器(即不会画出屏幕)。 带来的好处是速度 – 如果您在计算机上控制实际程序,则在启动浏览器,configurationconfiguration文件等方面会有一定的开销。

PhantomJS在这方面要快得多(我已经看到testing在不到1/3的时间内运行)。 唯一的权衡是你看不到你的testing正在运行,尽pipe这对于一个自动化套件来说并不是什么大问题! 如果需要的话,你也可以截图(例如失败)。 如果你真的想,你可以以24fps截图并发送到ffmpeg来渲染你的testingvideo,虽然你可能会破坏你的速度节省:)

这是一个常见的误解。 花费一些时间与文件通常清除混淆。 例如,PhantomJS经常被用作在几十个框架中编写testing的无头testing运行器 :Buster.JS,水豚,摩卡,茉莉花,QUnit,WebDriver,YUItesting等等。 正如你在这里看到的,PhantomJS根本不能取代这些框架。

当然,PhantomJS还有许多其他用途,从编程捕捉网页到自动networking监控 。 有各种博客文章和文章的列表 ,展示了PhantomJS的不同报告用例。

PhantomJS并不意味着要replace一个testing框架,它将与其中一个一起工作。

例如,下面是与Jasmine结合使用的随机示例PhantomJS 。

另外请注意,PhantomJS不仅仅用于testing,您可以将其用于屏幕抓取或将繁重的渲染负载(例如,针对CPU挑战的移动浏览器)卸载到服务器上,如本例中所示 。

另一个在这里没有提到的用例是呈现一个网页,并生成该页面的图像或PDF快照。

例如,您可以将发票,报表,文档等…呈现为HTML网页,并将其呈现为PDF,以将其作为可下载文档发送给您的最终用户。

或者,也许你想要一个网页的屏幕截图缩略图 ? 另一个可能的用例。