我的 WatiN 测试在处理 Internet Explorer 对象时突然变得非常缓慢。
这是我的设置...
* Windows 7 (Evaluation Build 7100)
* Internet Explorer 8 (Version 8.0.7100.0)
* WatiN (Version 2.0.10.928)
这很奇怪,因为一周前测试还正常。我认为可能是最近的微软更新或其他问题所致。
有什么想法吗?
我的 WatiN 测试在处理 Internet Explorer 对象时突然变得非常缓慢。
这是我的设置...
* Windows 7 (Evaluation Build 7100)
* Internet Explorer 8 (Version 8.0.7100.0)
* WatiN (Version 2.0.10.928)
这很奇怪,因为一周前测试还正常。我认为可能是最近的微软更新或其他问题所致。
有什么想法吗?
My setup:
*IE 9
*Windows 7
*Watin 2.1
*Visual Studio 10 SP1, using Microsoft.VisualStudio.TestTools.UnitTesting
由于我有多个测试方法和测试类,我想将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窗口,浏览器总是可靠地关闭。
[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是一种古老的技术,用于保留现有、经过测试、工作正常的单线程代码,在抢占式多线程的可怕新世界中继续生存。
现在,CLR存在于COM所称的MTA中。对于我们这些不生活在1998年的人来说,可以将MTA视为真实世界,其中事物按其应该的方式运作。http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421(v=vs.85).aspx
当超级可怕的 MTA 中的某个线程想要访问 STA 中的某些内容时,如果该 STA 正在被来自 MTA 的其他线程访问,则会告诉 MTA 线程坐在长椅上等待轮到它。这基本上意味着有时候,当天气不对时,你可能会遇到这些奇怪的延迟。
我一直遇到IE9的同样间歇性问题。我两边的同事没有同样的问题。我们刚刚意识到我的默认浏览器是IE,而且我倾向于打开多个标签页。
在我的WatIn测试运行时,我没有打开IE桌面,自从采用这种做法以来,我就没有遇到过这个问题。
可能是巧合,也可能是答案?!