12

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

这是我的设置...

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

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

有任何想法吗?

4

3 回答 3

1

我遇到了 IE 关闭缓慢(或从不)的问题,但在执行以下操作后,我的问题为零:

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

最后一期:

由于我有多个 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 窗口,并且浏览器总是可靠地关闭。

于 2012-02-28T21:40:08.947 回答
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 是 COM 使用的一种老派技术,用于在可怕的、新奇的抢占式多线程世界中保留现有的、经过测试的、工作的、单线程代码的可行性,这些代码是 Windows 95 天遗留下来的。

现在,CLR 存在于 COM 所称的 MTA 中。对于我们这些不住在 1998 年的人来说,您可以将 MTA 视为现实世界,一切都以应有的方式运行。http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421(v=vs.85).aspx

当超级可怕的 MTA 中的某个线程想要访问 STA 中的某些内容时,如果 STA 当前正在由与 MTA 不同的线程访问,则 MTA 线程被告知坐在工作台上等待轮到它。这基本上意味着有时,当天气不合适时,您可能会遇到这些奇怪的滞后。

于 2013-08-06T17:49:22.270 回答
0

我在 IE9 上遇到了同样的间歇性问题。我两边的同事都没有同样的问题。我们刚刚意识到我的默认浏览器是 IE,我倾向于在运行多个选项卡的情况下打开它。

在我的 WatIn 测试运行时,我一直在桌面上没有打开 IE 的情况下工作,自从我采用这种做法以来,我没有遇到过问题。

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

于 2011-11-03T10:00:22.600 回答