Establecer una propiedad única de automatización para controles UWP para pruebasSet a Unique Automation Property for UWP Controls for Testing

Si desea ejecutar pruebas de IU codificadas para la aplicación para UWP basada en XAML, debe tener una propiedad única de automatización que identifique cada control.If you want to run coded UI tests for your XAML-based UWP application, you must have a unique automation property that identifies each control.

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. Aquí se indica cómo asignar esta propiedad única de automatización en las situaciones siguientes:Here's how to assign this unique automation property in the following situations:

Usar métodos para asignar una propiedad única de automatizaciónUse methods to assign a unique automation property

Definición estática XAMLStatic XAML definition

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.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 following examples. 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 para el control.Set the 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 para el control.Set the 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 explícitamente en el código XAML para el control.Set the 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 explícitamente en el código XAML para el 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 propiedades únicas de automatización mediante Visual Studio o Blend para Visual StudioAssign unique automation properties using Visual Studio or Blend for 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.You can use Visual Studio or Blend for Visual Studio to assign unique names to interactive elements such as buttons, list boxes, combo boxes and text boxes. Esto proporciona al control un valor único para AutomationProperties.Name.This gives the control a unique value for AutomationProperties.Name.

Visual Studio: en el menú Herramientas, apunte a Opciones y seleccione Editor de texto, XAML y Varios.Visual Studio: On the Tools menu, point to Options and then choose Text Editor, then XAML, and finally Miscellaneous.

Seleccione Asignar nombre automáticamente a los elementos interactivos cuando se creen y después haga clic en Aceptar.Select Automatically name interactive elements on creation and then choose OK.

Otras opciones de XAMLXAML Miscellaneous options

Blend para Visual Studio: use uno de los métodos siguientes para realizar esta acción desde Blend para Visual Studio.Blend for Visual Studio: Use one of the following methods to do this from Blend for Visual Studio.

Nota

Solo puede usar este método para los controles que se crean estáticamente mediante XAML.You can only use this method for controls that are created statically using XAML.

Para asignar un nombre único a los controles existentesTo give a unique name to existing controls

En el menú Herramientas, seleccione Asignar nombre a elementos interactivos, como se muestra aquí:On the Tools menu, choose Name Interactive Elements, as shown here:

Seleccionar Asignar nombre a elementos interactivos en el menú HerramientasChoose Name Interactive Elements from Tools menu

Para asignar automáticamente un nombre único a los controles que se creanTo automatically give a unique name to controls that you create

En el menú Herramientas, apunte a Opciones y seleccione Proyecto.On the Tools menu, point to Options, and then choose Project. Seleccione Asignar nombre automáticamente a los elementos interactivos cuando se creen y después haga clic en Aceptar, como se muestra aquí:Select Automatically name interactive elements on creation and then choose OK, as shown here:

Establecer el proyecto para asignar nombre a los elementos interactivosSet project to name interactive elements

Usar una plantilla de datosUse a data template

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


<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.You can also use a template with ItemContainerStyle to bind the values to variables by using the following XAML.


      <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.For both of these examples, you must then override the ToString() method of ItemSource, as shown using the following code. 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.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. Establecer un valor único de automatización Properties.Name es suficiente en este caso.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. Debe crear la plantilla para que AutomationProperty enlace a un identificador único en la instancia del control.You must create the template so that the AutomationProperty binds to a unique ID in the control instance. El XAML siguiente 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 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.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. Esto garantiza que cada control dinámico tiene una propiedad única de automatización.This 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

Comprobar aplicaciones para Windows UWP con pruebas de IU codificadasTest Windows UWP Apps with Coded UI Tests