コード化された UI テストを使用した Windows UWP および 8.1 Phone アプリのテストTest Windows UWP and 8.1 Phone Apps with Coded UI Tests

このチュートリアルでは、モバイル デバイスまたはエミュレーターと XAML ベースの Phone 8.1 アプリで実行される UWP アプリの UI テストを作成します。Use this walkthrough for creating UI tests for UWP apps that run on mobile device or emulators and XAML-based Phone 8.1 apps.

簡単な Windows Phone アプリの作成Create a simple Windows Phone app

  1. Visual C# または Visual Basic テンプレートを使用して、空の Windows Phone アプリ用の新しいプロジェクトを作成します。Create a new project for a blank Windows Phone app using either Visual C# or Visual Basic template.

    新しい Windows Phone アプリを作成するCreate a new Windows Phone app

  2. ソリューション エクスプローラーで、MainPage.xaml を開きます。In Solution Explorer, open MainPage.xaml. ツールボックスから、ボタン コントロールとテキスト ボックス コントロールをデザイン サーフェイスにドラッグします。From the Toolbox, drag a button control and a textbox control to the design surface.

    MainPage.xaml へコントロールを追加するAdd contols to MainPage.xaml

  3. [プロパティ] ウィンドウで、このボタン コントロールに名前を付けます。In the Properties window, name the button control.

    ボタン コントロールに名前を付けるName the button control

  4. テキスト ボックス コントロールに名前を付けます。Name the textbox control.

    TextBox コントロールに名前を付けるName the textbox control

  5. デザイナー画面でボタン コントロールをダブルクリックし、次のコードを追加します。On designer surface, double-click the button control and add the following code:

    private void button_Click_1(object sender, RoutedEventArgs e)  
    {  
        this.textBox.Text = this.button.Name;  
    }  
    
    Public NotInheritable Class MainPage  
        Inherits Page  
    
        Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles Button.Click  
            Me.textBox.Text = Me.button.Name  
        End Sub  
    End Class  
    
  6. F5 キーを押してエミュレーターで Windows Phone アプリを実行し、アプリが機能することを確認します。Press F5 to run your Windows Phone app in the emulator and verify that it's working.

    Windows Phone アプリを実行するRun the Windows Phone app

  7. エミュレーターを終了します。Exit the emulator.

Windows Phone アプリの配置Deploy the Windows Phone app

  1. コード化された UI テストでアプリのコントロールをマップするには、その前に、アプリを配置する必要があります。Before a coded UI test can map an app's controls, you have to deploy the app.

    Windows Phone アプリを配置するDeploy the Windows Phone app

    エミュレーターが開始します。The emulator starts. これで、テストに対してアプリを使用できるようになりました。The app is now available for testing.

    アプリがエミュレータに配置されましたApp deployed on emulator

    コード化された UI テストを作成する間は、エミュレーターを実行中のままにしてください。Keep the emulator running while you create your coded UI test.

Windows Phone アプリのコード化された UI テストの作成Create a coded UI test for the Windows Phone app

