Ich habe eine kleine WPF-Anwendung erstellt (um zu erfahren, wie Coded UI Testing funktioniert). Meine Anwendung enthielt eine ItemsControl
, aber UIMap konnte nicht gefunden werden das entsprechende Steuerelement.Wie erhalten Sie den Microsoft Coded UI Test Builder zum Erkennen eines ItemsControl?
XAML:
<ItemsControl ItemsSource="{Binding Path=Customers, Mode=OneTime}"
AutomationProperties.AutomationId="CustomersItemsControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock AutomationProperties.AutomationId="{Binding Path=Id, StringFormat='Customer_{0}', Mode=OneWay}"
Margin="5">
<TextBlock.Text>
<MultiBinding StringFormat="{}{1}, {0}">
<Binding Path="FirstName" />
<Binding Path="LastName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Das Problem, das ich habe, ist, dass, obwohl WPF eine ItemsControlAutomationPeer
hat, kann der Test der codierten UI Builder nicht die Kontrolle orten zum UIMap hinzugefügt werden. Die einzige Möglichkeit, die ich bekam, war, das root AutomationElement zu bekommen und dann die TreeWalker.ControlViewWalker
(ich benutzte den Code, der in this answer gefunden wurde) zu verwenden, aber diese Lösung gibt mir keinen Zugriff auf die Steuerung selbst, nur die AutomationElement
. Im Idealfall, da es einen AutomationPeer für das Steuerelement gibt, habe ich mich gefragt, ob es einen besseren Weg gibt, dieses Steuerelement zu erreichen (selbst wenn es unmöglich ist, für die UIMap zu gelangen).
Auch eine Randnotiz. Ich verstehe schon, dass Visual Studio TextBlock
s bei Coded UI Testing ignoriert, weil es so viele produziert werden kann. Im Moment bin ich mehr daran interessiert, an die ItemsControl
selbst zu kommen, nicht die einzelnen TextBlock
s, die daraus generiert werden.