2

我正在尝试在 Visual Studio 2010 项目中为 WinForm 创建单元测试。我在我的项目中添加了一个新的“Coded UI Test”,打开代码文件,然后右键单击并选择“Generate Code for Coded UI Test”->“Use Coded UI Test builder”。然后我启动我的应用程序,在 UI Map 控件上选择“记录”。我运行我的测试(在这种情况下,只需选择一个文本框,输入一个随机值,然后单击一个按钮)。然后我从 UI Map 控件中选择“生成代码”,该控件生成测试将使用的代码。运行此测试时,我收到错误:

测试方法 HelloWorldTest.CodedUITest1.CodedUITestMethod1 抛出异常:Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException:播放未能找到具有给定搜索属性的控件。其他详细信息: TechnologyName: 'MSAA' ControlType: 'Window' Name: 'Form1' ClassName: 'WindowsForms10.Window' ---> System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component .

有谁知道我哪里出错了?

谢谢

4

1 回答 1

1

我相信您的问题出在窗口标题上。您会看到 Visual Studio 将为您的应用程序中生成的每个新窗口提供一个窗口标题。当您记录您的测试时,您的窗口标题是“Form1”。它在您的错误消息中这样说:

控件类型:“窗口”名称:“Form1”

因此,您需要确定的是您的应用程序是否在每次打开新窗口时重命名该窗口(很可能确实如此)。例如,如果您打开第二个窗口,它可能被称为“Form2”。

为了使编码的 ui 测试正常工作,它需要知道在哪里寻找某些控件以执行其操作。因此,它需要知道窗口标题才能“选择一个文本框,输入一个随机值,然后单击一个按钮”。

我发现解决此问题的唯一方法是如果我知道窗口标题已更改或将要更改,则手动设置它。

this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Clear();
this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Add("Franchises for Sale");

如您所见,我只是清除控件的 WindowTitles 属性中的所有值,然后添加正确的标题,我知道它应该是。在上面的示例中,它的组织如下:

this.(您的 uimap 文件的名称).(您的窗口的名称).(窗口中的文档的名称).(特定控件的名称 (组合框、单选按钮、文本框等)).WindowTitles.(清除或添加)();

这段代码可以直接放在编码的 ui 测试文件中,或者如果你想使用部分类 UIMap.cs(不是自动生成的,UIMap.Designer.cs 是自动生成的)来更改 UIMap . 如果您选择后者,请记住删除“.UIMap”。

于 2011-04-26T20:28:15.143 回答