Laden...

Coded UI Test Datatemplate Controls identifizieren

Erstellt von Dragon-Sword vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.436 Views
D
Dragon-Sword Themenstarter:in
125 Beiträge seit 2008
vor 9 Jahren
Coded UI Test Datatemplate Controls identifizieren

Hallo zusammen,

wie kann man bei Coded UI Test die Controls einer Listbox, die über Datatemplate gesetzt wurden eindeutig identifizieren?


 <ListBox Name="_listBox">
            <ListBox.ItemTemplate>
                <DataTemplate DataType="{x:Type TestTesting:StringValue}">
                    <ContentControl Content="{Binding}" Margin="3,0,3,5">
                        <ContentControl.Resources>
                            <DataTemplate x:Key="TypeOne">
                                <Border BorderBrush="Red" BorderThickness="1">
                                    <TestTesting:TextBoxTextTastatur x:Name="_txt" Text="{Binding Value}" AutomationProperties.HelpText="{Binding Nr}"/>
                                </Border>
                            </DataTemplate>

                            <DataTemplate x:Key="TypeTwo">
                                <Border BorderBrush="Aqua" BorderThickness="1">
                                    <TestTesting:TextBoxTextTastatur x:Name="_txt" Text="{Binding Value}" AutomationProperties.HelpText="{Binding Nr}"/>
                                </Border>
                            </DataTemplate>

                            <DataTemplate x:Key="TypeThree">
                                <Border BorderBrush="Purple" BorderThickness="1">
                                    <TestTesting:TextBoxTextTastatur x:Name="_txt" Text="{Binding Value}" AutomationProperties.HelpText="{Binding Nr}"/>
                                </Border>
                            </DataTemplate>
                        </ContentControl.Resources>

                        <ContentControl.ContentTemplate>
                            <DataTemplate DataType="{x:Type TestTesting:StringValue}">
                                <ContentControl Name="cp" Content="{Binding}" />
                                <DataTemplate.Triggers>
                                    <DataTrigger Binding="{Binding Nr}" Value="1">
                                        <Setter TargetName="cp" Property="ContentTemplate" Value="{StaticResource TypeOne}"/>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding Nr}" Value="2">
                                        <Setter TargetName="cp" Property="ContentTemplate" Value="{StaticResource TypeTwo}"/>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding Nr}" Value="3">
                                        <Setter TargetName="cp" Property="ContentTemplate" Value="{StaticResource TypeThree}"/>
                                    </DataTrigger>
                                </DataTemplate.Triggers>
                            </DataTemplate>
                        </ContentControl.ContentTemplate>
                    </ContentControl>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

R
212 Beiträge seit 2012
vor 9 Jahren

Das widerspricht sich,wenn du Eine Listbox hast hättest du die benannten elemente mehrfach wodurch diese ihre eindeutigkeit verlieren. du kannst höchstens auf die visualchildren als array zugreifen.

[edit: Es sei denn du willst nur innerhalb deines Listboxitems darauf zugreifen, dann geht das wie immer über x:Name

D
Dragon-Sword Themenstarter:in
125 Beiträge seit 2008
vor 9 Jahren

Vielen Dank für die Antwort.

Folgender Code sollte die TextBox innerhalb des ListBoxItems zurückgeben:


public WpfEdit UIItemEdit
        {
            get
            {
                if ((this.mUIItemEdit == null))
                {
                    this.mUIItemEdit = new WpfEdit(this);
                    #region Suchkriterien
                    this.mUIItemEdit.SearchProperties[WpfListItem.PropertyNames.HelpText] = "2";
                    this.mUIItemEdit.WindowTitles.Add("MainWindow");
                    #endregion
                }
                return this.mUIItemEdit;
            }
        }

Allerdings bekomme ich bei keiner TextBox AutomationProperties.HelpText zurück bzw. ist immer leer.

R
212 Beiträge seit 2012
vor 9 Jahren

Leitet WpfEdit von TExtbox ab oder warum erwartesrt du eine Textbox?

D
Dragon-Sword Themenstarter:in
125 Beiträge seit 2008
vor 9 Jahren

Der Grundcode wurde von Generator erstellt. Allerdings wurde beim ausführen immer die gleiche TextBox beschrieben. jetzt such ich einen Weg diese unterschiedlichen TextBoxen zu identifizieren

R
212 Beiträge seit 2012
vor 9 Jahren

Erstell dir eine custom Property und häng die an deien tetxboxen dran z.B eine nummerierung

 
//namespace BliBlaBlub
public static class MyAttachedProps
{
        public static readonly DependencyProperty InternalKeyProperty =
            DependencyProperty.RegisterAttached("InternalKey", typeof(String), typeof(MyAttachedProps));

public static String GetInternalKey(DependencyObject obj) { return (String)obj.GetValue(InternalKeyProperty ); }

        public static void SetInternalKey(DependencyObject obj, String value) { obj.SetValue(InternalKeyProperty Property, value); }
}



<Window x:Class="BliBlaBlub.MyClass"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:AttachedKey="clr-namespace:BliBlaBlub.MyAttachedProps">

<ListView>
.
.
<ItemTemplate>
<TextBox AttachedKey:InternalKey="Key1" />
<TextBox AttachedKey:InternalKey="Key2" />
<TextBox AttachedKey:InternalKey="Key3" />
<ListView>
</ItemTemplate>
</Window>

und dann kannst du deine TextBoxen über "BliBlaBlub.MyAttachedProps.GetInternalKey(textbox)" unterscheiden

Natürlich wider widerholt sich der Key dann pro Item in deiner ListView immerwider