poltergeist / PhantomJS和capybara-webkit有什么不同?

  1. PhantomJS和capybara-webkit有什么区别?
  2. capybara-webkit比PhantomJS有什么优势?
  3. 哪两个是最有效的工具?
  4. 其他 …

poltergeist是PhantomJS的水豚驱动程序,这是一个build立在WebKit上的无头浏览器。 capybara-webkit是一个直接使用WebKit的水豚驱动程序。

poltergeist / PhantomJS比capybara-webkit有一些很大的优势:

  • 根据我的经验,poltergeist / PhantomJS总是超时,而水豚 – webkit有时会挂起。
  • 它的错误信息更清晰。 例如,它实际上会告诉你它是否不能单击页面上的一个元素,因为它前面有另一个元素。
  • 可以告诉重新提出Javascript错误作为testing错误( 通过使用js_errors:true来实例化驱动程序 )。
  • PhantomJS比独立的WebKit安装容易得多。 PhantomJS提供了一个几乎无依赖的可执行文件,您可以下载,而独立的WebKit有许多操作系统库依赖性,您可能需要升级或以其他方式进行操作。

TL; DR

  • Poltergeist / PhantomJS更容易设置
  • Poltergeist / PhantomJS具有较less的依赖性
  • Capybara-webkit更稳定可靠,对CI来说更好

长:

我已经使用了Poltergeist + PhantomJS一年多了。 我最大的项目有很多的Ajax调用,file upload,image processing,JS模板和纯CSS3animation。

Poltergeist和PhantomJS不时产生随机错误。

其中有些是我的错误。 testingAjax非常棘手。 一个常见的错误是,在成功的testing结束时,database_cleaner gem截断了数据库,但是,由于空数据库,一个Ajax调用仍在运行,并在控制器中生成exception。 这并不总是很容易解决,除非你想使用睡眠()。 (我不)。

然而,与Poltergeist的许多错误不是我的错误。 我有一个testing,做了30次同样的事情(有一个很好的理由),有一次在30次中有1次不起作用。 Poltergeist根本没有点击button。 这是一个可见的,而不是animation,正常的button。 我可以修复它(通过再次点击),但是,这是一个丑陋的黑客,感觉不对。

有时,在所有浏览器中运行的脚本都会与Poltergeist / PhantomJS产生随机的javascript错误。 100次左右的1次或2次。

有两个不同的Ajax上传插件,我经历了PhantomJS 1.9和2.0的行为不同。 2.0版更稳定一致,但还不够完美。

jenkins这是一个巨大的痛苦。 大约每三次运行一次就失败了,因为400个function中的1个或2个(js浏览器testing)产生了随机错误。

两个星期前我尝试了Capybara-webkit。 我花了几个小时的时间来迁徙,因为他们以不同的方式对待不可见的元素。 在这个水豚-webkit更正确或严格。 我注意到相同的重叠元素。

testingAjax上传和image processing需要我必须修改Capybara-webkit的自定义脚本。

我使用Mac OS X进行开发,使用FreeBSD进行生产,使用Linux进行Jenkins开发。 Capybara-webkit比Poltergeist更复杂,因为它需要一个屏幕,并且它有很多的依赖关系。 只有PhantomJS是真正的无头和独立的。 如果需要,我可以在生产服务器上运行PhantomJS。 由于依赖关系,我不会那样做与capybara-webkit。

现在我有100%稳定的Jenkins CI。 所有随机的javascript错误都是过去的回忆。 水豚-webkit总是点击我想要它点击的button。 JavaScript总是正常工作。 目前我有一个直线20-25稳定build设。

对于有很多Ajax的项目,我推荐capybara-webkit。

我的build议是基于2015年8月的最新版本。

capybara-webkit和PhantomJS都使用Webkit底层的方式来无限渲染网页,即不需要浏览器。 但是,他们是不同的工具:

  • capybara-webkit可以作为Capybara的一个适配器,它可以让你编写和执行Rails或Rack应用程序的高级UItesting。
  • PhantomJS是一个较低级别的工具,可以让你在网页上运行脚本。 它也可以用来编写UItesting(例如参见Casper ,或者任何基于PhantomJS的其他testing工具 )。

PhantomJS不支持HTML5function,如audio/video真的很烂。