NUnit2.5.10テスト内からMicrosoftUIAutomation APIを使用して、WPFアプリケーションの自動UIテストを実行しています。
開発マシンでテストを実行すると特定のUI要素を見つけることができる場合がありますが、ビルドエージェントマシンで同じバイナリに対して同じスクリプトを実行すると、それらの要素を見つけることができません。
エージェントマシンの動作が異なる理由はわかりません。UIAccessフラグまたはUACと関係があると思いますが、具体的なことは何もありません。
ビルドエージェントの動作が異なる理由や、他のマシンと同じ要素を表示するようにエージェントを修正する方法について、誰かがガイダンスを提供できますか?
たとえば、私はコンボボックスを持っています。これには約12のオプションがあります。Win7 SDKの「オブジェクトの検査」ツールを使用すると、各オプションに実際に表示されるテキストを持つ子要素があることがわかります。したがって、私のテストコードでは、次のようなことを行います。
// get the child elements
var options = comboBoxElement.FindAll(TreeScope.Children, (System.Windows.Automation.Condition) new PropertyCondition(AutomationElement.IsControlElementProperty, (object) true));
foreach (AutomationElement child in viewOptions)
{
var subControls = child.GetChildren();
Console.WriteLine("Child: {0} w/ {1} children", child.Current.Name, subControls.Count);
foreach (AutomationElement subControl in subControls)
Console.WriteLine("SubControl: {0}", subControl.Current.Name);
}
私の開発マシンでは、次の結果が得られます。
Child: My.BoundObject.ClassName w/ 1 children
SubControl: Displayed Text for first item
Child: My.BoundObject.ClassName w/ 1 children
SubControl: Displayed Text for second item
Child: My.BoundObject.ClassName w/ 1 children
SubControl: Displayed Text for third item
しかし、サーバーでは、私はこれを取得します:
Child: My.BoundObject.ClassName w/ 0 children
Child: My.BoundObject.ClassName w/ 0 children
Child: My.BoundObject.ClassName w/ 0 children
どちらの場合も、オブジェクトの検査では子オブジェクトが表示されます。
ビルドエージェントとローカルマシンの両方で、.Net4を搭載したWindows7 SP1を実行しています。どちらの場合も、nunit-console.exeを実行してテストを開始しています。マシン間で環境全体をコピーしているので、同じバージョンのnunitとアプリのバイナリであるだけでなく、まったく同じファイル、構成、ライブラリなどです。nunit-consoleは管理者ユーザーとして実行されています。