使用Nant和CruiseControl运行Watin测试时间歇性IE超时和COMExceptions

时间:2011-12-05 16:16:01

标签: cruisecontrol.net watin

我们一直在使用Watin和CruiseControl.net几个星期,而且大部分时间他们都在一起工作。我们在开发人员计算机上运行测试时没有遇到任何问题。登录到CI服务器时,我们还能够以交互方式运行测试而不会出现问题。

大多数情况下,在CruiseControl下执行测试时也没有问题,但情况并非总是如此,因为我们最近看到了间歇性错误。错误似乎随机而来,但是当发生错误时,它总是出现以下情况之一:

  1. WatiN.Core.Exceptions.TimeoutException:Internet Explorer忙碌时超时

  2. System.Runtime.InteropServices.COMException:由于以下错误,从IClassFactory创建具有CLSID {0002DF01-0000-0000-C000-000000000046}的COM组件实例失败:800704a6

    < / LI>

    我们的CI服务器环境是:

    • Windows Server 2008 R2

    • IIS 7.5

    • IE 8

    • Watin 2.0

    • CruiseControl 1.6.7981.1。这是作为一个以域上用户身份登录的服务运行的,因为测试需要访问域上的资源。

    “随机”失败的测试按如下方式创建IE实例:

        [TestMethod]
        public void SomeTest()
        {
            using (var browser = new IE())
            {
                // run tests here
            }
        }
    

    我还尝试在新流程中创建IE,如下所示:

        [TestMethod]
        public void SomeTest()
        {
            using (var browser = new IE( true))
            {
                // run tests here
            }
        }
    

    但是当我这样做时,我们测试的所有都失败并出现“WatiN.Core.Exceptions.BrowserNotFoundException:找不到匹配约束的IE窗口:等待连接到新创建的实例时超时IE浏览器'搜索在“30秒”后过期“

    所以,我有两个问题:

    1. 有谁能告诉我如何停止超时和com例外?
    2. 任何人都可以解释为什么IE(true)根本不起作用?
    3. TIA, 麦克

1 个答案:

答案 0 :(得分:2)

见CarlHörberg的回答:
Running Watin on TeamCity

CruiseControl.Net和TeamCity在作为服务运行时遇到同样的问题,并且解决方案适用于两种环境。

默认情况下,ccservice作为本地系统运行,无权与桌面UI交互,并且本地系统帐户权限受到限制,这很可能是导致抛出TimeoutException,COMException和BrowserNotFoundException的原因。