概要‎ > ‎

WinFormアプリ操作




このコードとアプリはこちらこちらからダウンロードできます。

WinFormアプリを操作する場合、もちろんFriendly基本機能も使うのですが、
以下のライブラリを使うとさらに簡単に操作できます。

このサンプルはそれらを使って次のアプリを操作するコードです。
Addボタンを押すと会社情報入力画面がモーダルで表示され、その入力データがMainFormのListBoxに格納されます。

FormsStandardControlsに関しては、ここではごく一部しか使っておりませんが、WinFormsの標準的なコントロールにはそれぞれ対応したクラスを提供しております。APIリファレンスをご参照ください。

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Codeer.Friendly;
using Codeer.Friendly.Dynamic;
using Codeer.Friendly.Windows;
using System.Diagnostics;
using Codeer.Friendly.Windows.Grasp;
using System.Windows.Forms;
using Ong.Friendly.FormsStandardControls;
using FormTarget;

namespace FormSample
{
    [
TestClass]
   
public class UnitTest
    {
       
WindowsAppFriend _app;

        [
TestInitialize]
       
public void TestInitialize()
        {
            _app =
new WindowsAppFriend(Process.Start("FormTarget.exe"));
        }

        [
TestCleanup]
       
public void TestCleanup()
        {
           
Process.GetProcessById(_app.ProcessId).CloseMainWindow();
        }

        [
TestMethod]
       
public void Test()
        {
           
//MainFormを取得
           
dynamic mainFormCore = _app.Type<Application>().OpenForms[0];
           
var mainForm = new WindowControl(mainFormCore);

           
//GUIマッピング
           
var _buttonAdd = new FormsButton(mainFormCore._buttonAdd);
           
var _listBoxData = new FormsListBox(mainFormCore._listBoxData);

           
//非同期で追加ボタンを押す
           
var async = new Async();
            _buttonAdd.EmulateClick(async);

           
//InputForm画面が表示されるのを待つ
            
var inputForm = mainForm.WaitForNextModal();
           
dynamic inputFormCore = inputForm.Dynamic();

           
//GUIマッピング
           
var _dataGridView = new FormsDataGridView(inputFormCore._dataGridView);
           
var _buttonOK = new FormsButton(inputFormCore._buttonOK);
           
var _dateTimePickerFounding = new FormsDateTimePicker(inputFormCore._dateTimePickerFounding);
           
var _textBoxCompanyName = new FormsTextBox(inputFormCore._textBoxCompanyName);

           
//データ入力処理
            _textBoxCompanyName.EmulateChangeText(
"Codeer");
            _dateTimePickerFounding.EmulateSelectDay(
new DateTime(2011, 3, 14));
            _dataGridView.EmulateChangeCellText(0, 0,
"ishikawa");
            _dataGridView.EmulateChangeCellComboSelect(1, 0, 2);
            _dataGridView.EmulateChangeCellText(0, 1,
"yamada");
            _dataGridView.EmulateChangeCellComboSelect(1, 1, 1);
            _buttonOK.EmulateClick();

           
//非同期処理が完全に完了するのを待つ
            async.WaitForCompletion();

           
//リストからデータを取得(対象プロセスからコピーを取得する)
           
var data = (Company)_listBoxData.Dynamic().Items[0];
           
           
//判定
           
Assert.AreEqual("Codeer", data.Name);
           
Assert.AreEqual(new DateTime(2011, 3, 14), data.FoundingDate);
           
Assert.AreEqual(2, data.Members.Count);
           
Assert.AreEqual("ishikawa", data.Members[0].Name);
           
Assert.AreEqual(Language.CS, data.Members[0].Language);
           
Assert.AreEqual("yamada", data.Members[1].Name);
           
Assert.AreEqual(Language.CPP, data.Members[1].Language);
        }
    }
}


備考として、WinFormsで作ったつもりでも、実はネイティブのウィンドウが表示されることがあります。
メッセージボックス、ファイルダイアログ、フォルダダイアログがそれに当たります。
こちらを参照お願いします。