在运行时获取 Appium 自动化元素



我需要为控制创建自动化系统级测试。 控件按样式设置,并具有单独的ListViewItem模板ListView。 我的目标是从此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(ByIdFindElementById等(。 我可以通过首先按类(FindElementByClassName(查找ListView来找到元素,然后按类ListViewItems,然后按类TextBlock,但我认为这不是正确的方法。因为在未来的控制结构可能会改变,并且将更难支持测试。

控制也AutomationPeer网格。

那么你有什么想法为什么我不能通过他们的AutomationId得到我的简单TextBlock甚至ListViewItem吗?

已通过为 conrtol 创建自定义自动化对等方解决了问题。控件继承列表视图(在问题描述中不清楚(。因此,自动化 ID 继承的列表视图控制中的列表视图存在问题。

在显示元素后但在 WinAppDriver 查找元素之前添加Thread.Sleep()Task.Delay()几秒钟也很有帮助。 看起来测试环境需要更多时间来绑定和查找元素。

最新更新