ユニバーサル Windows プラットフォーム (UWP) アプリ用のコード化された UI テストは、どのようにして作成できますか?How do I create coded UI tests for Universal Windows Platform (UWP) apps?

  1. Windows Phone アプリを使用するソリューションに、新しいコード化された UI テスト プロジェクトを追加します。Add a new coded UI test project to the solution with the Windows Phone app.

    Windows Phone 用のコード化された UI テストを新規作成するCreate new coded UI  test for Windows Phone

  2. 十字線ツールを使用して UI マップを編集することを選択します。Choose to edit the UI map using the cross-hair tool.

    十字線ツールを使用してコード化された UI テストを生成するGenerate coded UI test using cross-hair tool.

  3. 十字線ツールを使用してアプリを選択してから、アプリの [AutomationId] プロパティの値をコピーします。この値は後で、テストでアプリを起動するために使用します。Use the cross-hair tool to select the app, then copy the value for the app's AutomationId property, which will be used later to start the app in the test.

    アプリの AutomationId 値をコピーするCopy the app's AutomationId value

  4. エミュレーターでアプリを起動し、十字線ツールを使用してボタン コントロールを選択します。In the emulator, start the app and use the cross-hair tool to select the button control. 次に、ボタン コントロールを UI コントロール マップに追加します。Then add the button control to the UI control map.

    十字線ツールを使用してコントロールをマップするUse the cross-hair tool to map controls

  5. テキスト ボックス コントロールを UI コントロール マップに追加するには、前の手順を繰り返します。To add the textbox control to the UI control map, repeat the previous step.

    十字線ツールを使用して TextBox コントロールをマップするUse the cross-hair tool and map textbox control

  6. コードを生成して、UI コントロール マップの変更に対応するコードを作成します。Generate code to create code for changes to the UI control map.

    ビルダーからコードを生成するGenerate code from the builder

  7. 十字線ツールを使用してテキスト ボックス コントロールを選択し、 [Text] プロパティを選択します。Use the cross-hair tool to select the textbox control, and then select the Text property.

    [テキスト] プロパティを選択するSelect the Text property

  8. アサーションを追加します。Add an assertion. これは、値が正しいことを確認するためにテストで使用されます。It will be used in the test to verify that the value is correct.

    テストへアサーション追加するAdd assertion to the test

  9. Assert メソッドのコードを追加および生成します。Add and generate code for the assert method.

    アサーションのコードを生成するGenerate code for the assertion

  10. Visual C#Visual C#

    ソリューション エクスプローラーで、UIMap.Designer.cs ファイルを開いて、Assert メソッドとコントロール用に追加したコードを表示します。In Solution Explorer, open the UIMap.Designer.cs file to view the code you just added for the assert method and the controls.

    Visual BasicVisual Basic

    ソリューション エクスプローラーで、CodedUITest1.vb ファイルを開きます。In Solution Explorer, open the CodedUITest1.vb file. CodedUITestMethod1() テスト メソッドのコードで、アサーション メソッド (自動的に追加された Me.UIMap.AssertMethod1() ) への呼び出しを右クリックし、 [定義へ移動]を選択します。In the CodedUITestMethod1() test method code, right-click the call to the assertion method that was automatically added Me.UIMap.AssertMethod1() and choose Go To Definition. これにより、コード エディターで UIMap.Designer.vb ファイルが開かれて、Assert メソッドとコントロール用に追加したコードを確認できます。This will open the UIMap.Designer.vb file in the code editor so you can view the code you added for the assert method and the controls.

    警告

    UIMap.designer.cs または UIMap.Designer.vb ファイルを直接変更しないでください。Do not modify the UIMap.designer.cs or UIMap.Designer.vb file directly. そうすると、ファイルへの変更はテストが生成されるたびにオーバーライドされます。If you do this, the changes to the file will be overwritten each time the test is generated.

    Assert メソッドAssert method

    public void AssertMethod1()  
    {  
        #region Variable Declarations  
        XamlEdit uITextBoxEdit = this.UIApp1Window.UITextBoxEdit;  
        #endregion  
    
        // Verify that the 'Text' property of 'textBox' text box equals 'button'  
        Assert.AreEqual(this.AssertMethod1ExpectedValues.UITextBoxEditText, uITextBoxEdit.Text);  
    }  
    
    Public Sub AssertMethod1()  
        Dim uITextBoxEdit As XamlEdit = Me.UIApp1Window.UITextBoxEdit  
    
        'Verify that the 'Text' property of 'textBox' text box equals 'button'  
        Assert.AreEqual(Me.AssertMethod1ExpectedValues.UITextBoxEditText, uITextBoxEdit.Text)  
    End Sub  
    

    コントロールControls

    #region Properties  
    public virtual AssertMethod1ExpectedValues AssertMethod1ExpectedValues  
    {  
        get  
        {  
            if ((this.mAssertMethod1ExpectedValues == null))  
            {  
                this.mAssertMethod1ExpectedValues = new AssertMethod1ExpectedValues();  
            }  
            return this.mAssertMethod1ExpectedValues;  
        }  
    }  
    
    public UIApp1Window UIApp1Window  
    {  
        get  
        {  
            if ((this.mUIApp1Window == null))  
            {  
                this.mUIApp1Window = new UIApp1Window();  
            }  
            return this.mUIApp1Window;  
        }  
    }  
    #endregion  
    
    #region Fields  
    private AssertMethod1ExpectedValues mAssertMethod1ExpectedValues;  
    
    private UIApp1Window mUIApp1Window;  
    #endregion  
    
    #Region "Properties"  
    Public ReadOnly Property UIButtonButton() As XamlButton  
        Get  
            If (Me.mUIButtonButton Is Nothing) Then  
                Me.mUIButtonButton = New XamlButton(Me)  
                Me.mUIButtonButton.SearchProperties(XamlButton.PropertyNames.AutomationId) = "button"  
            End If  
            Return Me.mUIButtonButton  
        End Get  
    End Property  
    
    Public ReadOnly Property UITextBoxEdit() As XamlEdit  
        Get  
            If (Me.mUITextBoxEdit Is Nothing) Then  
                Me.mUITextBoxEdit = New XamlEdit(Me)  
                Me.mUITextBoxEdit.SearchProperties(XamlEdit.PropertyNames.AutomationId) = "textBox"  
            End If  
            Return Me.mUITextBoxEdit  
        End Get  
    End Property  
    #End Region  
    
    #Region "Fields"  
    Private mUIButtonButton As XamlButton  
    
    Private mUITextBoxEdit As XamlEdit  
    #End Region  
    
  11. ソリューション エクスプローラーで、CodedUITest1.cs ファイルまたは CodedUITest1.vb ファイルを開きます。In Solution Explorer, open the CodedUITest1.cs or CodedUITest1.vb file. これで、テストを実行する必要がある操作の CodedUTTestMethod1 メソッドにコードを追加できます。You can now add code to the CodedUTTestMethod1 method for the actions needed to run the test. UIMap に追加したコントロールを使用して、次のコードを追加します。Use the controls that were added to the UIMap to add code:

    1. 前にクリップボードにコピーしたオートメーション ID プロパティを使用して、Windows Phone アプリを起動します。Launch the Windows Phone app using the automation ID property you copied to the clipboard previously:

      XamlWindow myAppWindow = XamlWindow.Launch("ed85f6ff-2fd1-4ec5-9eef-696026c3fa7b_cyrqexqw8cc7c!App");  
      
      XamlWindow.Launch("ed85f6ff-2fd1-4ec5-9eef-696026c3fa7b_cyrqexqw8cc7c!App");  
      
    2. ボタン コントロールをタップするジェスチャを追加します。ボタン コントロールをタップするジェスチャを追加します。Add a gesture to tap the button control:

      Gesture.Tap(this.UIMap.UIApp1Window.UIButtonButton);  
      
      Gesture.Tap(Me.UIMap.UIApp1Window.UIButtonButton)  
      
    3. 自動的に生成された Assert メソッドへの呼び出しが、アプリの起動とボタンのタップ ジェスチャの後にあることを確認します。Verify that the call to the assert method that was automatically generated comes after launching the app and tap gesture on the button:

      this.UIMap.AssertMethod1();  
      
      Me.UIMap.AssertMethod1()  
      

      コードを追加すると、CodedUITestMethod1 テスト メソッドは次のようになります。After the code is added, the CodedUITestMethod1 test method should appear as follows:

    [TestMethod]  
    public void CodedUITestMethod1()  
    {  
        // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.  
    
        // Launch the app.  
        XamlWindow myAppWindow = XamlWindow.Launch("ed85f6ff-2fd1-4ec5-9eef-696026c3fa7b_cyrqexqw8cc7c!App");  
    
        // Tap the button.  
        Gesture.Tap(this.UIMap.UIApp1Window.UIButtonButton);  
    
        this.UIMap.AssertMethod1();  
    }  
    
    <CodedUITest>  
    Public Class CodedUITest1  
    
        <TestMethod()>  
        Public Sub CodedUITestMethod1()  
            '              
            ' To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.  
            '  
            ' Launch the app.  
            XamlWindow.Launch("ed85f6ff-2fd1-4ec5-9eef-696026c3fa7b_cyrqexqw8cc7c!App")  
    
            '// Tap the button.  
            Gesture.Tap(Me.UIMap.UIApp1Window.UIButtonButton)  
    
            Me.UIMap.AssertMethod1()  
        End Sub  
    

