編集:この質問を作成する際に、ターゲットウィンドウがモーダルウィンドウであるため、私が試しているアプローチが間違っていたことに気づきませんでした。 GetWindowではなく、GetModalを使用していたはずです。将来の旅行者のための潜在的参考資料としてここに残してくださいTestStack.Whiteなぜ私はApplication.GetWindowsでウィンドウを見つけることができますが、.GetWindowでは見つけることができませんか?
私は継承した大規模なWPFアプリケーションのためのTestStack.Whiteでいくつかのテストを書こうとしています。子ウィンドウが作成され、その子ウィンドウへの参照を取得する必要があるケースが1つあります。私がApplication.GetWindowsの呼び出しの結果を反復すると、私はそれを見つけることができますが、私が想像することができるApplication.GetWindowの任意の化身でそれを見つけることはできません。
これは次の例に示されています(nameは文字列です)。ウィンドウはforeachループ内にあります(何かをクリックした後に作成されるウィンドウ時間を与えるためにイテレートする前にスレッドを1秒間スリープしている限り..)。この演習の全体的なポイントはちょうどこのThread.Sleepコードの臭いを取り除くため、私はGetWindowとその組み込みの待機を使いたいと思っています。
Thread.Sleep(1000);
foreach (Window window in app.GetWindows())
{
if (window.AutomationElement.Current.Name == name)
{
Assert.AreEqual(window.Title, name); // passes.. they match
Assert.AreEqual(window.AutomationElement.Current.Name, name); // passes.. they match
var aIdCheck = window.AutomationElement.Current.AutomationId; // empty string
}
}
try // this fails.. (after 30s)
{
var testGetWindow = app.GetWindow(name);
}
catch (Exception ex) { }
try // this fails too... (after 5s)
{
var testGetWindow = app.GetWindow(SearchCriteria.ByNativeProperty(AutomationElement.NameProperty, name), InitializeOption.NoCache);
}
catch (Exception ex) {}
try // you guessed it.. fail..
{
var testGetWindow = app.GetWindow(SearchCriteria.ByText(name), InitializeOption.NoCache);
}
catch (Exception ex) {}
私の問題は、私が後にしていたことがモーダルウィンドウであったため、GetModalを使用していて、GetWindowを使用すべきではないという事実と関連がありました。それは私がホワイトと一緒に勉強するために得たものです:)私は自分の問題を誤解していないなら、それは良いアプローチになるので、これを答えにしてください。 –
@RookieRickありがとう。これも興味深い解決策です。私はそれを考えなかっただろう。 – Rescis