WatiN 还是硒?

我很快就会开始为我们的演示文稿编写一些自动化测试代码。似乎每个人都推荐 华田。对于 ASP.NET Web 表单的自动化测试,您更喜欢哪一种?这些产品中哪一个对你更有效?

顺便说一句,我注意到 WatiN 2.0从2008年3月就开始使用 CTP 了,这有什么值得担心的吗?

47609 次浏览

我都用过了,看起来都不错。我赞同 Selenium,因为它似乎有更好的 Ajax 支持。我相信 WaTiN 已经成熟,虽然从上次我使用它,所以它应该有同样的东西。

最大的问题是你喜欢哪种开发环境?Selenium 和 Watin 有录音机,但 Selenium 在浏览器中,Watin 在视觉工作室中。这两个都是 + 和-的。

我通常使用 Selenium,主要是因为我喜欢用于 FireFox 的 Selenium IDE 插件来记录测试的起始点。

如果你需要做 IE 和 FF 测试,你必须同时做这两件事,但是它们只能在演示测试中起到很好的作用。他们无法检测是否有一个元素有轻微的偏差,只能检测元素是否存在。我不知道有什么东西可以取代人眼来进行 UI/演示测试,尽管你可以做一些事情来帮助它(在每个步骤中截取页面供用户查看)。

我用的是 Watin,但还没用过硒。我可以说,我起床和运行在 Watin 很快,几乎没有问题。我想不出任何我想做的事情,我不能理解它。高温

我推荐使用 WebAii,因为我在这方面已经取得了一些成功,当我使用它的时候,我的抱怨很少。我从来没有尝试过硒,我不记得使用 WaTiN 太多,至少没有到我可以让它成功工作的地步。我不知道有任何框架可以优雅地处理 Windows 对话框,尽管 WebAii 有一个用于实现自己的对话框处理程序的接口。

我只想说,我目前正在努力工作,在2009年第一季度的某个地方发布 WatiN 2.0的测试版。这将是对当前 CTP 2.0版本的一次重大升级,基本上将提供与1.3版本相同的自动化 FireFox 和 IE 的功能。

所以没什么好担心的。

希望这能帮助你做出选择 Jeroen van Menen 首席开发员 WatiN

我们都测试过了,决定用 WaTiN。正如其他人指出的那样,Selenium 确实有一些 WaTiN 中没有的优秀特性,但是我们遇到了让 Selenium 工作的问题,一旦我们这样做了,它在运行测试时肯定比 WaTiN 慢。如果我没有记错的话,我们遇到的设置问题源于 Selenium 有一个单独的应用程序来控制实际的浏览器,WaTiN 在这个应用程序中完成了所有工作。

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

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

一般来说,我建议使用硒。我几年前用过 WatiN,但我对它的稳定性不满意(它现在可能已经改进了)。对我来说,Selenium 最大的好处是可以测试 Web 应用程序。在不同的浏览器上。

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

截至周五,谷歌拥有50多个团队 每天运行超过51K 的测试 内部硒农场。96% 的这些 测试由 Selenium RC 和 正确的农场机器。另一个 部分原因是 RC 错误,部分原因是 RC 错误 测试错误,但是隔离 原因可能是困难的。硒有 被采用为主要技术 网页功能测试 在谷歌的应用程序。这是 好消息。

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

冒险说一句,我推荐 Axe/WatiN。Axe 允许“手动”测试人员在 Excel 中编写测试,而不需要了解底层的测试“语言”。它确实需要一个“技术人员”来编写定制的行动(IE。今天我不得不做一个稍微复杂一点的表查找和交叉引用) ,但是一旦编写了操作,非技术测试人员就可以在测试中使用。

我还听说英国政府网关项目(我相信有6K + 测试自动化测试)最近在一周内将所有测试从 Axe/Winrunner 移植到 Axe/Watin! !而且许多测试都相当复杂——我知道,因为我几年前就在做这方面的工作... ..。

我现在正在关注 Selenium,因为潜在客户正在使用它。但我还是建议你把 Axe 看作是工作马工具上的一层。

如果您必须访问 iframe,模态对话框和跨域 iframe WatiN 是一种方法。Selenium 无法处理它抛出命令超时异常的 iframe。你可以做更多的事情,特别是如果网站使用 IE 特定的东西,如 ShowModalDialog 等。WatiN 把他们都处理得很好。我甚至可以做跨域 iframe 访问。