コード化された UI テストの実行Run the coded UI test

  1. テストをビルドし、テスト エクスプローラーを使用してテストを実行します。Build your test and then run the test using the test explorer.

    テスト エクスプローラーをビルド/実行するBuild and run the test using Test Explorer

    Windows Phone アプリが起動し、ボタンをタップする操作が完了し、Assert メソッドを使用してテキスト ボックスの Text プロパティが設定され、検証されます。The Windows Phone app launches, the action to tap the button is completed, and the textbox's Text property is populated and validated using the assert method.

    Winodws Phone のテストを実行するRunning Winodws Phone test

    テストの完了後、テストの成功を示す確認メッセージがテスト エクスプローラーに表示されます。After the test is finished, the test explorer confirms that the test passed.

    テスト エクスプ ローラーの結果Test Explorer results

Windows Phone アプリでのデータ ドリブンのコード化された UI テストの使用Use Data-driven coded UI tests on Windows Phone apps

異なる条件をテストするために、異なるデータ セットを使用して、コード化された UI テストを複数回実行できます。To test different conditions, a coded UI test can be run multiple times with different sets of data.

Windows Phone 用のデータ ドリブンのコード化された UI テストは、テスト メソッドで DataRow 属性を使用して定義します。Data-driven Coded UI tests for Windows Phone are defined using the DataRow attribute on a test method. 次の例で、x および y に使用する値は、テストの最初のイテレーションでは 1 と 2、2 番目のイテレーションでは -1 と -2 です。In the following example, x and y use the values of 1 and 2 for the first iteration and -1 and -2 for the second iteration of the test.

