如何解决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 举报,一经查实,本站将立刻删除。