1

我想AutomationElement在测试过程中使用 Windows 来模拟 Userinput。我的特殊用例正在处理一个 ListBox 选择,从我在网上找到的内容中,我需要一个用于我的列表框的 AutomationElement 来操作它。

假设我有一个这样的窗口:

<Window x:Class="CryptoAdmin_Test.Helper.FreshWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:CryptoAdmin_Test.Helper">
    <StackPanel>
        <UserControl x:FieldModifier="public" x:Name="FindMe" />
    </StackPanel>
</Window>

因为我有对 UserControl 的引用,所以我应该能够在不从桌面 ( AutomationElement.RootElement) 开始搜索的情况下找到它。

获得AutomationElementfor my的最快方法是什么window.FindMe UserControl

使用AutomationElement.RootElement.FindFirst(...);将从桌面开始,我看不到一种通用方法可以使搜索快速而没有任何误报的可能性。

4

1 回答 1

2

这应该是找到它的最快方法。这也假设您为窗口命名,否则将很难找到它,除非您从应用程序启动进程并为其提供进程 ID。

AutomationElement mainWindow = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "MainWindow"));
AutomationElement findMe = mainWindow.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "FindMe"));

由于 TreeScope 设置为子级,因此在查找相关元素时不会扫描整个树。根据您的用户控件的功能,您返回的元素可能有些无用。如果不为您的控件实现一些自定义模式,您唯一能做的就是从中获取其他元素。

于 2016-12-19T17:42:17.110 回答