tafuji's blog

C#, Xamarin, Azure DevOps を中心に書いています。

.NET MAUI の UI Test

はじめに

この記事は、.NET MAUI Advent Calendar 2023 の 23日目の記事です。 今回は、.NET MAUI の UI テストの方法について調べたことを書きます。

.NET MAUI の UI テスト方法

二つの方法があるようです。

  • Xamarin.UITest を利用する方法
  • Appium と NUnit を使う方法

Xamarin.UITest を利用する方法

Xamarin のときに提供されていたテストツールです。

.NET MAUI でも動くのか疑問に思ったのですが、GitHub 上にサンプルがありました。 また、Xamarin.UITest の NuGet を確認すると、.NET 6 移行となっているので、利用できそうです。

テストを書く方法ですが、UI テストで操作するコントロールに、 AutomationId を付与し、その値を利用して UI のコントロールを操作することになります。 操作したコントロールに表示された値が正しいかなどを検証するテストフレームワークには、 サンプルでは NUnit が利用されていました。

以下は、サンプルのサイトから抜粋したコードです。

            <Button
                x:Name="CounterBtn"
                Text="Click me"
                SemanticProperties.Hint="Counts the number of times you click"
                Clicked="OnCounterClicked"
                HorizontalOptions="Center"
                AutomationId="IncrementButton" />

Xamarin.UITest を利用して、Xamarin.Forms のコントロールを操作する方法については、過去にこんな記事を書いています。 .NET MAUI のコントロールの場合には、やり方が異なってくるかもしれませんが、参考になれば幸いです。

Appium と NUnit を使う方法

Microsoft Learn のサイトで最近見つけた記事です。 Xamarin.UITest でできなかった、Windows アプリのテストができるということなので、動作させようとしましたが、動きませんでした。 このあたりと関係しそうですが、色々試してみましたが、ダメでした。

Xamairn.UITest と同じように UI テストで操作するコントロールに、 AutomationId を付与して、UI 操作を行うテストコードを書く必要があります。

以下は、サンプルからのコードの抜粋です。

            <Button
                x:Name="CounterBtn"
                AutomationId="CounterBtn"
                Text="Click me"
                SemanticProperties.Hint="Counts the number of times you click"
                Clicked="OnCounterClicked"
                HorizontalOptions="Center" />

ただし、UI コントロールを操作するコードには、 Appium のライブラリを利用する必要があります。

public abstract class BaseTest
{
    protected AppiumDriver App => AppiumSetup.App;

    // This could also be an extension method to AppiumDriver if you prefer
    protected AppiumElement FindUIElement(string id)
    {
        if (App is WindowsDriver)
        {
            return App.FindElement(MobileBy.AccessibilityId(id));
        }

        return App.FindElement(MobileBy.Id(id));
    }
}

コントロールに表示された値などの検証には、サンプルでは NUnit が利用されていました。

おわりに

今回は、.NET MAUI の UI テスト方法について調べたことを、ざっくりと記事にしました。 深い検証や実験まではまだできていないので、時間のあるときに試したみたいと思います。