테스트를 위해 UWP 컨트롤에 대한 고유 자동화 속성 설정Set a Unique Automation Property for UWP Controls for Testing

XAML 기반 UWP 스토어 응용 프로그램용 코딩된 UI 테스트를 실행하려는 경우 각 컨트롤을 식별하는 고유한 자동화 속성이 있어야 합니다.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.

응용 프로그램에서 XAML 컨트롤의 형식에 따라 고유한 자동화 속성을 할당할 수 있습니다.You can assign a unique automation property based on the type of XAML control in your application. 다음과 같은 상황에서 이 고유한 자동화 속성을 할당하는 방법은 다음과 같습니다.Here's how to assign this unique automation property in the following situations:

메서드를 사용하여 고유한 자동화 속성 할당Use methods to assign a unique automation property

정적 XAML 정의Static XAML definition

XAML 파일에 정의된 컨트롤에 대한 고유 자동화 속성을 지정하려면 AutomationProperties.AutomationId 또는 AutomationProperties.Name을 다음 예제와 같이 암시적 또는 명시적으로 설정할 수 있습니다.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. 이러한 값 중 하나를 설정하면 코딩된 UI 테스트 또는 작업 기록을 만들 때 컨트롤을 식별하는 데 사용할 수 있는 고유한 자동화 속성을 컨트롤에 부여하게 됩니다.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.

속성을 암시적으로 설정Set the property implicitly

XAML에서 컨트롤에 대한 이름 속성을 사용하여 AutomationProperties.AutomationId를 ButtonX로 설정합니다.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" />  

XAML에서 컨트롤에 대한 콘텐츠 속성을 사용하여 AutomationProperties.Name을 ButtonY로 설정합니다.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" />  

속성을 명시적으로 설정Set the property explicitly

XAML에서 컨트롤에 대해 명시적으로 AutomationProperties.AutomationId를 ButtonX로 설정합니다.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" />  

XAML에서 컨트롤에 대해 명시적으로 AutomationProperties.Name을 ButtonY로 설정합니다.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" />  

Visual Studio 또는 Blend for Visual Studio를 사용하여 고유한 자동화 속성 할당Assign unique automation properties using Visual Studio or Blend for Visual Studio

Visual Studio 또는 Blend for Visual Studio를 사용하여 단추, 목록 상자, 콤보 상자, 텍스트 상자와 같은 대화형 요소에 고유한 이름을 할당할 수 있습니다.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. 이렇게 하면 AutomationProperties.Name에 대한 고유한 값을 컨트롤에 부여하게 됩니다.This gives the control a unique value for AutomationProperties.Name.

Visual Studio: 도구 메뉴에서 옵션을 가리킨 다음 텍스트 편집기, XAML기타를 차례대로 선택합니다.Visual Studio: On the Tools menu, point to Options and then choose Text Editor, then XAML, and finally Miscellaneous.

생성 시 대화형 요소에 자동으로 이름 지정을 선택한 다음 확인을 선택합니다.Select Automatically name interactive elements on creation and then choose OK.

XAML 기타 옵션XAML Miscellaneous options

Blend for Visual Studio: 다음 방법 중 하나를 사용하여 Blend for Visual Studio에서 이 작업을 수행할 수 있습니다.Blend for Visual Studio: Use one of the following methods to do this from Blend for Visual Studio.

참고

XAML을 사용하여 정적으로 만든 컨트롤에 대해서는 이 방법만 사용할 수 있습니다.You can only use this method for controls that are created statically using XAML.

기존 컨트롤에 고유한 이름을 지정하려면To give a unique name to existing controls

도구 메뉴에서 다음과 같이 대화형 요소 이름 지정을 선택합니다.On the Tools menu, choose Name Interactive Elements, as shown here:

도구 메뉴에서 대화형 요소 이름 지정 선택Choose Name Interactive Elements from Tools menu

만드는 컨트롤에 자동으로 고유한 이름을 지정하려면To automatically give a unique name to controls that you create

도구 메뉴에서 옵션을 선택한 다음 프로젝트를 선택합니다.On the Tools menu, point to Options, and then choose Project. 다음과 같이 생성 시 대화형 요소에 자동으로 이름 지정을 선택한 다음 확인을 선택합니다.Select Automatically name interactive elements on creation and then choose OK, as shown here:

대화형 요소 이름을 지정하도록 프로젝트 설정Set project to name interactive elements

데이터 템플릿 사용Use a data template

다음 XAML을 사용하면 ItemTemplate을 사용하여 간단한 템플릿을 정의하고 목록 상자의 값을 변수에 바인딩할 수 있습니다.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>  

또한 다음 XAML을 사용하면 템플릿을 ItemContainerStyle과 함께 사용하여 값을 변수에 바인딩할 수도 있습니다.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>  

그런 다음에는 이 예제 모두에 대해 다음 코드를 사용하여 ItemSource의 ToString() 메서드를 재정의해야 합니다.For both of these examples, you must then override the ToString() method of ItemSource, as shown using the following code. 이 코드는 AutomationProperties.Name 값이 설정되었고 고유한 값임을 확인합니다. 이는 바인딩을 사용하여 각 데이터가 바인딩된 목록 항목에 대해서는 고유한 자동화 속성을 설정할 수 없기 때문입니다.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. 이 경우에는 Automation Properties.Name에 대해 고유한 값을 설정하는 것으로 충분합니다.Setting a unique value for the Automation Properties.Name is sufficient in this case.

참고

이 방법을 사용하면 바인딩을 통해 Employee 클래스의 문자열에 목록 항목의 내부 콘텐츠가 설정될 수도 있습니다.Using this approach, the inner contents of the list item can also be set to a string in the Employee class through binding. 예제에서와 같이 각 목록 항목 안에 있는 단추 컨트롤에는 직원 ID인 고유한 자동화 ID가 할당됩니다.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  
}  

컨트롤 템플릿 사용Use a control template

컨트롤 템플릿을 사용하여 특정 형식의 각 인스턴스가 코드에서 정의될 때 고유한 자동화 속성을 획득하도록 할 수 있습니다.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. 컨트롤 인스턴스에서 AutomationProperty가 고유한 ID에 바인딩되도록 템플릿을 만들어야 합니다.You must create the template so that the AutomationProperty binds to a unique ID in the control instance. 다음 XAML은 컨트롤 템플릿을 사용하여 이 바인딩을 만드는 방법 한 가지를 보여 줍니다.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>  

이 컨트롤 템플릿을 사용하여 단추의 두 인스턴스를 정의할 때 다음 XAML과 같이 템플릿의 컨트롤에 대한 고유한 콘텐츠 문자열에 자동화 ID가 설정됩니다.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"/>  

동적 컨트롤Dynamic controls

사용자 코드에서 동적으로 생성되었으며 XAML 파일에서는 정적으로 또는 템플릿을 통해 생성되지 않은 컨트롤이 있으면 컨트롤의 콘텐츠 또는 이름 속성을 설정해야 합니다.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. 이렇게 하면 각 동적 컨트롤은 고유한 자동화 속성을 갖게 됩니다.This makes sure that each dynamic control has a unique automation property. 예를 들어 목록 항목을 선택하면 표시되어야 하는 확인란이 있는 경우 다음과 같이 이러한 속성을 설정할 수 있습니다.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);  
    }  

참고 항목See Also

코딩된 UI 테스트를 사용하여 Windows UWP 앱 테스트Test Windows UWP Apps with Coded UI Tests