问题描述
我一直在为自己正在开发的应用程序编写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 (将#修改为@)