見出し画像

.NET MAUIアプリを操作するPower Automate for desktopフロー

自動化のコミュニティで、Power Automate for desktop(PAD)でWindows 11のペイントアプリの操作ができないとの質問がありました。
私の方でも確認してみると、たしかに「ファイル」ボタンはクリックできましたが、その先のメニュー項目の操作ができませんでした。

操作できなかったメニュー項目のプロパティを確認してみると以下のようになっています。

Name:	"開く"
ControlType:	UIA_MenuItemControlTypeId (0xC35B)
LocalizedControlType:	"menu item"
BoundingRectangle:	{l:268 t:279 r:514 b:308}
IsEnabled:	true
IsOffscreen:	false
IsKeyboardFocusable:	true
HasKeyboardFocus:	false
AcceleratorKey:	"Ctrl+O"
AccessKey:	"Alt, O"
ProcessId:	1968
RuntimeId:	[2A.17052A.4.3D]
AutomationId:	"FileOpen"
FrameworkId:	"XAML"
ClassName:	"MenuFlyoutItem"

「MenuFlyoutItem」(ClassName)という見慣れない値があったので調べたところ、下記のサイトがヒットしました。

https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/menu-bar?WT.mc_id=M365-MVP-4029057 より

下記サイトによると.NET MAUIは比較的新しいフレームワークで、どうやらWindows 11のペイントアプリはこちらで作られているようですが、PAD側で.NET MAUIアプリの操作に対応していないのだと思います。

 2022年5月23日(米国時間)、.NET MAUIがGA(一般提供)されました。Microsoftは「.NET MAUIは、.NET Multi-platform App UIの略称で、モバイル、タブレット、デスクトップにまたがるネイティブデバイスのアプリケーションを構築するフレームワークです」と紹介しています。

 .NET MAUI自体はGAされましたが、2022年6月26日の原稿執筆では開発環境「Visual Studio」は、Windows版も、Mac版も最新のプレビュー版での対応です。こちらは程なく安定版のVisual Studioでも対応されるでしょう。

 .NET MAUIはXamarin.Formsから全く違う製品名に変わりましたが、何が違うのでしょうか? 分かりやすくいえば、.NET MAUIはXamarin.Formsの改良版です。

https://atmarkit.itmedia.co.jp/ait/articles/2207/28/news003.html より

さらに調べてみると、Windows Application Driver (WinAppDriver) バージョン 1.2.1 以上であれば.NET MAUIアプリのUIテストができることが分かりました。

であれば、PADからWinAppDriverを使えば.NET MAUアプリの操作ができるわけですね!
さっそく試してみることにしました。


WinAppDriverのインストール

1.GitHubのReleasesページから「WindowsApplicationDriver_1.2.1.msi」をダウンロードします。
2.ダウンロードしたmsiファイルを実行し、指示に従ってインストールを行います。

開発者モードを有効にする

インストール後、そのままWinAppDriverを実行しようとすると、下記メッセージが表示されて実行することができません。

Developer mode is not enabled. Enable it through Settings and restart Windows Application Driver
Failed to initialize: 0x80004005

メッセージの指示に従って、「開発者モード」を有効にする必要があります。

WinAppDriverによるアプリの操作

実は数年前にもWinAppDriverを使ったことがあります。

そのときはAppiumを使用しましたが、仕組みとしてはJSON Wire Protocolベースなので、WinAppDriverにリクエストを投げればアプリを操作できるはずです。

PADには「Web サービスを呼び出します」アクションが用意されているので、さっそく電卓アプリを操作するフローを作ってみました。

電卓の「5」ボタンをクリックするだけの簡単な処理ですが、上手く動いているようです。

WinAppDriverでペイントアプリを操作するPower Automate for desktopフロー

では本題に戻り、Windows 11のペイントを操作するフローを作ってみることにします。

UI要素の指定で使用しているXPathは、下記記事で紹介しているWinAppDriver UI Recorderで取得したものを元にしています。

工夫した点としては、下記記事にあるようにキー送信した際に「\」が「]」に勝手に変わってしまったので、事前にクリップボートにコピーしたファイルパスを「Ctrl + V」キーを送って貼り付けるようにしているところです。


これで無事にWinAppDriverを使ってPADからアプリを操作できることが確認できたわけですが、ここまでやるのであればPADを使う必要はなかったかもしれません・・・😅

いいなと思ったら応援しよう!