Internet Explorer オブジェクトを破棄すると、WatiN テストが突然非常に遅くなりました。
これが私のセットアップです...
* Windows 7 (Evaluation Build 7100)
* Internet Explorer 8 (Version 8.0.7100.0)
* WatiN (Version 2.0.10.928)
テストは 1 週間ほど前に問題なく動作していたため、これは奇妙です。最新のMS Updateか何かだと思います。
何か案は?
Internet Explorer オブジェクトを破棄すると、WatiN テストが突然非常に遅くなりました。
これが私のセットアップです...
* Windows 7 (Evaluation Build 7100)
* Internet Explorer 8 (Version 8.0.7100.0)
* WatiN (Version 2.0.10.928)
テストは 1 週間ほど前に問題なく動作していたため、これは奇妙です。最新のMS Updateか何かだと思います。
何か案は?
My setup:
*IE 9
*Windows 7
*Watin 2.1
*Visual Studio 10 SP1, using Microsoft.VisualStudio.TestTools.UnitTesting
複数のTestMethodsとTestClassesがあるので、IE.Close()をAssemblyCleanup()メソッドに入れたいと思いました。MSTestのスレッドの問題のため、次のようにclose()を呼び出す必要がありました。
[AssemblyCleanup()]
public static void CleanupAllTests()
{
var thread = new Thread(() =>
{
IE.Close();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
*繰り返しになりますが、このスニペットのIEは、上記のリンクの戦略を使用してIEインスタンスをチェックしてアタッチするプロパティを指します。このスニペットは、リンクした残りのパターンがないと問題を解決できない可能性があります。
このセットアップの前は、IEを閉じるのに30秒以上かかることがありましたが、テストの実行中に他のIEウィンドウをすべて開いたり閉じたりできるようになり、ブラウザーは常に確実に閉じます。
私はIE9で同じ断続的な問題を抱えています。私のどちら側の同僚も同じ問題を抱えているわけではありません。私のデフォルトのブラウザーは IE であり、複数のタブを実行して開いている傾向があることに気付きました。
私は、WatIn テストを実行している間、デスクトップで IE を開かずに作業してきましたが、この方法を採用して以来、問題は発生していません。
偶然か、それとも答えか!?
テストを実行しているスレッドを STA モードに設定すると、IE がすぐに閉じます。
[CodedUITest]
public class DoSomeAutomatedTesting
{
public DoSomeAutomatedTesting()
{
// Hey! Hey! Hey! We can't do no MTA!
Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
}
[TestMethod]
public void MyTestMethod()
{
using(var ie = new IE())
{
ie.AutoClose = true;
ie.GoTo("http://www.google.com");
}
}
}
COM プログラミングを行ったことのある古いオナラではない人のために、これは STA http://msdn.microsoft.com/en-us/library/windows/desktop/ms680112(v=vs.85).aspxについて説明しています. 簡単に言うと、STA は、Windows 95 の時代に残された既存のテスト済みの動作中のシングルスレッド コードの実行可能性を保持するために、COM が使用する昔ながらの手法です。
現在、CLR は、COM が MTA と呼んでいるものに存在します。1998 年に住んでいない私たちにとって、MTA は物事が本来の方法で機能する現実の世界と考えることができます。http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421(v=vs.85).aspx
非常に恐ろしい MTA 内のスレッドが STA 内の何かにアクセスしようとすると、MTA とは別のスレッドによって STA が現在アクセスされている場合、MTA スレッドはベンチに座って順番を待つように指示されます。これは基本的に、天候が正しくない場合、これらの奇妙な遅延が発生する可能性があることを意味します.