【发布时间】:2020-05-19 05:57:57
【问题描述】:
我需要为控制创建自动化系统级测试。
控件由样式设置,并具有 ListView 和单独的 ListViewItem 模板。
我的目标是从这个ListViewItem 的标题中获取文本。
这是我在 XAML 中的内容(代码简化)
<Style>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border>
<Grid>
<ScrollViewer x:Name="ScrollViewer">
<ScrollViewer.TopHeader>
<StackPanel>
<ListView ItemsSource="{TemplateBinding SomeSource}"
ItemTemplate="{StaticResource MyTemplate}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</StackPanel>
</ScrollViewer.TopHeader>
</ScrollViewer>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ListViewItem 的模板类似于:
<DataTemplate>
<Grid>
<Grid>
<TextBlock x:Name="TextName"
AutomationProperties.AutomationId="{Binding SomeId}"
Text="{x:Bind SomeText}"/>
</Grid>
</Grid>
</DataTemplate>
当然ListViewItems 是在运行时自动生成的。它们被绑定到相应的属性并获得所需的模板。
但在测试中我无论如何都无法到达我的TextBlock(ById、FindElementById 等等)。
我可以先按类查找ListView (FindElementByClassName),然后按类查找ListViewItems,然后按类查找TextBlock,但我认为这不是正确的方法。因为将来控制结构可能会发生变化,并且支持测试会更加困难。
控件也有 AutomationPeer 作为网格。
那么你有什么想法为什么我不能通过他们的AutomationId 得到我的简单TextBlock 甚至ListViewItems?
【问题讨论】:
标签: c# uwp automated-tests appium appium-desktop