使用Coded UI Test Builder无法在WPF自定义RadComboBox中选择值
解决WPF RadComboBox在Coded UI Test中设置SelectedItem的控件找不到异常
我之前处理过不少WPF自定义控件(尤其是Telerik的Rad系列)在Coded UI Test里的定位问题,从你的错误信息和代码来看,核心问题是控件搜索失败,结合错误提示里的虚拟化提示,咱们可以从这几个方向入手解决:
1. 修正控件的搜索属性,避免依赖不稳定的Instance值
你的代码里RadComboBox的搜索属性用了Instance: '2',这个值很容易因为界面元素的加载顺序变化而改变,导致找不到控件。建议换成更稳定的属性,比如AutomationId(如果你的控件设置了的话)或者Name:
- 打开UIMap.uitest文件,找到对应的
uIRadComboBoxComboBox控件 - 在搜索属性里移除
Instance,添加AutomationId并设置为你的RadComboBox的AutomationId值(比如XAML里是<telerik:RadComboBox AutomationId="EventCategoryComboBox"/>,就填这个值) - 保存后重新生成代码
2. 处理控件虚拟化和加载延迟问题
错误提示里提到Search may have failed at '' TabList as it may have virtualized children,说明TabList的虚拟化导致子控件没有被完全加载。你可以在操作控件前添加等待逻辑,确保控件已经准备好:
// 等待RadComboBox加载完成 uIRadComboBoxComboBox.WaitForControlReady(10000); // 等待10秒,可根据实际调整 // 或者等待控件可见 uIRadComboBoxComboBox.WaitForControlVisible(10000);
另外,也可以尝试先确保父容器(比如TabList)已经激活,再操作子控件:
// 先激活对应的Tab页(如果你的RadComboBox在TabControl里) Mouse.Click(this.UIIntelliClientWindow.UITabListControl); Playback.Wait(1000); // 给界面一点响应时间
3. 绕过SelectedItem属性,模拟真实用户操作
很多自定义ComboBox控件并不支持Coded UI Test直接设置SelectedItem属性,因为它们的内部结构和原生WPF ComboBox不一样。你可以模拟用户的真实操作流程:先点击ComboBox展开下拉列表,再点击对应的选项:
// 点击RadComboBox展开下拉 Mouse.Click(uIRadComboBoxComboBox); Playback.Wait(500); // 等待下拉列表展开 // 找到下拉列表中的"Wedding"选项(需要在UIMap里捕获这个选项控件) WpfListItem uIWeddingListItem = this.UIIntelliClientWindow.UIEventInfoRegionCustom1.UIPleasewaitProgressBar.UIRadComboBoxComboBox.UIWeddingListItem; // 等待选项可见并点击 uIWeddingListItem.WaitForControlVisible(5000); Mouse.Click(uIWeddingListItem);
4. 确保Telerik控件启用了自动化支持
Telerik的Rad控件默认可能没有完全开启自动化支持,你需要在XAML里确保控件的自动化属性正确设置:
<telerik:RadComboBox x:Name="EventCategoryComboBox" AutomationId="EventCategoryComboBox" IsTabStop="True" telerik:AutomationProperties.AutomationId="EventCategoryComboBox"/>
另外,确保你的项目引用了Telerik的自动化相关程序集(比如Telerik.Windows.Controls.Automation.dll)。
内容的提问来源于stack exchange,提问作者Muhammad Ruhban Gill
相关产品推荐
相关产品推荐

