WatiN Dispose()非常慢

12

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

这是我的设置...

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

这很奇怪,因为一周前测试还正常。我认为可能是最近的微软更新或其他问题所致。

有什么想法吗?


我知道这已经很老了,但是还有其他人遇到类似的问题吗? - Ian P
1
你能发布一份代表性的Watin函数样本以及它们的频率吗? - Zian Choy
3个回答

1

我曾经遇到过IE关闭缓慢(或者根本无法关闭)的问题,但是在进行了以下操作之后,这个问题完全解决了:

My setup:
*IE 9
*Windows 7
*Watin 2.1
*Visual Studio 10 SP1, using Microsoft.VisualStudio.TestTools.UnitTesting
  1. 与Mikecito的链接中描述的模式不同,我使用了Jeroen van Menen所描述的BrowserStaticInstanceHelper版本,Watin英雄,here。它提供了一种方法来锁定并附加到特定的浏览器窗口。
  2. 使用这种策略的好处是只需为多个测试方法和多个测试类启动一个IE。当所有测试完成时,IE会在1或2秒内关闭。

最后一个问题:

由于我有多个测试方法和测试类,我想将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窗口,浏览器总是可靠地关闭。


这是唯一解决我的缓慢关闭问题的方法。 - Aidan Ryan

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是一种古老的技术,用于保留现有、经过测试、工作正常的单线程代码,在抢占式多线程的可怕新世界中继续生存。

现在,CLR存在于COM所称的MTA中。对于我们这些不生活在1998年的人来说,可以将MTA视为真实世界,其中事物按其应该的方式运作。http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421(v=vs.85).aspx

当超级可怕的 MTA 中的某个线程想要访问 STA 中的某些内容时,如果该 STA 正在被来自 MTA 的其他线程访问,则会告诉 MTA 线程坐在长椅上等待轮到它。这基本上意味着有时候,当天气不对时,你可能会遇到这些奇怪的延迟。


0

我一直遇到IE9的同样间歇性问题。我两边的同事没有同样的问题。我们刚刚意识到我的默认浏览器是IE,而且我倾向于打开多个标签页。

在我的WatIn测试运行时,我没有打开IE桌面,自从采用这种做法以来,我就没有遇到过这个问题。

可能是巧合,也可能是答案?!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接