从独立应用程序执行编码的UI测试

我发现了一些关于如何使用mstest实用程序执行代码UI测试的博客文章,但我需要从我的C#应用​​程序执行它们。 我尝试了最简单的事情:我创建了一个控制台应用程序,添加了对它的引用

  • Microsoft.VisualStudio.TestTools.UITest.Logging.dll
  • Microsoft.VisualStudio.TestTools.UITest.Playback.dll
  • Microsoft.VisualStudio.TestTools.UITesting.dll

我尝试从我的应用程序调用UI测试方法。 我收到以下错误:

The following is not a valid technology name: MSAA. To search for a control, you must specify a valid technology name. 

我尝试引用与UI测试相关的其他程序集,但错误保持不变。 也许我应该添加到App.config以便能够运行测试?

我正在使用bat文件执行编码的UI测试,您只需将CUIT测试.dll文件复制到您的应用程序并通过bat文件调用它来执行。 即使您可以使用测试代理从不具有Visual Studio的不同计算机上运行代码UI测试。

我的bat文件看起来像这样:

从DLL运行所有测试方法:

 "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe" /testcontainer:"DLL_Location\CUIT_03.dll" /resultsfile:"ResultFile_Location\result.trx" 

从DLL运行单一测试方法:

 "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe" /testcontainer:"DLL_Location\CUIT_03.dll" /test:"TestMethodName" /resultsfile:"ResultFile_Location\result.trx" 

在C#中使用MSTest运行时遇到了类似的问题。 我正在使用Selenium,所以我使用[TestClass]属性标记了我的基类。 我需要CodedUI来测试文件上传。 当我将其更改为[CodedUITest]时,它有效。

如果从C#调用MSTest,你会解决你的问题吗? 如果是这样,这篇MSDNpost会告诉你如何 。

否则,我会尝试在MSTest中使用反汇编程序来查找它的作用以及它使用的引用。 快速浏览一下,我看到了Microsoft.VisualStudio.QualityTools.ExecutionCommon以及Microsoft.VisualStudio.QualityTools.CommandLine中名为Executor的类。

请问,为什么需要从C#调用CUIT?

我相信你错过了一些参考资料,试试这个博客,这是你需要的所有参考资料:

 c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\ Microsoft.VisualStudio.TestTools.UITesting.dll Microsoft.VisualStudio.QualityTools.CodedUITestFramework.dll C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\image Microsoft.VisualStudio.TestTools.UITest.CodeGeneration.dll Microsoft.VisualStudio.TestTools.UITest.Framework.dll Microsoft.VisualStudio.TestTools.UITest.Playback.dll 

试试这个博客: http : //blogs.microsoft.co.il/shair/2010/07/15/running-codedui-test-from-another-application/

它列出了你需要的所有参考资料(尝试过,它适用于winforms(MSAA))。

检查您的应用程序是否以32进程运行,因为编码的UI不能与64位进程一起使用,并且不能在其中使用。

嗨它在我的情况下工作:使用下面的代码==>

 Playback.Initialize(); CockpitAutomate.CockpitAutomate c = new CockpitAutomate.CockpitAutomate(); c.RunCockpit(); Playback.Cleanup();