WatiN还是Selenium?

我即将开始编写一些自动化testing。 似乎每个人都推荐WatiN和Selenium 。 你更喜欢哪一种自动testingASP.NET Web表单? 哪些产品对您更好?

作为一个附注,我注意到自2008年3月以来,WatiN 2.0已经在CTP中,那么这件事是值得关注的吗?

只是想说,我目前正在努力在2009年第一季度发布WatiN 2.0的testing版。它将是对当前CTP 2.0版本的一次重大升级,基本上可以为您提供相同的function,将FireFox和IE自动化为版本1.3.0提供了自动化的IE浏览器。

所以没有关心那里。

希望这可以帮助你做出selectJeroen van Menen Lead dev WatiN

如果您希望在一个将继续得到改善和社区支持的框架内进行认真的长期投资,selenium可能是您最好的select。 例如,我刚刚在Matt Raible的博客上看到了这个信息:

截至周五,谷歌拥有超过50个团队,每天在内部Selenium Farm上运行超过51K个testing。 这些testing中有96%是由Selenium RC和Farm机器正确处理的。 其他4%部分是由于RC的错误,部分是由于testing错误,但隔离原因可能是困难的。 selenium已被采纳为谷歌networking应用functiontesting的主要技术。 这是个好消息。

我还参加了最近的一次Selenium聚会,了解到Google正在投入大量资源来改进Selenium并将其与WebDriver(由Simon Stewart开发的自动化testing工具)集成。 WebDriver的一个主要优点是它控制浏览器本身,而不是在浏览器内部作为一个Javascript应用程序运行,这意味着像“同源”问题这样的主要绊脚石将不再是一个问题。

我们已经testing了两个,决定和WaTiN一起去。 正如其他人所指出的,Selenium在WaTiN中并没有find一些很好的特性,但是我们遇到了Selenium工作的问题,一旦我们做了这些工作,运行testing肯定比WaTiN慢。 如果我没有记错的话,我们遇到的设置问题是因为Selenium有一个单独的应用程序来控制WaTiN正在进行的所有操作。

我一直在努力,这是我最初的想法…


华廷

  • 快速执行。
  • 脚本创build工具是独立的项目; 有2个我知道的: Wax (基于Excel,托pipe在CodePlex上)和WatiNtestinglogging (托pipe在SourceForge上)。 既不像Selenium IDE那样强大。
  • 非常好的IE支持。 可以附加和从运行实例分离。 可以访问本地窗口句柄等(见下面的脚本示例)。
  • NuGet打包,容易在.NET,Visual Studio风格的环境中运行,并保持更新。

坏的

  • 谷歌search(watin xyz)经常会导致Google推荐“watir xyz”。 没有那么多的文件。
  • 有什么(文件),它是混乱的; 例如:初看起来似乎没有对CSSselect器的本地支持。 特别是因为有像“WatiNCssSelectorExtensions”这样的扩展库和许多关于替代技术的博客文章(比如在页面中注入jQuery / sizzle)。 在Stack Overflow上,我发现Jeroen van Menen发表了一个评论,build议有本地支持。 至less铅开发人员花费时间堆栈溢出:)
  • 没有本地XPath支持。
  • 没有开箱即用的远程执行/基于网格的执行。

