UI テストのために WatiN を試しています。テストを実行できますが、後で IE を閉じることができません。
WatiN のサンプルIEStaticInstanceHelper 手法を使用して、クラスのクリーンアップ コードで IE を閉じようとしています。
問題は IE スレッドに関連しているようで、タイムアウトします。
_instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd));
(_ieHwnd は、IE が最初に起動されたときに格納される IE へのハンドルです。)
これにより、次のエラーが発生します。
クラスのクリーンアップ メソッド Class1.MyClassCleanup が失敗しました。エラー メッセージ:WatiN.Core.Exceptions.BrowserNotFoundException: 制約に一致する IE ウィンドウが見つかりませんでした: 属性 'hwnd' は '1576084' に等しいです。検索は '30' 秒後に期限切れになりました.. スタック トレース: WatiN.Core.Native.InternetExplorer.AttachToIeHelper.Find (制約 findBy、Int32 タイムアウト、ブール値の waitForComplete) で
明らかな何かが欠けているに違いないと確信していますが、これについて何か考えがある人はいますか? ありがとう
完全を期すために、静的ヘルパーは次のようになります。
public class StaticBrowser
{
private IE _instance;
private int _ieThread;
private string _ieHwnd;
public IE Instance
{
get
{
var currentThreadId = GetCurrentThreadId();
if (currentThreadId != _ieThread)
{
_instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd));
_ieThread = currentThreadId;
}
return _instance;
}
set
{
_instance = value;
_ieHwnd = _instance.hWnd.ToString();
_ieThread = GetCurrentThreadId();
}
}
private int GetCurrentThreadId()
{
return Thread.CurrentThread.GetHashCode();
}
}
クリーンアップ コードは次のようになります。
private static StaticBrowser _staticBrowser;
[ClassCleanup]
public static void MyClassCleanup()
{
_staticBrowser.Instance.Close();
_staticBrowser = null;
}