Windows Automation在我的WPF应用程序中找不到DataGrid

问题描述

我一直在为自己正在开发的应用程序编写ui自动化测试,我目前正试图从DataGrid中获取一些数据,但是每次运行和调试代码时,我似乎都无法找到DataGrid。 DataGrid像下面的控件一样位于UserControl中(我知道这不是只想显示结构的xaml):

<UserControl>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0" Orientation="Horizontal">
            <!-- Just some buttons and a label -->
        </StackPanel>
        <DataGrid Grid.Row="1" Name="resultsDataGrid" AutoGenerateColumns="False" HorizontalScrollBarVisibility="Visible"
                  ItemsSource="{Binding}" AutomationProperties.AutomationId="resultsDG">
            <DataGrid.Columns>
                <DataGridTextColumn Header="First Name" Width="100" Binding="{Binding FirstName}"></DataGridTextColumn>
                <DataGridTextColumn Header="Last Name" Width="100" Binding="{Binding LastName}"></DataGridTextColumn>
                <DataGridTextColumn Header="Home #" Width="100" Binding="{Binding HomePhoneNumber}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</UserControl>

此UserControl通过TabControl中的Tab添加到主应用程序。尝试找到此DataGrid的代码如下:

AutomationElement rootElement = AutomationElement.RootElement;
if (rootElement != null)
{
    AutomationElement app = Utilities.UIAutomation.GetChildElement(rootElement,AutomationElement.NameProperty,"UA");
    if (app != null)
    {
        AutomationElement results = Utilities.UIAutomation.GetDescendentElement(app,AutomationElement.AutomationIdProperty,"Results");
        if (results != null)
        {
            AutomationElement dataGrid = Utilities.UIAutomation.GetDescendentElement(results,"resultsDG");
        }
    }
}

其中Utilities.UIAutomation.GetChildElement和Utilities.UIAutomation.GetDescendentElement如下:

static public AutomationElement GetChildElement(AutomationElement parent,AutomationProperty property,string name)
{
    PropertyCondition condition = new PropertyCondition(property,name);
    AutomationElement element = parent.FindFirst(TreeScope.Children,condition);
    return element;
}

static public AutomationElement GetDescendentElement(AutomationElement parent,string elementName)
{
    PropertyCondition condition = new PropertyCondition(property,elementName);
    AutomationElement element = parent.FindFirst(TreeScope.Descendants,condition);
    return element;
}

有人知道为什么dataGrid总是为我返回null吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...