Windows関連

C#からWinium.Cruciatusを使ってみた。

前回の記事では、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);
    }
  }
}

Winium_Cruciatus_01

上図の通り、意図した通りに動作しているようです。
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);
    }
  }
}

Winium_Cruciatus_02

リボンのタブやチェックボックスの操作等、簡単なコードで処理することができました。
素のUI Automationだとコードが長くなりがちなので、コードをスッキリさせたい場合は、Winium.Cruciatusを使うのは割とアリだと思います。
(少なくともWinium WebDriverよりは使いやすいです。)

関連記事

  1. Windows 10

    PowerShellでMicrosoft Edgeを操作する

    前回の記事でWebDriverを使ってMicrosoft Edgeを操…

  2. Windows関連

    [Windows 8]ログオン時にデスクトップを表示する。

    通常Windows 8はログオン時にスタートスクリーンが表示されますが…

  3. Windows 10

    [Windows 10]ナビゲーションウィンドウにあるOneDriveを非表示にする。

    ※ レジストリを編集する作業は自己責任で行ってください。Win…

  4. Windows関連

    ドラッグ&ドロップした画像をクリップボードにコピーするバッチファイル

    いくつか画像ファイルを編集する必要があったときに書いたバッチ(というよ…

  5. Windows関連

    [Windows 8]画像をタッチしてログオンする。

    ※ 下記はWindows Developer Preview(英語版・…

コメント

  • コメント (1)

  • トラックバックは利用できません。

    • Vu
    • 2017年 10月 27日

    Hi,

    I want to find element in list of combobox? Can you help me!

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP