我开始使用TestStack White(UI Automation)来自动化WPF现有应用程序中的测试。当使用标准控件时,一切正常。但是,在尝试交互自定义控件时遇到问题。如何定义自定义控件以启用UI自动化和TestStack White?
例如,我有一个LabeledComboBox,它实际上是一个TextBlock加上一个ComboBox。这被定义为从控制加上控件模板在XAML的派生类:
public class LabeledComboBox : Control
{
static LabeledComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(LabeledComboBox), new FrameworkPropertyMetadata(typeof(LabeledComboBox)));
}
}
<local:LabeledComboBox>
<local:LabeledComboBox.Template>
<ControlTemplate TargetType="{x:Type local:LabeledComboBox}">
<StackPanel>
<TextBlock Text="Text"/>
<ComboBox/>
</StackPanel>
</ControlTemplate>
</local:LabeledComboBox.Template>
</local:LabeledComboBox>
这种控制的作品,你要是跑不过UI自动化验证的唯一对UI自动化可见的部分是组合框,并且不能访问TextBlock。
但是,如果使用XAML和代码隐藏将其作为UserControl创建,则TextBox和ComboBox对UI自动化都可正常显示。
我试着为我的控件创建一个AutomationPeer(FrameworkElementAutomationPeer),但我还没有能够使TextBlock对UI自动化至今可见。一个有趣的结果是,FrameworkElementAutomationPeer :: GetChildrenCore()正确地返回2个自动化对等体的列表,一个用于TextBlock,一个用于ComboBox。
我应该如何更改自定义控件,以便使用UI自动化和白色进行正确测试?
感谢您的解释,所有的解决方案正常工作。我在这里找到了更多信息:http://stackoverflow.com/a/2846419/5414769 –