WatiN Dispose()非常慢

时间:2009-08-03 18:22:54

标签: performance internet-explorer-8 windows-xp watin slowdown

当我处理Internet Explorer对象时,我的WatiN测试突然变得非常慢。

这是我的设置......

* Windows 7 (Evaluation Build 7100)
* Internet Explorer 8 (Version 8.0.7100.0)
* WatiN (Version 2.0.10.928)

这很奇怪,因为测试在大约一周前工作正常。我认为这是最新的MS更新等等。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我在IE关闭缓慢(或从不)时遇到问题,但在执行以下操作后我没有问题:

My setup:
*IE 9
*Windows 7
*Watin 2.1
*Visual Studio 10 SP1, using Microsoft.VisualStudio.TestTools.UnitTesting
  1. 而不是像Mikecito所描述的模式 链接,我使用的是BrowserStaticInstanceHelper所描述的版本 Jeroen van Menen,Watin英雄,here。它提供了一种零和in的方法 附加到特定的浏览器窗口。
  2. 使用此策略只能为多个测试方法和多个测试类启动一个IE。并且,当所有测试完成后,IE将在1或2秒内关闭。
  3. 最后一个问题:

    由于我有多个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线程坐在替补席上等待轮流。这基本上意味着有时,当天气不对时,你可以得到这些奇怪的滞后。