Compartilhar via


Definir uma propriedade de automação exclusiva para controles da Windows Store para teste

Se você desejar executar testes codificados da interface do usuário para seu aplicativo baseado XAML- do Windows Store, você deve ter uma propriedade exclusiva de automação que identifica cada controle.

Você pode atribuir uma propriedade exclusiva de automação com base no tipo de controle XAML em seu aplicativo.Veja como atribuir essa propriedade exclusiva de automação nas seguintes situações:

  • Definição estático XAML de controles

  • Atribuir propriedades exclusivas de automação usando o Visual Studio ou misture-as para Visual Studio

  • Use um DataTemplate

  • Use um modelo de controle

  • Controles dinâmicos

Use métodos para atribuir uma propriedade exclusiva de automação

Definição estático XAML

Para especificar uma propriedade exclusiva de automação para um controle que é definido no arquivo XAML, você pode definir o AutomationProperties.AutomationId ou o AutomationProperties.Name implícita ou explicitamente, como mostrado nos exemplos.Definir qualquer um desses valores da ao controle uma propriedade exclusiva de automação que pode ser usado para identificar o controle quando você cria uma gravação codificado de teste ou da ação de interface do usuário.

Defina a propriedade implicitamente

Definir o AutomationProperties.AutomationId a ButtonX usando a propriedade de nome em XAML para o controle.

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

Definir o AutomationProperties.Name a ButtonY usando a propriedade de conteúdo em XAML para o controle.

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

Defina a propriedade explicitamente

Definir o AutomationProperties.AutomationId a ButtonX explicitamente em XAML para o controle.

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

Definir o AutomationProperties.Name a ButtonY explicitamente em XAML para o controle.

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

Atribuir propriedades exclusivas de automação usando o Visual Studio ou misture-as para Visual Studio

Você pode usar o Visual Studio ou misturar-se para que o Visual Studio atribua nomes exclusivos para elementos interativos como os botões, as caixas de listagem, as caixas de combinação e as caixas de texto.Isso fornece ao controle um valor exclusivo para AutomationProperties.Name.

Visual Studio: No menu de Ferramentas , aponte para Opções e escolha Editor de Texto, em XAMLe, finalmente Diversos.

Nomear automaticamente os elementos interativos na criação Selecione e escolha OK.

Opções diversas XAML

Use um de**Blend para o Visual Studio:   **dos seguintes métodos para fazer isso Blend do Visual Studio.

ObservaçãoObservação

Você só pode usar esse método para os controles que são criados estaticamente usando XAML.

Para fornecer um nome exclusivo para controles existentes

No menu de Ferramentas , escolha Nomear elementos interativos, como mostrado a seguir:

Escolha nomes de elementos interativos no menu Ferramentas

Para conceder automaticamente um nome exclusivo para controles que você cria

No menu de Ferramentas , aponte para Opções, e escolha Projeto.Nomear automaticamente os elementos interativos na criação Selecione e escolha OK, como mostrado a seguir:

Defina o projeto para nomes de elementos interativos

Use um modelo de dados

Você pode definir um modelo simples usando ItemTemplate para associar os valores em uma caixa de listagem para variáveis usando o seguinte 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>

Você também pode usar um modelo com ItemContainerStyle para associar os valores a variáveis usando o seguinte 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>

Para ambos os exemplos, você deve então substituir o método de ToString() de ItemSource, como mostrado usando-se o código a seguir.Esse código assegura que o valor de AutomationProperties.Name será definido e é exclusivo, pois você não pode definir uma propriedade exclusiva de automação para cada item da lista associado de dados usando a associação.Definir um valor exclusivo para a automação Properties.Name é suficiente nesse caso.

ObservaçãoObservação

Usando essa abordagem, o conteúdo internos do item da lista também podem ser definidos como uma cadeia de caracteres na classe do funcionário na associação.Conforme mostrado no exemplo, o controle de botão em cada item de lista é atribuído um ID exclusivo de automação que é a ID de funcionário

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
}

Use um modelo de controle

Você pode usar um modelo de controle de modo que cada instância de um tipo específico obtenha uma propriedade exclusiva de automação quando é definido no código.Você deve criar o modelo para que o AutomationProperty se associe a uma ID exclusiva na instância do controle.XAML o seguinte demonstra uma abordagem para criar essa associação com um modelo do controle.

<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>

Quando você define duas instâncias de um botão usando esse modelo de controle, a ID de automação está definida como a cadeia de caracteres de conteúdo exclusivo para os controles no modelo, como mostrado no seguinte XAML.

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

Controles dinâmicos

Se você tiver os controles que são criados dinamicamente no seu código e não são criados estática ou pelos modelos em arquivos XAML, você deve definir as propriedades de conteúdo ou do nome do controle.Isso garante que cada controle dinâmico tem uma propriedade exclusiva de automação.Por exemplo, se você tiver uma caixa de seleção que deve ser exibida quando você seleciona um item de lista, você pode definir essas propriedades, como mostrado a seguir:

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);
    }

Consulte também

Conceitos

Testando aplicativos da Windows Store com testes de UI codificados