Visual Studio との連携
Microsoft Visual Studio は、Microsoft が提供する 統合開発環境 (IDE) です。Microsoft Windows 用のコンピューター プログラム、Web サイト、Web アプリケーション、Web サービス、モバイル アプリケーションの開発などに使用されます。この章では、シンプルな Visual Studio C# コンソール アプリケーションで Ranorex Studio を使用する方法を説明します。Visual Studio C# コンソール アプリケーションを新規に作成する方法と、Windows 電卓を起動して自動化する方法を説明します。
メモ
この章で使用するサンプルは、Microsoft Visual Studio 2005 以降で動作します。
Visual Studio プロジェクトの新規作成
Microsoft Visual Studio を起動します。
ファイル > 新しいプロジェクト をクリックします。
.NET Framework 4.6.2 以上を選択し、使用するプログラミング言語を選択します。この例では、C# を使用します。
リストから、コンソール アプリケーション を選択します。
プロジェクト名を入力し、OK をクリックします。
Creating a new Console Application with Microsoft Visual Studio
Ranorex のコア アセンブリを参照に追加
プロジェクトのソリューション エクスプローラー内の 参照設定 フォルダーを右クリックして、参照の追加 ダイアログを開きます。
Ranorex のインストール フォルダー の Bin (例: C:Program Files (x86)RanorexStudioBin) を参照します。
Ranorex.Bootstrapper, Ranorex.Common, Ranorex.Core, Ranorex.Core.Resolver, および、すべての Ranorex.Plugin アセンブリを追加します。
Ranorex オートメーション コードの記述
コードを記述する前に、Ranorex.Core.Resolver 以外の、すべての Ranorex アセンブリの ローカル コピー オプションを False に設定することをおすすめします。Ranorex.Core.Resolver ローカル コピー オプションは、必ず True に設定してください。その他のアセンブリの設定は、必要に応じて True にすることができます。
‘Program.cs’ ファイルを開き、以下の ‘using’ ステートメントを既存の using セクションに追加します。
using Ranorex;
using System;
using System.Runtime.CompilerServices;
using System.Threading;
Imports Ranorex
Imports System;
Imports System.Runtime.CompilerServices;
Imports System.Threading;
他の Ranorex コア機能を使用する前に、Ranorex.Core.Resolver を初期化することが重要です。このアセンブリは、実行時に必要となる他のアセンブリを検出します。
これをおこなうには、以下のコードを Program クラスの Main ルーチンに追加します。テスト オートメーション コードは、Run に記述します。この例では、Windows 電卓でシンプルな計算をおこないます。コードを追加したら、F5 を押下し、プロジェクトのビルドをおこないます。
static void Main(string[] args)
{
InitResolver();
RanorexInit();
run();
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void InitResolver()
{
Ranorex.Core.Resolver.AssemblyLoader.Initialize();
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void RanorexInit()
{
TestingBootstrapper.SetupCore();
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static int run()
{
int error = 0;
//Start calculator and wait for UI to be loaded
try
{
System.Diagnostics.Process pr = System.Diagnostics.Process.Start("calc.exe");
Thread.Sleep(2000);
//Get process name
string processName = GetActualCalculatorProcessName();
//Find Calculator | Windows 10
if (IsWindows10())
{
WindowsApp calculator = Host.Local.FindSingle("winapp[@processname='" + processName + "']");
Button button = calculator.FindSingle(".//button[@automationid='num2Button']");
button.Click();
button = calculator.FindSingle(".//button[@automationid='plusButton']");
button.Click();
button = calculator.FindSingle(".//button[@automationid='num3Button']");
button.Click();
button = calculator.FindSingle(".//button[@automationid='equalButton']");
button.Click();
//Close calculator
calculator.As().Close();
}
//Find Calculator | Windows 8.X or older
else
{
Form calculator = Host.Local.FindSingle("form[@processname='" + processName + "']");
calculator.EnsureVisible();
Button button = calculator.FindSingle(".//button[@controlid='132']");
button.Click();
button = calculator.FindSingle(".//button[@controlid='92']");
button.Click();
button = calculator.FindSingle(".//button[@controlid='133']");
button.Click();
button = calculator.FindSingle(".//button[@controlid='121']");
button.Click();
//Close calculator
calculator.Close();
}
}
catch (RanorexException e)
{
Console.WriteLine(e.ToString());
error = -1;
}
return error;
}
private static string GetActualCalculatorProcessName()
{
string processName = String.Empty;
var processes = System.Diagnostics.Process.GetProcesses();
foreach (var item in processes)
{
if (item.ProcessName.ToLowerInvariant().Contains("calc"))
{
processName = item.ProcessName;
break;
}
}
return processName;
}
private static bool IsWindows10()
{
var reg = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWAREMicrosoftWindows NTCurrentVersion");
string productName = (string)reg.GetValue("ProductName");
return productName.StartsWith("Windows 10");
}
以下は、Ranorex 8.0 以前の場合のコードです。
[STAThread]
static int Main(string[] args)
int error = 0;
try
{
System.Diagnostics.Process pr = System.Diagnostics.Process.Start("calc.exe");
Form form = Host.Local.FindSingle("form[@processname='"+pr.ProcessName+"']");
form.Activate();
Button button = form.FindSingle(".//button[@controlid='132']");
button.Click();
button = form.FindSingle(".//button[@controlid='92']");
button.Click();
button = form.FindSingle(".//button[@controlid='133']");
button.Click();
button = form.FindSingle(".//button[@controlid='121']");
button.Click();
}
catch (RanorexException e)
{
Console.WriteLine(e.ToString());
error = -1;
}
return error;
}
<stathread> _
Public Shared Function Main(args As String()) As Integer
Dim returnError As Integer = 0
Try
Dim pr As System.Diagnostics.Process = System.Diagnostics.Process.Start("calc.exe")
Dim form As Form = Host.Local.FindSingle(Of Ranorex.Form)("form[@processname='" & pr.ProcessName & "']")
form.Activate()
Dim button As Button = form.FindSingle(Of Ranorex.Button)(".//button[@controlid='132']")
button.Click()
button = form.FindSingle(Of Ranorex.Button)(".//button[@controlid='92']")
button.Click()
button = form.FindSingle(Of Ranorex.Button)(".//button[@controlid='133']")
button.Click()
button = form.FindSingle(Of Ranorex.Button)(".//button[@controlid='121']")
button.Click()
Catch e As RanorexException
Console.WriteLine(e.ToString())
returnError = -1
End Try
Return returnError