WatiN还是Selenium?

149

我即将开始编写自动化测试我们的演示文稿。似乎每个人都推荐 WatiNSelenium。你更喜欢哪一个用于自动化测试 ASP.NET web 表单?这两种产品中哪一种更适合您?

另外,我注意到 WatiN 2.0 自 2008 年 3 月以来一直处于 CTP 阶段,这是值得关注的问题吗?


31
我认为这个问题不应该被关闭。对我和其他开发者来说很有用(请看赞数)。这种问题是我需要Stackoverflow的原因之一。我希望我能够对管理员的决定进行反对投票。 - Maxim Eliseev
8
我不知道为什么这个问题被关闭了。它非常有建设性。我正在学习两者,并想知道它们的区别。 - marcelo-ferraz
15
不建设性吗?...这个网站被一群掌控过度的白痴所淹没。 - Ronald McDonald
15个回答

108

我目前正在努力开发 WatiN 2.0 的一个 beta 版本,计划在 2009 年第一季度发布。这将是对当前 CTP 2.0 版本的重大升级,基本上可以提供与版本 1.3.0 相同的功能,用于自动化 FireFox 和 IE。

所以不用担心。

Jeroen van Menen
WatiN 主要开发人员


23
抱歉,但我不同意给出-1的评分。Jeroen只回答了第二个问题“顺便说一下...”。如果不是产品的首席开发人员,谁才更有资格回答这个问题呢?仅将此响应标记为最佳答案可能是值得商榷的。 - Henry99
1
@Henry99更适合作为问题下的评论或单独提出一个问题。这里的核心问题是“A还是B”。A或B的作者不应该回答那样的问题,因为很明显他们会有偏见。 - jcollum
3
@jcollum没有提到他的产品与Selenium的质量比较,也没有说任何可能被认为有偏见的话。也许你没有读到问题的第二部分,但项目的首席开发人员毫无疑问是回答这个问题最合适的人选。 - Grinn
2
@Grinn:我在你上面的评论中解决了这个问题,你看了吗?他没有回答主要问题(Watin还是Selenium),而是在处理本应完全成为另一个问题的事情。 - jcollum

58

如果您正在寻求对框架进行严谨的长期投资,并希望其持续得到社区的改进和支持,那么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应用程序运行在浏览器内部,这意味着像“同源策略”这样的主要障碍将不再是问题。


1
Selenium目前似乎是一个更成熟的项目,而且Google正在使用它,这是一个非常可靠的推荐(我也尝试过Watin并遇到了问题 - 但从未尝试过Selenium)。 - Piotr Owsiak

38
我们已经测试了两种工具,并决定选择 WaTiN。正如其他人指出的那样,Selenium 确实具有一些在 WaTiN 中找不到的不错特性,但我们在使用 Selenium 时遇到了问题,而且一旦解决了这些问题,Selenium 在运行测试时的速度显然比 WaTiN 慢。如果我没记错,我们遇到的设置问题源于 Selenium 有一个单独的应用程序来控制实际的浏览器,而 WaTiN 则在进程中完成所有操作。

4
为性能笔记和真实世界的使用点赞。 - Jeremy McGee
我意识到了相同的问题:#1 性能不是很好,#2 测试运行在一个Java服务器上(需要在[TestSetup]中设置)。 - Peter Gfader
18
现在这不再是一个问题了 - Selenium 2.0附带WebDriver库,可以直接控制浏览器,而不仅仅通过Java服务器间接控制。 - Igor Brejc
2
我还没有尝试过Selenium,但我在使用Watin时遇到了问题。我的测试突然无缘无故地停止了,而且我经常会随机抛出COM错误(至少我找不到任何模式)。 - Piotr Owsiak

30

我已经尝试了两个框架,并在此分享我的初步想法...


WatiN

优点:

  • 执行速度快。
  • 脚本创建工具是独立的项目,我知道有2种: Wax (基于Excel,在CodePlex上托管)和WatiN Test Record(在SourceForge上托管)。都不如Selenium IDE稳定。
  • 非常好的IE支持。可以附加到正在运行的实例并从中分离。可以访问本地窗口句柄等(请参阅下面的脚本示例)。
  • NuGet打包,易于在.NET、Visual Studio等环境中运行和更新。

