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よりは使いやすいです。)

C#からWinium WebDriverを使ってみた。前のページ

オトカドール 3rdドリームをプレイしてきたよ。次のページ

関連記事

  1. Windows 10

    Microsoft Edgeを操作するVBAマクロ(DOM編)

    2021/10/1 追記:本記事は公開されてから大分時間が経ってお…

  2. Windows 10

    [Windows 10]画面スケッチを起動するショートカット

    前回の記事の関連です。前回はスケッチパッドを起動するショートカ…

  3. Windows 10

    [Windows 10]スケッチパッドを起動するショートカット

    Yahoo!知恵袋に「VBScript - 「Windowsボタン +…

  4. Windows 10

    WebDriverを使わずMicrosoft Edgeを制御するC#コード

    以前書いた記事のように、Microsoft EdgeにはInterne…

  5. Windows 10

    WinAppDriver UI Recorderを試してみました。

    下記記事にある通り、「WinAppDriver UI Recorder…

コメント

  • コメント (1)

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

    • Vu
    • 2017年 10月 27日 10:33pm

    Hi,

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP