質問
私は実験WatiN当社のUI試験した試験を仕事ができませんの家にあります。
ようにしている内IE私のクラスを清掃コードを使用WatiNの例 IEStaticInstanceHelper技術.
の問題が取り付けの家のスレッドは、タイムアウトした:
_instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd));
(_ieHwndの取扱いにIEの保管の際の家が最初に起動します。)
このエラー:
クラス浄化方法 Class1.MyClassCleanupに失敗しました。エラー メッセージ:WatiN.ます。例外をスローしました。BrowserNotFoundException:がないの家の窓マッチング 制約:属性'hwnd'equals '1576084'.検索終了後30分 秒..スタックトレース:時 WatiN.ます。ネイティブの.InternetExplorer.AttachToIeHelper.Find(制約 findBy,Int32タイムアウト,Boolean 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();
}
}
クリーンupコードは以下のようなものです:
private static StaticBrowser _staticBrowser;
[ClassCleanup]
public static void MyClassCleanup()
{
_staticBrowser.Instance.Close();
_staticBrowser = null;
}
解決 3
MSTESTをダンプし、代わりにMbUnitのを使用して、この自分自身を修正しました。また、私はそれだけで働いていた、IEStaticInstanceHelperのもののいずれかのいずれかを使用する必要がないことがわかっています。
他のヒント
問題は時MSTESTを実行する方法に [ClassCleanup]
属性がされているスレッドなの 駅.
を実行する場合は、以下のコードでの仕事:
[ClassCleanup]
public static void MyClassCleanup()
{
var thread = new Thread(() =>
{
_staticBrowser.Instance.Close();
_staticBrowser = null;
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
のWatiNサイトについて我がWatiNな仕事のスレッドにない駅 こちらの しかし、その先には、明らか [TestMethod]
'sの駅ながらの方法のように [ClassCleanup]
や [AssemblyCleanupAttribute]
います。
IEのオブジェクトが破壊されているデフォルトでは、彼らは、ブラウザをAUTOCLOSEます。
あなたのクリーンアップコードを使用すると、エラーが発生している理由で、近くにすでにブラウザを見つけようとしてます。