Laden...

Coded UI Test Datatemplate Controls identifizieren

Erstellt von Dragon-Sword vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.444 Views
D
Dragon-Sword Themenstarter:in
125 Beiträge seit 2008
vor 10 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 10 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 10 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 10 Jahren

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

D
Dragon-Sword Themenstarter:in
125 Beiträge seit 2008
vor 10 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 10 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