当我处理Internet Explorer对象时,我的WatiN测试突然变得非常慢。
这是我的设置......
* Windows 7 (Evaluation Build 7100)
* Internet Explorer 8 (Version 8.0.7100.0)
* WatiN (Version 2.0.10.928)
这很奇怪,因为测试在大约一周前工作正常。我认为这是最新的MS更新等等。
有什么想法吗?
答案 0 :(得分:1)
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窗口,并且浏览器始终可靠地关闭。
答案 1 :(得分:0)
我一直遇到与IE9相同的间歇性问题。我的同事在我这两方面都没有同样的问题。我们刚刚意识到我的默认浏览器是IE,我倾向于打开它,并运行几个标签。
当我的WatIn测试运行时,我一直在桌面上没有IE打开,自从我采用这种做法后我没有遇到问题。
可能是巧合,还是可能的答案?!
答案 2 :(得分:0)
您需要做的是将运行测试的线程设置为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天遗留下来的。
现在,CLR存在于COM称为MTA的内容中。对于我们这些没有生活在1998年的人来说,你可以把MTA想象成现实世界,在这里,事物的运作方式应该如此。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421(v=vs.85).aspx
当超级恐怖的MTA中的某个线程想要访问STA中的某些内容时,如果当前正在通过与MTA不同的线程访问STA,则告知MTA线程坐在替补席上等待轮流。这基本上意味着有时,当天气不对时,你可以得到这些奇怪的滞后。