Получить элемент автоматизации Appium во время выполнения - PullRequest
0 голосов
/ 03 февраля 2020

Мне нужно создать тест уровня системы автоматизации для управления. Элемент управления установлен по стилю и имеет 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 в качестве гридов.

Так что у вас есть идеи, почему я могу ' мои простые TextBlock или даже ListViewItem с их AutomationId?

1 Ответ

0 голосов
/ 05 февраля 2020

Проблема была решена путем создания настраиваемого однорангового узла автоматизации для conrtol. Элемент управления наследует ListView (не было ясно в описании проблемы). Поэтому возникли проблемы с просмотром списка внутри элемента управления, унаследованного от списка с помощью идентификатора автоматизации.

Также было полезно добавить Thread.Sleep() или Task.Delay() в течение нескольких секунд после показа элемента, но до поиска элемента WinAppDriver. Похоже, тестовой среде требуется больше времени для привязки и поиска элементов.

...