Compartir a través de


Establecer una propiedad de automatización única para la prueba de controles de la Tienda Windows

Si desea ejecutar pruebas de IU codificadas para la aplicación de la Tienda Windows basada en XAML, debe tener una propiedad única de automatización que identifique cada control.

Puede asignar una propiedad única de automatización basada en el tipo de control de XAML de la aplicación.Aquí se indica cómo asignar esta propiedad única de automatización en las situaciones siguientes:

  • Definición estática XAML de los controles

  • Asignar propiedades únicas de automatización mediante Visual Studio o Blend para Visual Studio

  • Usar una plantilla de datos

  • Usar una plantilla de control

  • Controles dinámicos

Usar métodos para asignar una propiedad única de automatización

Definición estática XAML

Para especificar una propiedad única de automatización de un control que se define en el archivo XAML, puede establecer AutomationProperties.AutomationId o el AutomationProperties.Name implícita o explícitamente, como se muestra en los ejemplos siguientes.Al establecer alguno de estos valores se proporciona al control una propiedad única de automatización que se puede usar para identificar el control cuando se crea una grabación de acciones o de pruebas de la interfaz de usuario.

Establecer la propiedad implícitamente

Establezca AutomationProperties.AutomationId en ButtonX mediante la propiedad Name en el XAML para el control.

<Button Name="ButtonX" Height="31" HorizontalAlignment="Left" Margin="23,26,0,0"  VerticalAlignment="Top" Width="140" Click="ButtonX_Click" />

Establezca AutomationProperties.Name en ButtonY por medio de la propiedad Content en el XAML para el control.

<Button Content="ButtonY" Height="31" HorizontalAlignment="Left" Margin="23,76,0,0" VerticalAlignment="Top" Width="140" Click="ButtonY_Click" />

Establecer la propiedad explícitamente

Establezca AutomationProperties.AutomationId en ButtonX explícitamente en el XAML para el control.

<Button AutomationProperties.AutomationId=“ButtonX” Height="31" HorizontalAlignment="Left" Margin="23,26,0,0"  VerticalAlignment="Top" Width="140" Click="ButtonX_Click" />

Establezca AutomationProperties.Name en ButtonY explícitamente en el XAML para el control.

<Button AutomationProperties.Name="ButtonY" Height="31" HorizontalAlignment="Left" Margin="23,76,0,0" VerticalAlignment="Top" Width="140" Click="ButtonY_Click" />

Asignar propiedades únicas de automatización mediante Visual Studio o Blend para Visual Studio

Puede usar Visual Studio o Blend para Visual Studio para asignar nombres únicos a elementos interactivos como botones, cuadros de lista, cuadros combinados y cuadros de texto.Esto proporciona al control un valor único para AutomationProperties.Name.

Visual Studio: en el menú Herramientas, señale Opciones y, a continuación, elija Editor de texto, después, XAML y, por último Varios.

Seleccione Asignar nombre automáticamente a los elementos interactivos cuando se creen y elija Aceptar.

Opciones de Varios para XAML

Blend para Visual Studio: use uno de los métodos siguientes para realizar esta acción desde Blend para Visual Studio.

[!NOTA]

Solo puede usar este método para los controles que se crean estáticamente mediante XAML.

Para asignar un nombre único a los controles existentes

En el menú Herramientas, elija Asignar nombre a elementos interactivos, como se muestra aquí:

Elegir Asignar nombre a elementos interactivos en el menú Herramientas

Para asignar automáticamente un nombre único a los controles que se crean

En el menú Herramientas, elija Opciones y, después, Proyecto.Seleccione Asignar nombre automáticamente a los elementos interactivos cuando se creen y elija Aceptar, como se muestra aquí:

Establecer el proyecto para asignar nombre a los elementos interactivos

Usar plantillas de datos

Puede definir una plantilla sencilla mediante ItemTemplate para enlazar los valores de un cuadro de lista con variables utilizando el XAML siguiente.

