我目前正在努力开发 WatiN 2.0 的一个 beta 版本,计划在 2009 年第一季度发布。这将是对当前 CTP 2.0 版本的重大升级,基本上可以提供与版本 1.3.0 相同的功能,用于自动化 FireFox 和 IE。
所以不用担心。
Jeroen van Menen
WatiN 主要开发人员
如果您正在寻求对框架进行严谨的长期投资,并希望其持续得到社区的改进和支持,那么Selenium可能是您最好的选择。例如,我刚在Matt Raible的博客上看到这些信息:
截至周五,Google有超过50个团队, 每天在内部Selenium农场上运行超过51,000个测试。其中96%的测试由Selenium RC处理,并且Farm机器正确运行。另外4%部分是由于RC错误,部分是由于测试错误,但难以确定原因。Selenium已经被采用作为Google内部Web应用程序功能测试的主要技术。这是个好消息。
我最近也参加了一个Selenium聚会,并了解到Google正在投入大量资源来改进Selenium并将其与WebDriver集成,后者是由Simon Stewart开发的自动化测试工具。 WebDriver的一个主要优点是它控制浏览器本身,而不是作为JavaScript应用程序运行在浏览器内部,这意味着像“同源策略”这样的主要障碍将不再是问题。
我已经尝试了两个框架,并在此分享我的初步想法...
WatiN
优点:
缺点:
脚本示例(C#)。使用Selenium做不到这一点(至少我不知道如何):
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;我主要打算编写小型屏幕抓取应用程序,并想使用 LINQPad 进行开发。连接到远程 IE 实例(我没有自己生成的实例)是一个大加分项。我可以在现有实例中进行调试...然后运行一些脚本...然后再次调试等。这在 Selenium 中比较困难,尽管我认为可以在脚本中嵌入“暂停”,在此期间我可以直接与浏览器进行调试。
最大的区别在于Selenium支持不同的浏览器(不仅限于IE或FF,请参阅http://seleniumhq.org/about/platforms.html#browsers)。
此外,Selenium拥有远程控制服务器(http://seleniumhq.org/projects/remote-control/),这意味着您不需要在运行测试代码的同一台机器上运行浏览器。因此,您可以在不同的操作系统平台上测试Web应用程序。
总的来说,我建议使用Selenium。几年前我使用过WatiN,但我对其稳定性不太满意(现在可能已经改善了)。对我来说,Selenium最大的优点是您可以在不同的浏览器上测试Web应用程序。
都不需要,用 Coypu 吧。它包装了 Selenium。更加耐用。 https://github.com/featurist/coypu
更新: Ye Oliver 你说得对。好吧,为什么它更好呢? 就我个人而言,我发现特别是 IE 的 Selenium 驱动程序非常脆弱——在 ajax-heavy 网站上进行单元测试时,我经常遇到一些 "标准" 驱动程序异常。
我提到过我想使用 c# 来编写我的脚本作为一个测试项目吗?是的,是持续构建部署中的验收测试。
好吧,Coypu 解决了以上问题。它是 Selenium 的封装,允许测试夹具,例如,
browser.Visit("file:///C:/users/adiel/localstuff.htm")
browser.Select("toyota").From("make");
browser.ClickButton("Search");
...这将启动一个(可配置品牌的)浏览器并运行脚本。它在范围区域内效果很好,并且非常易于扩展。
Github上有更多的示例,正如下面Oliver所提到的,Adrian的视频也非常棒。我认为这是推动基于浏览器的测试在.Net世界中的最佳方式,并试图遵循Ruby名为capybara
的先驱。
我都用过,它们似乎都能正常工作。我倾向于使用Selenium,因为它似乎对Ajax的支持更好。不过,自从我上次使用WaTiN以来,它可能已经成熟了,所以应该也有同样的功能。
最重要的是你喜欢在哪个开发环境中工作?Selenium和Watin都有记录器,但Selenium在浏览器中,而Watin在Visual Studio中。这两种方法都有优缺点。
到目前为止,我们一直是一个纯微软店,用WatiN提供企业解决方案。这可能会在未来发生改变。
作为更近期的消息来源:
微软在MSDN Magazine 12/2010上发表了一篇结合SpecFlow和WatiN(酷炫的BDD-Behavior Driven Development)的BDD-入门指南。其作者Brandon Satrom(微软开发者推广员)还在2010年12月发布了视频网络研讨会,详细教授他上述发现的1:1课程。
2011年4月,Christian Hassa的团队开发了SpecFlow,支持ATDD/BDD(验收测试驱动开发/行为驱动开发),并发布了一份白皮书,介绍如何使用SpecLog、SpecFlow和Team Foundation Server。
我使用Watin,但没有使用过Selenium。我可以说我很快就上手了Watin,并且几乎没有遇到任何问题。我想不出有什么事情是我不能用它解决的。希望对你有所帮助。
我考虑过两种测试工具。我使用Selenium录制器在Firefox中构建了一些测试。我尝试在Watin中做同样的事情,但发现 Watin Recorder(2.0.9.1228)对我们的网站完全没有用处。它似乎在IE6中渲染网站,使我们的网站无法使用于录制。我们不支持IE6。我找不到任何更改浏览器的方法。我只找到了一个Watin Recorder。如果有多个或保持更新的,请评论。
Selenium Recorder IDE for Firefox很容易使用,并将测试转换为C#。但它并不是非常好。尽管阅读了一篇或两篇博客文章进行了解决方法,但我仍然无法让测试套件成功转换。因此需要对生成的代码进行一些操作。尽管如此,它仍然可以正常工作90%,这比另一个选择要好。
对于我的金钱/时间来说,Selenium仅凭轻松构建新测试就优于其他测试工具。IE没有任何好的开发人员工具栏,可以与 Firebug 媲美,所以我一开始就在Firefox中进行开发,因此在Firefox中拥有良好的工作记录器是一个巨大的优势。
我的结论有点像邱吉尔的民主名言:“ Selenium是最糟糕的自动化UI测试形式。除了其他所有形式。”