我刚开始使用AutomationElement,因为我们想要对自定义控件进行集成测试,而我认为我应该使用AutomationElement。
我已经成功创建了一个带有自定义控件的Window,并且可以成功获取窗口和控件的AutomationElements
// Retrieve the View
System.Windows.Automation.Condition viewCondition = new PropertyCondition(AutomationElement.AutomationIdProperty, "MyTestView");
AutomationElement view = AutomationElement.RootElement.FindFirst(TreeScope.Children, viewCondition);
Assert.IsNotNull(view);
// Retrieve the CustomControl
System.Windows.Automation.Condition comboboxCondition = new PropertyCondition(AutomationElement.AutomationIdProperty, "MyCustomControl");
AutomationElement combobox = view.FindFirst(TreeScope.Children, comboboxCondition);
Assert.IsNotNull(comboboxCondition);
现在,我想要做的是使用,例如ValuePattern。这就是我感到困惑的地方。
在查找信息时,我在referencesource.microsoft.com搜索了WPF源代码。我遇到了实现IValueProvider的ComboboxAutomationPeer,所以现在我很困惑。
我还应该实现实现IValueProvider的MyCustomControlAutomationPeer,然后AutomationElement会使用ValuePattern吗?或者我应该让MyCustomControl实现IValueProvider吗?
答案 0 :(得分:1)
您不必实施任何使用模式的内容。 UI Automation为您完成此任务(充当目标应用程序的代理)。这在官方文档中得到了很好的解释:Get Supported UI Automation Control Patterns
以下是一个示例摘录:
SelectionItemPattern pattern;
try
{
pattern = yourAutomationElement.GetCurrentPattern(SelectionItemPattern.Pattern) as SelectionItemPattern;
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message); // Most likely "Pattern not supported."
return;
}
pattern.Select();