脚本示例(C#)。 你不能用Selenium做到这一点(不是我知道的,至less):

class IEManager { IE _ie = null; object _lock = new object(); IE GetInstance(string UrlFragment) { lock (_lock) { if (_ie == null) { var instances = new IECollection(true); //Find all existing IE instances var match = instances.FirstOrDefault(ie=>ie.Url.Contains(UrlFragment)); _ie = match ?? new IE(); if (match==null) //we created a new instance, so we should clean it up when done! _ie.AutoClose = true; } } return _ie; } } 

selenium

  • 比WatiN慢(特别是因为需要创build一个新的程序)。
  • 内置CSSselect器/ XPath支持。
  • seleniumIDE是好的(不能说很好,但它是最好的课堂!)。
  • 感觉比.NET更多的是Java-ish …但是真的,它是编程语言不可知的; 所有的命令被发送到一个进程外的“驱动程序”。 驱动程序实际上是浏览器实例的“主机”进程。 所有的通信都必须跨进程边界进/出序列,这可能解释了与WatiN相关的速度问题。
  • 解耦过程 – “驱动器”和“控制”意味着更健壮,更复杂等,但也更容易创build网格/分布式testing环境。 如果“发布”机制(即,驱动程序和控制之间的通信)横跨WebSphere或其他现有的健壮的消息队列pipe理器,它们确实会喜欢它。
  • 支持铬和其他浏览器开箱即用。

尽pipe如此,我还是和WatiN一起去了。 我主要打算写小屏幕抓取应用程序,并希望使用LINQPad进行开发。 附加到一个远程IE实例(我没有自己产卵)是一个很大的优点。 我可以在一个现有的实例中debugging…然后运行一些脚本…然后再拨弄等。这是很难做的selenium,虽然我想“暂停”可以embedded到脚本,在此期间,我可以直接与浏览器捣鼓。

最大的区别是Selenium支持不同的浏览器(不只是IE或FF,请参阅http://seleniumhq.org/about/platforms.html#browsers

此外,Selenium还有一个远程控制服务器( http://seleniumhq.org/projects/remote-control/ ),这意味着您不需要在testing代码运行的同一台计算机上运行浏览器。 因此,您可以testing您的Web应用程序。 在不同的OS平台上。

一般来说,我会build议使用selenium。 我几年前使用过WatiN,但是我对它的稳定性并不满意(现在可能已经有所改进)。 对于我来说,Selenium最大的优点是可以testingWeb应用程序。 在不同的浏览器上。

都不是。 使用巨水。 它包裹selenium。 更耐用。 https://github.com/featurist/coypu

更新 Ye Oliver你是对的。 好吧,为什么它更好? 就我个人而言,我发现针对IE的Selenium驱动程序非常脆弱 – 有一些“标准”驱动程序例外情况,在ajax重量级网站上驱动Selenium进行unit testing时,我再次发现了这种情况。

我有没有提到我想在c#中编写脚本作为testing项目? 是接受testing连续构build部署。

以及巨水鼠处理以上。 这是selenium的包装,允许testing夹具,

 browser.Visit("file:///C:/users/adiel/localstuff.htm") browser.Select("toyota").From("make"); browser.ClickButton("Search"); 

…将启动一个(可configuration的品牌)浏览器并运行脚本。 它适用于有限的区域,非常适合扩展。

在GitHub上有更多的例子,下面提到的Olvier,Adrian的video非常棒。 我认为这是在.Net世界推动基于浏览器的testing的最好方法,并试图遵循Ruby的同名capybara

我用了两个,他们都好像工作。 我点头是为了selenium,因为它似乎有更好的Ajax支持。 我相信WaTiN自从上次使用以来已经成熟了,所以它应该有同样的东西。

最重要的是你喜欢哪个开发环境? Selenium和Watin有录像机,但是Selenium在浏览器中,Watin在video工作室中。 +和 – 这两者。

到现在为止,我们是一个纯粹的微软商店,为企业提供解决scheme,并与WatiN合作。 这在将来可能会改变。

作为更新的来源:

微软在MSDN杂志12/2010上发表了一篇BDD-Primer,结合了SpecFlow和WatiN(很酷的BDD行为驱动开发)。 其作者Brandon Satrom(MSFT开发者传播者)也于2010年12月发布了一个videonetworking广播教学,详细介绍了他上述的1:1的发现。

从2011年4月开始,支持来自Christian Hassa的 SpecLog,SpecFlow和Team Foundation Server(接受testing驱动开发/行为驱动开发)的ATDD / BDD的白皮书 ,其团队构build了SpecFlow。

我通常使用Selenium,主要是因为我喜欢FireFox的Selenium IDE插件来loggingtesting的起点。

我使用Watin,但没有使用Selenium。 我可以说我在Watin上起床跑步,几乎没有任何问题。 我想不出任何我想做的事情,我无法解决这个问题。 HTH

我推荐WebAii,因为这是我的成功之处,使用它时我的抱怨并不多。 我从来没有试过Selenium,我不记得使用WaTiN,至less没有达到能够成功的工作。 虽然WebAii有一个实现自己的对话框处理程序的接口,但我不知道任何可以正常处理Windows对话框的框架。

我考虑使用两个。 我用Selenium的logging器在FF中build立一些testing。 我试图在Watin中做同样的事情,发现Watin Recorder(2.0.9.1228)对我们的网站是完全没有价值的 。 它似乎是在IE6中渲染网站 – 使我们的网站无法录制。 我们不支持IE6。 我找不到任何方法来改变它正在使用的浏览器。 我只在那里find一台Watin录音机。 如果有不止一个,或者不断更新,请发表评论。

用于Firefox的Selenium Recorder IDE易于使用,并将testing移植到C#中。 这不是很好。 尽pipe阅读了一个或两个有解决方法的博客文章,但我无法移植testing套件。 所以有一些操作生成的代码。 尽pipe如此,它的工作效率是90%,比替代scheme要好。

对于我的钱/时间来说, Selenium只是为了便于构build新的testing 。 IE没有任何好的开发人员工具栏,几乎和Firebug一样好,所以我在Firefox上开始开发,所以在Firefox中有一个好的工作logging器是一个巨大的好处。

我的结论很像丘吉尔的民主引用: Selenium是自动UItesting中最糟糕的forms。 除了所有其他的。

在切线的风险,我build议Ax / WatiN。 Ax允许通过“手动”testing人员在Excel中编写testing,而不需要知道底层testing“语言”。 它确实需要一个“技术人员”来编写定制的动作(IE,今天我不得不做一个稍微复杂的表查找和交叉引用),但是一旦写出来,这些动作就可以用在非技术testing人员的testing中。

我还听说英国政府网关项目(我相信有6K +testing自动化testing)最近在一周内将所有testing从Ax / Winrunner移植到了Ax / Watin! 而且很多testing都非常复杂 – 我知道几年前我在做这个testing。

目前我在看Selenium,因为潜在客户使用它。 但是我确实build议把Ax看作是“工作马”工具之上的一层。

如果您必须访问iframe,模式对话框和跨域iframe WatiN是一种方法。 Selenium无法处理正在抛出commandtimeoutexception的iframe。 WatiN你可以做更多的事情,特别是如果该网站使用IE ShowModalDialog等特定的东西。WatiN处理所有这些很好。 我甚至可以做跨域iframe访问。

如果您需要进行IE和FFtesting,则必须同时执行这两个操作,但是它们只能用于演示testing。 他们不能检测一个元素是否稍微偏离元素的存在。 我不知道任何可以取代用户界面/演示testing的人眼,尽pipe你可以做一些事情来帮助它(在每一步用户的屏幕截图供用户查看)。