有没有一个好的.NET Windows自动化库?

39

我正在寻找一个库,可以在本地的.NET代码中使用,就像任何.NET程序集一样。这个库的目的必须是自动化Windows(点击按钮、选择窗口、发送键盘输入、录制和回放等)。

因此:这个库应该在.NET本地编写,并且自动化本身必须能够针对任何可以接收用户输入的本地或.NET Windows应用程序。


到目前为止的建议:

  • benPearce建议AutoIt。它有一个DLL,是本地Win32但不是原生的.NET,需要使用.NET Interop才能使用。
  • Chris Dunaway建议Global Mouse Keyboard Lib。这个库最接近要求,但它不是一个自动化库。它只是帮助设置键盘和鼠标钩子。
  • pm100建议Microsoft的WPF UI Automation。这个库还不错,尽管如果你使用.NET 2.0进行开发,则无法使用它,并且需要安装WPF才能在系统上使用它。它可以自动化从Win32应用程序到浏览器中的HTML的所有东西。
  • JasonTrue建议ArtOfTest的WebAI。这是一个主要面向浏览器和Web应用程序的测试框架。很遗憾,它不适合用于Windows自动化。
如果没有其他更好的选择,我可能会选择 Microsoft 的 UI Automation,并升级任何需要它的项目,将其从 .NET 2.0 升级到 .NET 3.5(如果可能的话)。但我希望有一个更普适的自动化框架(不需要支持 .NET 2.0 之前的版本)。
9个回答

11

谢谢你的回答。看起来很不错,而且它消除了使用WPF UI框架的痛苦。然而,它与WPF具有相同的缺点(例如从WinForms调用时),但这可能是目前最好的解决方案。 - Abel
如果您还有外部控件,您可能希望验证它们是否可以使用White进行自动化:在这种情况下,您可能需要使用此http://www.codeplex.com/UIAutomationVerify。 - tobsen
1
经过一番思考,我决定接受你的答案。虽然它并不完全符合我的要求(它限制了我在想要包含White或MS UI Automation时使用WPF),但这无疑是迄今为止最好的提议。谢谢! - Abel
3
白是 Microsoft UI 自动化的一个封装。 - Yauheni Sivukha

8

我不知道这个新发展。肯定很有趣,但它将我固定于WPF。考虑到我几乎只做.NET 3.5+开发(当然是指我做.NET项目时),那应该不是什么大问题。 - Abel
我不认为这会将您限制在WPF中;这是Windows标准UI自动化库,现在恰好可以与WPF一起使用。如果您需要向下兼容,MS Active Accessibility是您最好的选择。 - JasonTrue
我好像表达得不是很清楚,抱歉。我想使用编程代码中的库,这需要WPF(这不是问题)。是的,它当然可以自动化Windows中的任何操作,我完全理解,但那不是重点...;-) - Abel
+1。如MSDN杂志所推荐http://msdn.microsoft.com/en-us/magazine/cc163465.aspx。 - MarkJ
这是一个艰难的决定,要在你的答案和White之间做出选择。但是White使用起来要简单得多,它真正消除了Microsoft UI Automation的复杂性,同时仍然能够回退到核心部分,如果我想或需要的话。它仍在开发中,但具有潜力。两者都是WPF,没有基本的.NET应用程序可以使用该库,您需要包含WPF。但这只是我必须接受的事情(或使用硬编码的AutoIt或CSharpScript)。 - Abel

8

我过去使用过AutoIt并获得成功。


看起来很像我需要的东西(而且也有点耳熟)。Tx - Abel
赶我一步了! :) 是的,我会建议去看看AutoItX,它是一种从DLL中使用AutoIt功能的方法。 - Adam Neal
自从我实际上要求一个 .NET 库后,我并没有立刻看到它如何在 .NET 中使用。你可以展示一个例子或者指向一个如何从 .NET 调用它的例子吗? - Abel
我认为缺失的信息是AutoIt自动化在Windows层面,而不是.Net层面进行操作,因此可以在任何表单上按按钮或设置文本框内容。 - benPearce
Jason,感谢你的解释,我完全同意并理解。但是我正在寻找.NET库。使用互操作调用本机代码不是我所说的调用.NET库... - Abel
显示剩余3条评论

3

如果你还没有看过它,而且商业库可以接受,你可以看看Ranorex:

http://www.ranorex.com/

我曾经使用过Ranorex 1.5编写小型C# UI自动化工具,效果相当不错!与直接使用MS UI Automation API相比,开发速度似乎更快,因为Ranorex已经提供了许多有用的便利方法。
虽然我还没有很多使用Ranorex 2的经验。
在Ranorex 1.5中,也支持使用C++进行传统的Win32开发,但我没有使用过。据我所知,这在Ranorex 2中仍然可用。
我无法评价Ranorex中录制/播放支持的质量,因为我从未使用过该功能。
最后一个优点:他们的支持团队非常响应和乐于助人,每次我给他们发邮件都会得到帮助。

我只有一个问题。它是否支持测试DevExpress控件,例如Grid? - Apoorv

2

2
好的列表,归结为BenPearce的AutoIt,效果很棒;-) - Abel

2
这个图书馆相当有趣,也很简单。也许它会对你有所帮助。

这确实很有趣!虽然它本身并不是一个自动化库,但它肯定是可用的,并且似乎能够胜任那个任务。我会深入研究一下它。 - Abel

2

我建议使用FlaUI来自动化 .Net 桌面应用程序和移动应用程序。它基于 Microsoft UIA 库,并支持外部控件,如 DevExpress Grid。 此外,它是在TestStack.White的基础上构建的,确实是一个非常好的库,还有一个github页面。


1

我曾经使用ArtOfTest的WebAii相当成功地自动化集成测试Silverlight应用程序。它还支持WinForms和Web应用程序。

Microsoft UI Automation是Active Accessibility的继任者,几乎可以完成您需要的所有Windows UI自动化。


请纠正我,但那不是浏览器自动化吗?我真的在寻找Windows自动化。虽然对于其他类型的项目很有趣 :) - Abel
你说得对,它确实更专注于那个领域,但它也公开了Win32控件。Microsoft UI Automation适用于大多数不必与浏览器交互的自动化。http://en.wikipedia.org/wiki/Microsoft_UI_Automation - JasonTrue

1
关于CSharpScript,你可以在Codeproject上找到一篇文章,这里是主网站的链接。此外,它是熟悉的C#脚本语言,可以用来自动化任何事物。
希望对你有所帮助, 最好的问候, 汤姆。

那看起来是一个有前途的项目,具有其优点,但作为一种脚本语言,它如何应用于“任何”Windows应用程序的自动化? - Abel
我不会将其定义为一种脚本语言,C# 代码可以作为独立的程序使用,如果你考虑 Windows 脚本宿主或者 AutoIt,甚至在代码中使用 p/invoke,这就是它的灵活性。 - t0mm13b

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