前回の記事では、Winium WebDriverを使ってメモ帳を操作してみました。
GitHubを見てみると、WinFroms、WPFベースのアプリ操作自動化を目的とした「Winium.Cruciatus」というフレームワークもあるようなので、こちらも試してみることにします。
(Cruciatus = ラテン語で拷問?ずいぶんと物騒な名前です。)
下準備
Winium WebDriverと同じく、必要なパッケージをNuGetからインストールします。
nuget install "Winium.Cruciatus"
Winium.Cruciatusでメモ帳を操作するコード
準備ができたら、さっそくコードを書いていきます。
/* * Winium.Cruciatusでメモ帳を操作するサンプル * @kinuasa * * [要参照] * UIAutomationClient, * UIAutomationTypes, * Winium.Cruciatus(Winium.Cruciatus.dll), * WindowsInput(WindowsInput.dll) * NLog(NLog.dll) */ using System; using System.Windows.Automation; using Winium.Cruciatus.Core; using Winium.Cruciatus.Extensions; namespace Sample2 { class Program { public static void Main(string[] args) { var calc = new Winium.Cruciatus.Application(@"C:\Windows\System32\calc.exe"); calc.Start(); var winFinder = By.Name("電卓").AndType(ControlType.Window); var win = Winium.Cruciatus.CruciatusFactory.Root.FindElement(winFinder); //電卓の'5','6','7'ボタンクリック //AutomationId指定 win.FindElementByUid("num5Button").Click(); win.FindElementByUid("num6Button").Click(); win.FindElementByUid("num7Button").Click(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }
上図の通り、意図した通りに動作しているようです。
GitHubにも書いてありますが、Winium.CruciatusはUI Automationのラッパーのようで、AutomationIdでエレメントを指定することもできます。
「Inspect」等のツールを使えば、AutomationIdを調べることができるので、Winium.Cruciatusを使用する際には、事前にダウンロードしておくことをお薦めします。
Winium.CruciatusでWPFサンプルアプリを操作するコード
GitHubにはテスト用のサンプルアプリも置いてあります。
せっかくなので、このWPFアプリの操作も試してみたいと思います。
(サンプルアプリは、Visual Studioが無くてもMSBuildを使えばビルドすることができます。)
/* * Winium.CruciatusでWPFサンプルアプリを操作するコード * @kinuasa * * [要参照] * UIAutomationClient, * UIAutomationTypes, * Winium.Cruciatus(Winium.Cruciatus.dll), * WindowsInput(WindowsInput.dll) * NLog(NLog.dll) */ using System; using System.Windows.Automation; using Winium.Cruciatus; using Winium.Cruciatus.Core; namespace Sample4 { class Program { public static void Main(string[] args) { var testApp = new Winium.Cruciatus.Application(@"C:\Software\WpfTestApplication\WpfTestApplication.exe"); testApp.Start(); //RibbonTabItem2クリック var tab2 = CruciatusFactory.Root.FindElementByUid("RibbonTabItem2"); tab2.Click(); //RibbonCheckBoxクリック tab2.FindElementByUid("RibbonCheckBox").Click(); //TabItem4クリック var tab4 = CruciatusFactory.Root.FindElementByUid("TabItem4"); tab4.Click(); //thirteenセルにフォーカス foreach (var cell in tab4.FindElements(By.AutomationProperty(AutomationElementIdentifiers.ClassNameProperty, "DataGridCell"))) { if (cell.Properties.Name == "thirteen") { cell.SetFocus(); } } Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }
リボンのタブやチェックボックスの操作等、簡単なコードで処理することができました。
素のUI Automationだとコードが長くなりがちなので、コードをスッキリさせたい場合は、Winium.Cruciatusを使うのは割とアリだと思います。
(少なくともWinium WebDriverよりは使いやすいです。)
Hi,
I want to find element in list of combobox? Can you help me!