gpt4 book ai didi

c# - 我应该使用 AutomationPeer 还是 AutomationElement?或两者?

转载 作者:行者123 更新时间:2023-11-30 12:43:33 25 4
gpt4 key购买 nike

我刚刚开始使用 AutomationElement,因为我们想对自定义控件进行集成测试,我认为我应该使用 AutomationElement。

我已经成功创建了一个带有自定义控件的窗口,并且可以成功获取窗口和控件的 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?

最佳答案

您无需执行任何操作即可使用模式。 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();

关于c# - 我应该使用 AutomationPeer 还是 AutomationElement?或两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31077082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com