Добавление AutomationId в дочерний элемент xaml - PullRequest
0 голосов
/ 09 июля 2019

В настоящее время я работаю над поддержкой тестов автоматизации пользовательского интерфейса, к сожалению, впервые работаю с этим. У меня проблема с тем, что я не могу добавить AutomationId для отображения в нужном элементе в сгенерированном XML-файле.

Проблема в том, что этот элемент является дочерним по отношению к другому элементу, и когда я добавляю AutomationId, будь то в коде C # или в XAML, этот AutomationId появляется только в самом верхнем элементе xml, который является некоторой прямоугольной панелью (кнопкой), но в этой кнопке есть некоторые другие элементы как изображение, метка кнопки, некоторая метка со счетчиком. Возможно, в будущем тестерам также понадобится доступ к этим подэлементам, но сейчас я могу найти только верхнюю прямоугольную область по идентификатору.

Вот структура кода элемента SomeEntryView и его родительских элементов до View, которая используется в коде при создании макетов и добавлении элементов в эти макеты.

public partial class SomeEntryView : MainMenuButton
{ ...

public partial class MainMenuButton : ContentView, IDisposable
...

public class ContentView : TemplatedView
...

public class TemplatedView : Layout
...

public abstract class Layout : View

Элемент в xaml определяется следующим образом

<c:MainMenuButton
x:Class="...Views.SomeEntryView"
AutomationId="automationIdTest"
... />

И полученный XML-файл выглядит так

<Custom AcceleratorKey="" AccessKey="" AutomationId="automationIdTest" ClassName="" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="custom" Name="" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.13" x="27" y="151" width="1868" height="148">
    <Custom AcceleratorKey="" AccessKey="" AutomationId="" ClassName="" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="custom" Name="" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.17" x="27" y="151" width="1868" height="148">
            <Custom AcceleratorKey="" AccessKey="" AutomationId="" ClassName="" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="custom" Name="" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.18" x="51" y="165" width="1830" height="110">
                <Custom AcceleratorKey="" AccessKey="" AutomationId="" ClassName="" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="custom" Name="" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.19" x="51" y="175" width="286" height="100">
                    <Image AcceleratorKey="" AccessKey="" AutomationId="" ClassName="Image" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="image" Name="" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.21" x="51" y="175" width="106" height="100" />
                        <Text AcceleratorKey="" AccessKey="" AutomationId="" ClassName="TextBlock" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="text" Name="This is label for entry view" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.22" x="174" y="211" width="163" height="28" />
                </Custom>
                <Custom AcceleratorKey="" AccessKey="" AutomationId="" ClassName="" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="custom" Name="" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.20" x="1829" y="165" width="52" height="52">
                    <Custom AcceleratorKey="" AccessKey="" AutomationId="" ClassName="" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="custom" Name="" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.23" x="1829" y="165" width="52" height="52">
                        <Text AcceleratorKey="" AccessKey="" AutomationId="" ClassName="TextBlock" FrameworkId="XAML" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="False" IsOffscreen="False" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="text" Name="109" Orientation="None" ProcessId="8804" RuntimeId="42.267070.4.24" x="1834" y="177" width="41" height="28" />
                </Custom>
            </Custom>
        </Custom>
    </Custom>
</Custom>

Как вы можете видеть, AutomationId="automationIdTest" находится на самом верхнем элементе, но есть ли способ как-то добавить AutomationId и к его дочерним элементам? Я также попытался добавить AutomationId через код C # при добавлении этого MainMenuButton в макет как View.

...