poltergeist/PhantomJS和capybara-webkit如何不同?

Pra*_*ams 60 capybara phantomjs capybara-webkit poltergeist

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

Dav*_*uth 65

poltergeist是PhantomJS的水豚驱动程序,PhantomJS是一个基于WebKit构建的无头浏览器.capybara-webkit是一个直接使用WebKit的水豚驱动程序.

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

  • 子弹#2救了我的一天.由于你的答案,我从capybara-webkit切换到了poltergeist,现在我推荐它.我仍然没有测量性能变化,但到目前为止似乎很好. (3认同)
  • 这使得更完整的测试套件,因为它也捕获javascript错误并且未通过测试. (2认同)

Mar*_*zes 36

TL; DR

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

长:

我一直使用Poltergeist + PhantomJS超过一年.我最大的项目有很多Ajax调用,文件上传,图像处理,JS模板和纯CSS3动画.

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

其中一些是我的错误.测试Ajax很棘手.一个常见错误是,在成功测试结束时,database_cleaner gem截断了数据库,但是,由于空数据库,一个Ajax调用仍在运行并在控制器中生成异常.除非你想使用sleep(),否则这并不总是很容易修复.(我不).

然而,Poltergeist的许多错误都不是我的错误.我有一个测试,它做同样的事情30次(有充分的理由),并且偶尔30次中的1次不起作用.Poltergeist根本没有点击按钮.这是一个可见的,不是动画的普通按钮.我可以解决它(再次点击它),然而,这是一个丑陋的黑客,感觉不对.

有时,在所有浏览器中运行的脚本都会使用Poltergeist/PhantomJS生成随机javascript错误.大约1或2次100次.

使用两个不同的Ajax上传器插件,我经历过PhantomJS 1.9和2.0表现不同.2.0更稳定和一致,但它远非完美.

这对詹金斯来说是一个巨大的痛苦.大约每三次运行都是失败的,因为400个功能中的1个或2个(js浏览器测试)产生了随机错误.

两周前,我尝试了Capybara-webkit.我花了几个小时才进行迁移,因为它们以不同的方式处理隐形元素.Capybara-webkit在这方面更正确或更严格.我注意到重叠元素也是如此.

测试Ajax上传和图像处理需要我必须为Capybara-webkit修改的自定义脚本.

我正在使用Mac OS X进行开发,使用FreeBSD进行生产,使用Linux进行Jenkins.Capybara-webkit设置比Poltergeist更复杂,因为它需要一个屏幕,并且它有许多依赖项.只有PhantomJS真正无头且独立.如果我愿意,我可以在生产服务器上运行PhantomJS.由于依赖性,我不会使用capybara-webkit.

现在我有100%稳定的Jenkins CI.所有随机的javascript错误都是过去的回忆.Capybara-webkit总是点击我希望它点击的按钮.Javascript总能正常工作.目前我在直线上有大约20-25个稳定版本.

对于有大量Ajax的项目,我推荐使用capybara-webkit.

我的建议是基于2015年8月的最新版本.

  • 谢谢!CI中没有错误是我想要解决的问题.众所周知,间歇/随机错误很难调试,当你拥有一个庞大的团队和大量的水豚请求规范时会很糟糕. (3认同)

Ell*_*ler 7

capybara-webkit和PhantomJS都使用Webkit在无人值守的情况下呈现网页,即无需浏览器.然而,它们是不同的工具:

  • capybara-webkit作为Capybara的适配器,Capybara是一个Ruby gem,可以让你为Rails或Rack应用程序编写和执行高级UI测试.
  • PhantomJS是一个较低级别的工具,它只允许您针对网页运行脚本.它也可以用于编写UI测试(例如,参见Casper,或者构建在PhantomJS上的任何其他测试工具).