50

我不确定为什么 PhantomJS 是必要的,我希望有人能提供帮助。

4

4 回答 4

120

需要 DOM 的 JavaScript 需要在某个地方运行,通常在浏览器中。因此,测试框架通常会启动一个浏览器,然后他们控制该浏览器以运行测试并执行断言。测试框架本身通常无法直接控制浏览器,因此您最终需要进行三层测试:

  • 框架:例如茉莉花
  • 驱动程序:例如 Selenium
  • 浏览器:如火狐

简单地说,PhantomJS 是一个无头运行的浏览器(即不画出屏幕)。带来的好处是速度——如果你在你的计算机上控制一个实际的程序,你在启动浏览器、配置配置文件等方面会有一定的开销。

PhantomJS 在这方面要快得多(我看到测试运行的时间不到 1/3)。唯一的权衡是您看不到您的测试正在运行,尽管这对于自动化套件来说并不是什么大问题!如果需要,您还可以截取屏幕截图(例如失败时)。如果你真的想要,你可以以 24fps 截屏并发送到 ffmpeg 以渲染你的测试视频,尽管你可能会破坏你的速度节省:)

于 2013-11-17T13:34:49.607 回答
25

这是一个常见的误解。花一些时间阅读文档通常会消除混乱。例如,PhantomJS 通常用作无头测试运行器,用于在几十个框架中编写的测试:Buster.JS、Capybara、Mocha、Jasmine、QUnit、WebDriver、YUI Test 等等。正如你在这里看到的,PhantomJS 根本没有取代那些框架。

当然,PhantomJS 还有很多其他用途,从以编程方式捕获网页到自动网络监控无所不包。有一个各种博客文章和文章的列表,这些文章和文章展示了 PhantomJS 的不同报告用例。

于 2012-10-04T07:19:54.333 回答
7

PhantomJS 并不是要取代一个测试框架,它会与一个测试框架一起工作。

例如,这是一个与 Jasmine 结合使用的随机示例 PhantomJS

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

于 2012-10-03T14:34:40.850 回答
0

此处未提及的另一个用例是渲染网页并生成该页面的图像或 PDF 快照。

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

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

于 2017-07-19T10:29:09.843 回答