Establecer una propiedad única de automatización para controles UWP para pruebasSet a unique automation property for UWP controls for testing

Si quiere ejecutar pruebas automatizadas de IU para la aplicación para UWP basada en XAML, cada control se debe identificar mediante una propiedad única de automatización.If you want to run coded UI tests for your XAML-based UWP application, each control must be identified by a unique automation property. Puede asignar una propiedad única de automatización basada en el tipo de control de XAML de la aplicación.You can assign a unique automation property based on the type of XAML control in your application.

Definición estática XAMLStatic XAML definition

Para especificar una propiedad única de automatización para un control definido en el archivo XAML, puede establecer AutomationProperties.AutomationId o AutomationProperties.Name de forma implícita o explícita, como se muestra en los ejemplos siguientes.To specify a unique automation property for a control that is defined in your XAML file, you can set the AutomationProperties.AutomationId or AutomationProperties.Name implicitly or explicitly, as shown in the examples that follow. 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.Setting either of these values gives the control a unique automation property that can be used to identify the control when you create a coded UI test or action recording.

Establecer la propiedad implícitamenteSet the property implicitly

Establezca AutomationProperties.AutomationId en ButtonX mediante la propiedad Name en el código XAML del control.Set AutomationProperties.AutomationId to ButtonX using the Name property in the XAML for the 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 mediante la propiedad Content en el código XAML del control.Set AutomationProperties.Name to ButtonY using the Content property in the XAML for the control.

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

Establecer la propiedad explícitamenteSet the property explicitly

Establezca AutomationProperties.AutomationId en ButtonX de forma explícita en el código XAML del control.Set AutomationProperties.AutomationId to ButtonX explicitly in the XAML for the 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 de forma explícita en el código XAML del control.Set the AutomationProperties.Name to ButtonY explicitly in the XAML for the control.

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

Asignar nombres únicosAssign unique names

En Blend para Visual Studio, se puede seleccionar una opción para asignar nombres únicos a elementos interactivos como botones, cuadros de lista, cuadros combinados y cuadros de texto, lo que proporciona los valores únicos de controles para AutomationProperties.Name.In Blend for Visual Studio, you can select an option to assign unique names to interactive elements such as buttons, list boxes, combo boxes, and text boxes, which gives the controls unique values for AutomationProperties.Name.

Para asignar nombres únicos a los controles existentes, seleccione Herramientas > Asignar nombre a elementos interactivos.To assign unique names to existing controls, select Tools > Name Interactive Elements.

Asignar nombre a elementos interactivos en Blend para Visual Studio

Para asignar automáticamente nombres únicos a los nuevos controles que agregue, seleccione Herramientas > Opciones para abrir el cuadro de diálogo Opciones.To automatically give unique names to new controls that you add, select Tools > Options to open the Options dialog. Seleccione Diseñador XAML y después Asignar nombre automáticamente a los elementos interactivos cuando se creen.Select XAML Designer and then select Automatically name interactive elements on creation. Haga clic en Aceptar para cerrar el cuadro de diálogo.Select OK to close the dialog box.

Usar plantillas de datosUse a data template

Puede definir una plantilla sencilla mediante ItemTemplate para enlazar los valores de un cuadro de lista con variables:You can define a simple template using ItemTemplate to bind the values in a list box to variables:

<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 se puede usar una plantilla con ItemContainerStyle para enlazar los valores a las variables:You can also use a template with ItemContainerStyle to bind the values to variables:

<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 ejemplo de código siguiente.For both of these examples, you must then override the ToString() method of ItemSource, as shown using the code example that follows. 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 mediante el enlace.This code makes sure that the AutomationProperties.Name value is set and is unique, because you cannot set a unique automation property for each data-bound list item using binding. En este caso, es suficiente con establecer un valor único para Automation Properties.Name.Setting a unique value for the Automation Properties.Name is sufficient in this case.

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.Using this approach, the inner contents of the list item can also be set to a string in the Employee class through binding. 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.As shown in the example, the button control inside each list item is assigned a unique automation id, which is the Employee ID.

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 controlUse a control template

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.You can use a control template so that each instance of a specific type obtains a unique automation property when it is defined in the code. Cree la plantilla para que AutomationProperty enlace a un identificador único en la instancia del control.Create the template so that the AutomationProperty binds to a unique ID in the control instance. En el código XAML siguiente se muestra un enfoque para crear este enlace con una plantilla de control:The following XAML demonstrates one approach to create this binding with a control template:

<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:When you define two instances of a button using this control template, the automation ID is set to the unique content string for the controls in the template, as shown in the following XAML:

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

Controles dinámicosDynamic controls

Si tiene controles que se crean de forma dinámica a partir del código en lugar de estáticamente o a través de las plantillas de los archivos XAML, debe establecer las propiedades Content o Name para el control.If you have controls that are created dynamically from your code and not created statically or through templates in XAML files, you must set the Content or Name properties for the control. Esta acción garantiza que cada control dinámico tiene una propiedad única de automatización.This action makes sure that each dynamic control has a unique automation property. Por ejemplo, si tiene una casilla que debe mostrarse cuando se selecciona un elemento de lista, puede establecer estas propiedades, como se muestra aquí:For example, if you have a check box that must be displayed when you select a list item, you can set these properties, as shown here:

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énSee also