[DataRow(1, 2, DisplayName = "Add positive numbers")]  
[DataRow(-1, -2, DisplayName = "Add negative numbers")]  
[TestMethod]  
public void DataDrivingDemo_MyTestMethod(int x, int y)  

Q & AQ & A

Q: UI コントロールをマップするには、Windows Phone アプリをエミュレーターに配置する必要がありますか?Q: Do I have to deploy the Windows Phone app in the emulator in order to map UI controls?

A: はい、その必要があります。コード化された UI テスト ビルダーでは、エミュレーターが実行中であること、そしてエミュレーターにアプリが配置されていることが要件となります。A: Yes, the coded UI test builder requires that an emulator be running and the app be deployed to it. そうでないと、実行中のエミュレーターが見つからないことを通知するエラー メッセージがスローされます。Otherwise, it will throw an error message saying that no running emulator could be found.

Q: テストを実行できるのはエミュレーターだけですか? 物理デバイスを使用することもできますか?Q: Can tests be executed on the emulator only, or can I also use a physical device?

A: どちらのオプションもサポートされています。A: Either option is supported. テストの実行ターゲットを選択するには、エミュレーター タイプを変更するか、デバイスのツールバーでデバイスを選択します。The target for test execution is selected by changing the emulator type or selecting device in the device toolbar. [デバイス] を選択する場合、Phone Blue デバイスがコンピューターのいずれかの USB ポートに接続されている必要があります。If Device is selected, a Phone Blue device needs to be connected to one of the machine's USB ports.

エミュレータのバージョンまたは物理デバイスを選択するSelect the emulator version, or physcial device

Q: [コード化された UI テスト] ダイアログの [コードの生成] に、コード化された UI テストを記録するオプションが表示されないのはなぜですか?Q: Why don't I see the option to record my coded UI test in the Generate Code for a Coded UI Test dialog?

A: 記録するオプションは、Windows Phone アプリではサポートされません。A: The option to record is not supported for Windows Phone apps.

Q: WinJS、Silverlight、または HTML5 ベースの Windows Phone アプリ用に、コード化された UI テストを作成することはできますか?Q: WinJS、Silverlight、または HTML5 ベースの Windows Phone アプリ用に、コード化された UI テストを作成することはできますか?Q: Can I create a coded UI test for my Windows Phone apps based on WinJS, Silverlight or HTML5?

A: いいえ、XAML ベースのアプリだけがサポートされます。A: No, only XAML based apps are supported.