我考虑过两者都用。我用 Selenium 的录音机在 FF 中构建了一些测试。我试着在 Watin 做同样的事情,结果发现。它似乎是呈现在 IE6的网站-使我们的网站有效地无法用于记录。我们不支持 IE6。我找不到任何办法来改变它正在使用的浏览器。我只找到一台 Watin 录音机。如果有一个以上,或一个是保持更新,请评论。

用于 Firefox 的 Selenium Recorder IDE 使用简单,并将测试移植到 C # 。我不擅长这个。我无法将测试套件移植到工作中,尽管阅读了一两篇有变通方法的博客文章。所以对生成的代码进行一些操作。尽管如此,它仍然有90% 的效果,而且这比另一种选择要好。

为了我的金钱/时间,硒在构建新测试方面更为优越。IE 没有任何像 纵火犯一样好的开发工具栏,所以我一开始是用 Firefox 开发的,所以在 Firefox 中拥有一个好的工作记录器是一个巨大的收获。

我在这里的结论很像丘吉尔引用的民主: 硒是自动化 UI 测试中最糟糕的形式,除了其他的。

直到现在,我们是一个纯粹的微软商店为企业提供解决方案,并与 WatiN。这种情况将来可能会改变。

作为一个更近期的来源:

微软打印在 MSDN Magazine 12/2010 MSDN 杂志12/2010的 BDD-Primer 与 SpecFlow 和 WatiN (凉爽的 BDD-行为驱动开发)的结合。它的作者 Brandon Satrom (msft 开发者福音传道者)也在2010年12月发布了一个 视频网络直播的教学细节1:1他的上述发现。

2011年4月,Christian Hassa发布了一个关于通过 SpecLog、 SpecFlow 和 TeamFoundation Server (验收测试驱动的开发/行为驱动的开发)支持 ATDD/BDD 的 白皮书,其团队构建了 SpecFlow。

都不是。用科伊普。它包裹着硒。更耐用。 https://github.com/featurist/coypu

更新 是的,奥利弗,你说得对。好吧,为什么这样更好? 就我个人而言,我发现用于 IE 的 Selenium 驱动程序非常脆弱——在 Ajax 大型网站上为单元测试驱动 Selenium 时,我再次发现了一些“标准”驱动程序异常。

我有没有提到过我想用 c # 作为测试项目来编写脚本?连续生成部署中的验收测试。

Coypu 处理上述问题,它是 Selenium 的包装器,允许测试装置,

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

... 它将启动一个(可配置品牌)浏览器并运行脚本。它可以很好地处理作用域,并且是非常可扩展的。

GitHub 上有更多的例子,正如 Olvier 下面提到的,Adrian 的视频非常棒。我认为这是最好的方式来驱动基于浏览器的测试。网络世界,并试图遵循它的 Ruby 同名 capybara

我把它们都试了一遍,这是我最初的想法。


华田

好人

  • 快速执行。
  • 脚本创建工具是独立的项目; 据我所知有两个: 瓦思(基于 Excel,托管在 CodePlex 上)和 WatiN 测试记录(托管在 SourceForge 上)。两者都不如 Selenium IDE 健壮。
  • 非常好的 IE 支持。可以附加或分离到正在运行的实例。可以访问本机窗口句柄等(见下面的脚本示例)。
  • NuGet 打包,易于在.NET、 VisualStudio 风格的环境中运行并保持更新。

坏人

  • 在谷歌上搜索 WatiN (WatiN xyz)常常会导致谷歌推荐“ watir xyz”作为替代。
  • 虽然(文档)很少,但是它令人困惑; 例如: 乍一看,似乎没有对 CSS 选择器的本机支持。特别是因为有像‘ WatiNCssSelectorExtended’这样的扩展库和许多关于替代技术的博客文章(比如向页面中注入 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;
}
}

  • 比 WatiN 慢(特别是因为必须创建一个新的进程)。
  • 内置的 CSS 选择器/XPath 支持。
  • SeleniumIDE 很好(不能说很好,但它是全班最好的!)。
  • 感觉更像爪哇人。但实际上,它与编程语言无关; 所有命令都发送到进程外的“ Driver”。驱动程序实际上是浏览器实例的“主机”进程。所有的通信必须跨过过程边界序列化,这可能解释了与 WatiN 相关的速度问题。
  • 解耦过程-“驱动程序”和“控制”意味着更加健壮、更加复杂等等,但是也更容易创建网格/分布式测试环境。如果“分发”机制(即 Driver & Control 之间的通信)跨 WebSphere 或其他现有的、健壮的消息队列管理器,我们会非常喜欢它。
  • 支持开箱即用的 chrome 和其他浏览器。

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