Appiumを使用したUWPアプリケーションのテスト







現在、UWPアプリケーションは、コード化されたUIインターフェイスを介したテストソリューションとして使用されています。 ただし、複数のプラットフォーム用のアプリケーションがある場合、この場合、各プラットフォーム用のテストを個別に作成する必要があります。



2016年、 Appiumを使用してUWPアプリケーションをテストする可能性が発表されました。 このために、Windows Application Driver(WinAppDriver)と呼ばれるドライバーが作成されました。



Seleniumは、 WebDriver APIを使用して、Webアプリケーションを自動的にテストするために作成されました。 Appiumは、実際にはSelenium for Appsです。



AppiumおよびWinAppDriverを使用して、UWPだけでなくWin32アプリケーションもテストできます(何らかの理由で.NETについては言及されていませんが、テストすることもできます)。 私にとって、いつものように、UWPアプリケーションは最も興味深いものです。



WinAppDriverをインストールする



GitHubリリースページから最新リリースダウンロードする



インストール後、WinAppDriver.exe実行可能ファイルはC:\ Program Files(x86)\ Windows Application Driverディレクトリにあります。このディレクトリからサービスを開始できます。







Appiumをインストールできます。これはWinAppDriverと対話しますが、WinAppDriverをインストールする必要があります。 WinAppDriverはAppiumと一緒にインストールする必要がありますが、執筆時点ではまだいくつかのオーバーレイが存在するため、個別にインストールする必要があります。 念のため、WindowsマシンにAppiumをインストールする方法をネタバレに任せましょう。



npmパッケージマネージャーを使用してWindows 10にAppiumをインストールする方法
Appiumを使用するには、Node.jsバージョン6.0以降およびnpmバージョン3.5以降が必要です

コンソールコマンドを使用してNode.jsのバージョンを確認できます

node –v





Npmバージョン

npm –v





Node.jsインストーラーは公式サイトからダウンロードできます。

インストール中に、npmがインストールされます







インストールされているバージョンが最低限必要なバージョンよりも高い場合、次のコマンドでインストールを開始できます(コマンドラインは管理者として実行する必要があります)。

npm install –g appium





これで、コマンドラインでappiumを実行して、次のメッセージを取得できます。







テスト用のドラフトアプリケーションの作成



簡単なUWPアプリケーションを作成し、すぐにテストします。 アプリケーションでいくつかの簡単な操作、たとえば数の2乗を実行させます。 デモアプリケーションのソースコードはどこよりも単純ではありません。



MainPage.xamlで次を追加します。



 <StackPanel Orientation="Vertical" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <TextBlock Margin="0,25,0,0" TextAlignment="Center"> :</TextBlock> <TextBox AutomationProperties.Name="txtNumber" x:Name="txtNumber" Margin="0,5,0,0" FontSize="18" Width="150"> </TextBox> <TextBlock Margin="0,25,0,0" TextAlignment="Center">:</TextBlock> <TextBox AutomationProperties.Name="txtResult" x:Name="txtResult" TextAlignment="Center" FontSize="18" Width="150"> </TextBox> <Button AutomationProperties.Name="btnGetSquare" x:Name="btnGetSquare" Margin="0,20,0,0" HorizontalAlignment="Center" Click="btnGetSquare_Click">    </Button> </StackPanel>
      
      





MainPage.xaml.csにはイベントが1つだけあります。



 private void btnGetSquare_Click(object sender, RoutedEventArgs e) { double n = Convert.ToDouble(txtNumber.Text); txtResult.Text = (n * n).ToString(); }
      
      





マニフェストから、パッケージファミリ名を保存する必要があります。 テストを書くために必要です。







Debug / AppXフォルダーにあるファイルとappxrecipeから同じ値を取得できます。 値はRegisteredUserModeAppIDに含まれています。



アプリケーションをテストする前に、デプロイする必要があります。 判明したアプリケーションは次のとおりです。







C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ x86ディレクトリにあるinspect.exeユーティリティを使用して、テストで使用する要素の名前を決定できます。