Q: Windows 8.1 または Windows 10 が実行されていないシステムで、Windows Phone アプリのコード化された UI テストを作成できますか?Q: Can I create coded UI tests for my Windows Phone apps on a system that is not running Windows 8.1 or Windows 10?

A: いいえ、できません。コード化された UI テスト プロジェクトのテンプレートは、Windows 8.1 および Windows 10 でのみ使用できます。A: No, the Coded UI Test Project templates are only available on Windows 8.1 and Windows 10. ユニバーサル Windows プラットフォーム (UWP) アプリ用にオートメーションを作成するには、Windows 10 が必要です。To create automation for Universal Windows Platform (UWP) apps, you'll need Windows 10.

Q: ユニバーサル Windows プラットフォーム (UWP) アプリ用のコード化された UI テストは、どのようにして作成できますか?Q: How do I create coded UI tests for Universal Windows Platform (UWP) apps?

A: コード化された UI テスト プロジェクトは、UWP アプリをテストしているプラットフォームに応じて、次のいずれかの方法で作成します。A: Depending on the platform where you're testing your UWP app, create coded UI test project in one of these ways:

  • ローカル コンピューターで実行している UWP アプリは、UWP アプリとして実行されます。A UWP app running on local machine will run as a UWP app. このアプリをテストする場合、 コード化された UI テスト プロジェクト (Windows) のテンプレートを使用します。To test this, you must use the Coded UI Test Project (Windows) template. 新しいプロジェクトの作成時にこのテンプレートを検索するには、 [Windows][ユニバーサル] ノードに移動します。To find this template when you create a new project, go to the Windows, Universal node. あるいは、 [Windows][Windows 8][Windows] ノードに移動します。Or go to the Windows, Windows 8, Windows node.

  • モバイル デバイスまたはエミュレーターで実行している UWP アプリは、Phone アプリケーションとして実行されます。A UWP app running on mobile device or emulator will run as a Phone app. このアプリをテストする場合、 コード化された UI テスト プロジェクト (Windows Phone) のテンプレートを使用します。To test this, you must use the Coded UI Test Project (Windows Phone) template. 新しいプロジェクトの作成時にこのテンプレートを検索するには、 [Windows][ユニバーサル] ノードに移動します。To find this template when you create a new project, go to the Windows, Universal node. あるいは、 [Windows][Windows 8][Windows Phone] ノードに移動します。Or go to the Windows, Windows 8, Windows Phone node.

    プロジェクトを作成した後も、テストの作成は以前と同じままになります。After you create the project, authoring a test stays the same as before.

Q: エミュレーターにはないコントロールを選択することはできますか?Q: Can I select controls that are outside the emulator?

A: いいえ、できません。そのようなコントロールは、ビルダーで検出されません。A: No, the builder will not detect them.

Q: 物理的な電話デバイスを使用して、コード化された UI テスト ビルダーを使ってコントロールをマップすることはできますか?Q: Can I use the coded UI test builder to map controls using a physical phone device?

A: いいえ、できません。ビルダーが UI 要素をマップできるのは、アプリがエミュレーターに配置されている場合のみです。A: No, The builder can only map UI elements if your app has been deployed to the emulator.

Q: UIMap.Designer ファイルでコードを変更できないのはなぜですか?Q: Why can't I modify the code in the UIMap.Designer file?

A: UIMapDesigner.cs ファイルでコードを変更しても、[UIMap - コード化された UI テスト ビルダー] を使用してコードを生成するたびに変更が上書きされます。A: Any code changes you make in the UIMapDesigner.cs file will be overwritten every time you generate code using the UIMap - Coded UI Test Builder. 記録されたメソッドを変更する必要がある場合は、メソッドを UIMap.cs ファイルにコピーし、メソッド名を変更する必要があります。If you have to modify a recorded method, you must copy it to UIMap.cs file and rename it. UIMap.cs ファイルを使用すると、UIMapDesigner.cs ファイルのメソッドやプロパティをオーバーライドできます。The UIMap.cs file can be used to override methods and properties in the UIMapDesigner.cs file. Coded UITest.cs ファイルの元のメソッドへの参照を削除し、変更したメソッド名に置き換える必要があります。You must remove the reference to the original method in the Coded UITest.cs file and replace it with the renamed method name.

