Watir-webdriver或Capybara

Azh*_*her 11 capybara watir-webdriver

我目前使用Watir-webdriver进行所有前端测试,但开发团队使用Capybara在Jenkins CI上运行测试.我们都使用相同的Cucumber功能.

是否值得我们进行单独测试并有效两次?哪一个是更好的工具?我已经阅读了网上提供的所有比较,并且更喜欢使用watir-webdriver,但是Capybara允许我无缝地使用无头测试.

那么任何有用的想法和想法?我正处于十字路口并且不确定是否放弃Watir-webdriver并且只是与开发团队的其他成员一起使用并使用Capybara.

小智 6

至于为相同的黄瓜特征使用两种不同的工具是否取决于测试域并且最适合它.如果Watir-webdriver比Capybara-webdriver更适合前端测试,反之亦然.您需要投入一些时间来调查Capybara(设计峰值,使用敏捷用语)来将其与您习惯的方式进行比较.尝试做到客观,即使用我熟悉的框架(根据我的经验)非常困难,然后进行改变的成本效益分析.直接成本可能只是时间/精力,但仍然是一个可能影响项目交付的成本.

Capybara与DRY编程并不矛盾 - Capybara的自定义选择器可以实现一个抽象层(就像Abe在他的回复中提到的那样).创建完成后,您可以在自定义选择器上使用capybara finders和matchers;

Capybara.add_selector(:slide_show) do
  xpath { ".//div[contains(@class,'slideshow')]" }
end

Capybara.add_selector(:slide_show_element) do
  xpath { ".//div[contains(@class,'slideshowelem')]" }
end
Run Code Online (Sandbox Code Playgroud)

允许你使用Capybara的发现;

find(:slide_show_element, 'Sunset').click
Run Code Online (Sandbox Code Playgroud)

从Cucumber的角度来看,可以从步骤传递定位器字符串;

And I Click "Sunset" in the "Holiday Pictures" Slide Show
Run Code Online (Sandbox Code Playgroud)

通过像这样的步骤定义;

Given /^(?:I |)Click "(.*?)" in the "(.*?)" Slide Show$/i do |picture,slideshow|
   within(:slide_show, slideshow) do 
     find(:slide_show_element, picture).click
   end
end
Run Code Online (Sandbox Code Playgroud)

那么,问题仍然是流程之一 - 是否有两个框架影响您的工作流程?调和两者会导致不可接受的时间损失吗?


Abe*_*ard 2

我们正在对我当前的项目进行完全相同的讨论。其中一位开发人员是 Capybara 的忠实粉丝,而我则熟悉 Watir-webdriver。

Capybara 具有真正的简单性,这使得测试启动和运行非常快,但我担心随着时间的推移会出现维护问题,而且我还担心它的简单性也可能意味着缺乏灵活性。

Watir-webdriver 允许我为我的网页编写一个抽象层,准确地识别我想要/需要的元素(灵活性),这也意味着“测试”层对于编写测试场景的人来说仍然看起来很简单,例如Capybara,但随着时间的推移,维护会很快,因为代码本质上是保持 DRY 的。编写页面元素层需要更多的前期成本,但我有一种安全感,框架的未来维护将会很快。

当然,我有偏见——但思想开放。我很想听听水豚粉丝的对位。