テストするアプリケーションを実行することにより、ツリー内のコントロールを選択するか、アプリケーションウィンドウ内のコントロールをクリックすることもできます。 およそ次の情報を取得します。







通常、要素の検索には、ClassNameとNameの値が使用されます。 IOドライバーを使用すると、AutomationIdによる要素検索を使用できます。



自動テストプロジェクトの作成



Visual Studioで、単体テストのようなプロジェクトを作成します







NuGetパッケージマネージャーでは、操作に必要な依存パッケージと共にAppium.WebDriverを見つけてインストールします。







UWPアプリケーションを使用するには、RemoteWebDriverを使用するか、IOSDriverを使用できます。 ほとんどの場合、最終リリース後、Windowsプラットフォーム専用の3番目のドライバーが表示されます。 Windows名前空間は、NuGet Appium .NET Driverパッケージに含まれている必要があります。

テストコードを書いています。 この場合、次のようになります。



  [TestClass] public class UnitTest1 { protected const string AppDriverUrl = "http://127.0.0.1:4723"; protected static RemoteWebDriver AppSession; [ClassInitialize] public static void Setup(TestContext context) { DesiredCapabilities cap = new DesiredCapabilities(); cap.SetCapability("app", "6b86c2c7-c428-4039-9281-8da10ee45769_dyre41xy79knw!App"); AppSession = new RemoteWebDriver(new Uri(AppDriverUrl), cap); Assert.IsNotNull(AppSession); } [ClassCleanup] public static void TestsCleanup() { AppSession.Dispose(); AppSession = null; } [TestMethod] public void MakeOperation() { AppSession.FindElementByName("txtNumber").Clear(); AppSession.FindElementByName("txtNumber").SendKeys("5"); AppSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1)); AppSession.FindElementByName("btnGetSquare").Click(); AppSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1)); RemoteWebElement txtResultTextElement; txtResultTextElement = AppSession.FindElementByName("txtResult") as RemoteWebElement; Assert.IsNotNull(txtResultTextElement); Assert.AreEqual("25", txtResultTextElement.Text); AppSession.Quit(); } }
      
      





IOSDriverが使用されている場合、初期化コードは次のように変更されます。



 protected const string AppDriverUrl = "http://127.0.0.1:4723"; protected static IOSDriver<IOSElement> AppSession; [ClassInitialize] public static void Setup(TestContext context) { DesiredCapabilities cap = new DesiredCapabilities(); cap.SetCapability("app", "6b86c2c7-c428-4039-9281-8da10ee45769_dyre41xy79knw!App"); AppSession = new IOSDriver<IOSElement>(new Uri(AppDriverUrl), cap); Assert.IsNotNull(AppSession); }
      
      





ご覧のとおり、変更は最小限です。 MakeOperationテストコードは同じままです。



さらに、プラットフォームとデバイスを指定することができます(Appiumを実行している場合は、その必要もあります)。



  cap.SetCapability("platformName", "Windows"); cap.SetCapability("deviceName", "WindowsPC");
      
      





WinAppDriverを実行すると、URLバーは次のようになります。



 protected const string AppDriverUrl = "http://127.0.0.1:4723";
      
      





さて、Appiumを起動した場合:



 protected const string AppDriverUrl = "http://127.0.0.1:4723/wd/hub";
      
      





実行テストを実行します。 したがって、次のことができます。







そして、すべてが正しい場合、次のようになります。







自動化されたプロセスの小さなアニメーション:







最後に、Win32アプリケーションで作業する標準的な例を示します。



  DesiredCapabilities cap = new DesiredCapabilities(); cap.SetCapability("app", @"C:\Windows\System32\notepad.exe"); AppSession = new RemoteWebDriver(new Uri("http://127.0.0.1:4723"), cap); AppSession.FindElementByClassName("Edit").SendKeys(" Appium!");
      
      





この例では、メモ帳を開き、テキストを入力します。 .NETアプリケーションをテストするには、実行可能ファイルへのパスを登録するだけで十分です。



いくつかのリンク:



GitHubページ

公式ドキュメントページ: WindowsアプリケーションUIテスト



All Articles