Coded UI Test 常见问题总结
Coded UI Test是Visual Studio 对于测试工程提供的基于用户界面(User Interface)的自动化测试组件,支持Win32,Web,WPF等UI的自动化测试,支持录屏并生成测试代码。
要求
Coded UI test component;
企业版的Visual Studio(Visual Studio 2010及后续的版本);
最近工作中用到了该组件,整理了一些常见问题及解决方案,总结如下:
一、Coded UI 在录屏时报错:“未录制对Row执行的最后操作,因为该控件没有任何适合的标识属性。”
原因:
当ItemsControl(例如ListBox,TreeView)绑定到指定的数据源时,WPF调用每一个Item的ToString方法实现可访问性。如果Item对应的类没有重载ToString方法,该值将是Item的类名,导致ItemsControl中所有Item的名称都一样。
解决方案:
<ListBox.ItemContainerStyle>
<Style>
<Setter Property="AutomationProperties.Name" Value="{Binding XPath=.}"/>
</Style>
</ListBox.ItemContainerStyle>
二、Coded UI 重新生成测试代码,原手动修改的代码丢失
原因:
Coded UI录制屏幕操作后生成三个文件UIMap.uitest,UIMap.Designer.cs和UIMap.cs,自动生成的测试代码最初全部保存在UIMap.Designer.cs文件中,该文件不可手动修改。
解决方案:
在Visual Studio中双击打开UIMap.uitest文件,点击下图红圈中的按钮把要修改的测试方法移动到UIMap.cs文件后,再在UIMap.cs文件中对其进行修改。
三、UIMap.uitest无法重命名
解决方案:
把UIMap.uitest复制或者移动到一个新的目录下。
四、执行Coded UI测试用例,回放操作时报错:“Search may have failed at ‘XXControl’ Custom as it may have virtualized children. If the control being searched is descendant of ‘ XXControl’ Custom then including it as the parent container may solve the problem.”
原因:
这是Coded UI的一个Bug。在录屏期间未能正确识别被测控件的层级关系。例如:控件C的Contianer是控件B,控件B的Contianer是控件A,它们的关系是A->B->C,但是在录屏中Coded UI未正确识别控件层级,生成了类似A->C这样的层级关系的测试代码,测试用例执行时在控件A中查找控件C导致错误发生。
解决方案: