概要‎ > ‎

WPFアプリ操作


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

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

このサンプルはそれらを使って次のアプリを操作するコードです。
Addボタンを押すと会社情報入力画面がモーダルで表示され、その入力データがMainWindowのListBoxに格納されます。
WPFStandardControlsに関しては、ここではごく一部しか使っていませんが、WPFの標準的なコントロールには対応しています。
APIリファレンスをご参照ください。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Codeer.Friendly;
using Codeer.Friendly.Dynamic;
using Codeer.Friendly.Windows;
using System.Diagnostics;
using WpfTarget;
using System.Windows;
using Codeer.Friendly.Windows.Grasp;
using RM.Friendly.WPFStandardControls;

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

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

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

        [
TestMethod]
       
public void Test()
        {
           
//MainWindowを取得
           
dynamic mainCore = _app.Type<Application>().Current.MainWindow;
           
var main = new WindowControl(mainCore);

           
//GUIマッピング
           
var _buttonAdd = new WPFButtonBase(mainCore._buttonAdd);
           
var _listBoxData = new WPFListBox(mainCore._listBoxData);

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

           
//Input画面が表示されるのを待つ
           
var input = main.WaitForNextModal();
           
dynamic inputCore = input.Dynamic();

           
//GUIマッピング
           
var _grid = new WPFDataGrid(inputCore._grid);
           
var _buttonOK = new WPFButtonBase(inputCore._buttonOK);
           
var _dateTimePickerFounding = new WPFDatePicker(inputCore._dateTimePickerFounding);
           
var _textBoxCompanyName = new WPFTextBox(inputCore._textBoxCompanyName);

            
//データ入力処理
            _textBoxCompanyName.EmulateChangeText(
"Codeer");
            _dateTimePickerFounding.EmulateChangeDate(
new DateTime(2011, 3, 14));
            _grid.EmulateChangeCellText(0, 0,
"ishikawa");
            _grid.EmulateChangeCellComboSelect(0, 1, 2);
            _grid.EmulateChangeCellText(1, 0,
"yamada");
            _grid.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);
        }
    }
}

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