Q: コマンド ラインから、コード化された UI テストを Windows Phone アプリで実行することはできますか?Q: Can I run a coded UI test on my Windows Phone app from the command-line?

A: はい、できます。 runsettings ファイルを使用して、テストを実行するターゲット デバイスを指定できます。A: Yes, you use a runsettings file to specify the target device for test execution. 例:For example:

vstest.console.exe "pathToYourCodedUITestDll" /settings:devicetarget.runsettingsvstest.console.exe "pathToYourCodedUITestDll" /settings:devicetarget.runsettings

サンプル runsettings ファイル:Sample runsettings file:

<?xml version="1.0" encoding="utf-8"?>  
<RunSettings>  
<MSPhoneTest>  
<!--to specify test execution on device, use a TargetDevice option as follows-->  
<TargetDevice>Device</TargetDevice>  
<!--to specify an emulator instead, use a TargetDevice option like below-->  
<!--<TargetDevice>Emulator 8.1 WVGA 4 inch 512MB</TargetDevice>-->  
</MSPhoneTest>  
</RunSettings>  

Q: XAML ベースの UWP アプリと Windows Phone アプリでは、コード化された UI テストにどのような違いがありますか?Q: What are the differences between coded UI tests for XAML-based UWP apps and Windows Phone apps?

A: 次のように、いくつかの重要な違いがあります。A: These are some of the key differences:

機能Feature UWP アプリUWP apps Windows Phone アプリWindows Phone apps
テストの実行ターゲットTarget for running tests ローカルまたはリモート コンピューター。Local or remote computer. リモート コンピューターを指定できるのは、自動テスト ケースを使用してテストを実行する場合です。Remote computers can be specified when you use an automated test case to run tests. エミュレーターまたはデバイス。Emulator or device. このトピックの「 Q: テストを実行できるのはエミュレーターだけですか? 物理デバイスを使用することもできますか? 」を参照してください。See, Q: Can tests be executed on the emulator only, or can I also use a physical device? in this topic.
コマンド ラインからの実行Execute from the command-line ターゲットを指定するのに設定ファイルは必要ありません。Settings file not required to specify target. ターゲットを指定するには runsettings ファイルが必要です。Runsettings file required to specify target.
シェル コントロールに特化されたクラスSpecialized classes for Shell Controls Microsoft.VisualStudio.TestTools.UITesting.DirectUIControls.DirectUIControl UITestControl
XAML アプリの WebView コントロールWebView control in a XAML app Html* に特化されたクラスを使用して HTML 要素を操作する場合はサポートされます。Supported if you use Html* specialized classes to interact with HTML elements. Microsoft.VisualStudio.TestTools.UITesting.HtmlControls」を参照してください。See Microsoft.VisualStudio.TestTools.UITesting.HtmlControls. サポートされていません。Not supported.
MTM からの自動テストの実行Execute automated tests from MTM サポートされています。Supported. サポートされていません。Not supported.
データ ドリブン テストData-driven tests 外部データ ソースの使用およびテスト メソッドでの DataSource 属性の使用については、「 データ ドリブン テスト 」を参照してください。See Data-driven tests for information about using external data-sources and using DataSource attribute on a test method. データは、テスト メソッドの DataRow 属性を使用して、インラインで指定されます。Data is specified inline, using DataRow attribute on a test method. このトピックの「 Windows Phone アプリでのデータ ドリブンのコード化された UI テストの使用 」を参照してください。See Use Data-driven coded UI tests on Windows Phone apps in this topic.

UWP アプリのコード化された UI テストについては、「コード化された UI テストを使用して Windows UWP アプリをテストする」を参照してください。For information about coded UI tests for UWP apps, see Test Windows UWP Apps with Coded UI Tests.

外部リソースExternal resources

Microsoft Visual Studio アプリケーション ライフサイクル管理ブログ: コード化された UI を使用して XAML ベースの Windows Phone アプリをテストするMicrosoft Visual Studio Application Lifecycle Management blog: Using Coded UI to test XAML-based Windows Phone apps

参照See Also

UI オートメーションを使用してコードをテストするUse UI Automation To Test Your Code