<ListBox Name="listBox1" ItemsSource="{Binding Source={StaticResource employees}}">
   <ListBox.ItemTemplate>
      <DataTemplate>
         <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding EmployeeName}" />
            <TextBlock Text="{Binding EmployeeID}" />
         </StackPanel>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

También puede usar una plantilla con ItemContainerStyle para enlazar los valores a las variables utilizando el XAML siguiente.

      <ListBox Name="listBox1" ItemsSource="{Binding Source={StaticResource employees}}">
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListBoxItem">
                                <Grid>
                                    <Button Content="{Binding EmployeeName}" AutomationProperties.AutomationId="{Binding EmployeeID}"/>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListBox.ItemContainerStyle>         
        </ListBox>

En ambos ejemplos, debe reemplazar el método ToString () de ItemSource, como se muestra en el código siguiente.Este código se asegura de que el valor de AutomationProperties.Name está establecido y es único, porque no se puede establecer una propiedad única de automatización para cada elemento de lista enlazado a datos utilizando enlace a datos.Establecer un valor único de automatización Properties.Name es suficiente en este caso.

[!NOTA]

Con este enfoque, el contenido interno del elemento de lista también se puede establecer en una cadena en la clase de empleados a través del enlace.Como se muestra en el ejemplo, al control de botón dentro de cada elemento de lista se le asigna un identificador único de automatización que es el id. de empleado.

Employee[] employees = new Employee[] 
{
   new Employee("john", "4384"),
   new Employee("margaret", "7556"),
   new Employee("richard", "8688"),
   new Employee("george", "1293")
};

listBox1.ItemsSource = employees;

public override string ToString()
{
    return EmployeeName + EmployeeID; // Unique Identification to be set as the AutomationProperties.Name
}

Usar una plantilla de control

Puede utilizar una plantilla de control para que cada instancia de un tipo específico obtenga una propiedad única de automatización cuando se define en el código.Debe crear la plantilla para que AutomationProperty enlace a un identificador único en la instancia del control.El XAML siguiente muestra un enfoque para crear este enlace con una plantilla de control.

<Style x:Key="MyButton" TargetType="Button">
<Setter Property="Template">
   <Setter.Value>
<ControlTemplate TargetType="Button">
   <Grid>
      <CheckBox HorizontalAlignment="Left" AutomationProperties.AutomationId="{TemplateBinding Content}"></CheckBox>
      <Button Width="90" HorizontalAlignment="Right" Content="{TemplateBinding Content}" AutomationProperties.AutomationId="{TemplateBinding Content}"></Button>
   </Grid>
</ControlTemplate>
   </Setter.Value>
</Setter>
</Style>

Al definir dos instancias de un botón mediante esta plantilla de control, el id. de automatización se establece en la cadena de contenido única para los controles de la plantilla, como se muestra en el código XAML siguiente.

<Button Content=”Button1” Style="{StaticResource MyButton}" Width="140"/>
<Button Content=”Button2” Style="{StaticResource MyButton}" Width="140"/>

Controles dinámicos

Si tiene controles creados dinámicamente desde el código en lugar de estáticamente o a través de las plantillas de los archivos XAML, debe establecer el contenido o las propiedades de dominio para el control.Esto garantiza que cada control dinámico tiene una propiedad única de automatización.Por ejemplo, si tiene una casilla que debe mostrarse cuando se selecciona un elemento de lista, puede establecer estas propiedades, como se muestra aquí:

private void CreateCheckBox(string txt, StackPanel panel)
   {
      CheckBox cb = new CheckBox();
      cb.Content = txt; // Sets the AutomationProperties.Name
      cb.Height = 50;
      cb.Width = 100;
      cb.Name = "DynamicCheckBoxAid"+ txt; // Sets the AutomationProperties.AutomationId
      panel.Children.Add(cb);
    }

Vea también

Conceptos

Probar aplicaciones de la Tienda Windows con pruebas de IU codificadas