缺点:

  • 搜索WatiN(watin xyz)时,Google通常会建议使用“watir xyz”代替。没有那么多的文档。
  • 现有的文档很少,而且很令人困惑;例如,乍一看似乎没有原生支持CSS选择器。尤其是因为有像'WatiNCssSelectorExtensions'这样的扩展库,以及许多关于替代技术的博客文章(例如将jQuery / sizzle注入到页面中)。在Stack Overflow上,我找到了来自Jeroen van Menen的评论,表明有原生支持。至少是首席开发人员花时间在Stack Overflow上:)
  • 没有原生的XPath支持。
  • 没有开箱即用的远程执行/网格执行。

脚本示例(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 稍慢 (尤其是因为必须创建一个新进程)。
  • 内置 CSS 选择器/XPath 支持。
  • Selenium IDE 还不错(不能说很好,但它是同类中最好的!)。
  • 感觉比 .NET 更像 Java...但实际上,它是面向编程语言的;所有命令都发送到一个独立的“Driver”进程。该驱动程序实际上是浏览器实例的“主机”进程。所有通信必须在进程边界之间进行串行化处理,这可能解释了相对于 WatiN 的速度问题。
  • 有分离的进程——“Driver”和“Control”,意味着更加健壮,更加复杂等等,但也更容易创建网格/分布式测试环境。如果“分布”机制 (即驱动程序和控制之间的通信) 跨越 WebSphere 或其他现有的、强大的消息队列管理器,那就更好了。
  • 支持 Chrome 和其他浏览器。

尽管如此,最终我选择了 WatiN;我主要打算编写小型屏幕抓取应用程序,并想使用 LINQPad 进行开发。连接到远程 IE 实例(我没有自己生成的实例)是一个大加分项。我可以在现有实例中进行调试...然后运行一些脚本...然后再次调试等。这在 Selenium 中比较困难,尽管我认为可以在脚本中嵌入“暂停”,在此期间我可以直接与浏览器进行调试。


2
感谢您提供详细的比较。 - Sam

18

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

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

总的来说,我建议使用Selenium。几年前我使用过WatiN,但我对其稳定性不太满意(现在可能已经改善了)。对我来说,Selenium最大的优点是您可以在不同的浏览器上测试Web应用程序。


3
Selenium支持不同浏览器——这一点非常重要,因为现在我们需要支持Chrome、Safari、FF和IE 6、7和8。 - Tony Ennis

17

都不需要,用 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的先驱。


这个答案需要更多的关注:Coypu是您和自动化浏览器测试之间的缺失链接!太棒了!如果您曾经为Selenium(或者可能是WatiN)而苦苦挣扎,试图正确地获取AJAX或元素查找 - Coypu就是您祈祷的答案;-) [现在就去看看吧!](http://vimeo.com/24478046) - Oliver
谢谢 @penderi,添加更多细节 :-) - Oliver

12

我都用过,它们似乎都能正常工作。我倾向于使用Selenium,因为它似乎对Ajax的支持更好。不过,自从我上次使用WaTiN以来,它可能已经成熟了,所以应该也有同样的功能。

最重要的是你喜欢在哪个开发环境中工作?Selenium和Watin都有记录器,但Selenium在浏览器中,而Watin在Visual Studio中。这两种方法都有优缺点。


6

到目前为止,我们一直是一个纯微软店,用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。


5

我使用Watin,但没有使用过Selenium。我可以说我很快就上手了Watin,并且几乎没有遇到任何问题。我想不出有什么事情是我不能用它解决的。希望对你有所帮助。


4

我考虑过两种测试工具。我使用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测试形式。除了其他所有形式。


能够让QA团队使用FF插件创建“手动”测试,并让开发人员将生成的C#测试移植到我们的基础设施中,这使得选择Selenium变得非常容易。WaitIn看起来还不错,但是根据WaitIn项目页面上的视频所述,构建测试的“费力”过程在这种情况下对我们的客户来说不是一个选项。 - sonstabo
@sonstabo:那是我希望走的方向。希望有一天我们会有一个QA部门:puppydogeyes: - jcollum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接