0

我正在通过 SpecFlow、NUnit 和 Coypu(用于浏览器自动化,使用 WatiN 驱动程序)对项目进行验收测试。测试的运行是通过 powershell/psake 脚本调用的。

如果我在本地机器上运行这些测试,它们运行良好。但是,我们有一个构建服务器,Jenkins 作业将在其上自动运行这些测试,当通过这个 Jenkins 作业运行时,它们不会执行——它们只是挂起。

查看任务管理器,我可以看到iexplore.exeJenkins 作业运行时创建了两个实例。然而,在某一点之后,它们只是挂起 - 内存使用或 CPU 没有变化。

nunit-agent-x86.exe并且nunit-console-x86.exe也在运行,但主要是挂起,只是nunit-agent-x86.exe在内存中上升得很慢。

如果我杀死其中一个 iexplore.exe 进程,事情会继续,但 SpecFlow 规范随后都会失败。

在杀死 iexplore.exe 时,日志中出现以下异常:

Unhandled Exception: System.Runtime.InteropServices.COMException: The remote procedure call failed. (Exception from HRESULT: 0x800706BE)

如果我在登录到服务器时手动调用 psake 脚本,则规范运行正常。

当我尝试将基本 DI 用于 BrowserSession 时,此问题开始出现,如下所示:https ://gist.github.com/2301407

在此之前,我通过 NUnit [SetupFixture] 类的静态属性共享 BrowserSession。事情基本上都是这样工作的,除了一个涉及模态对话框的测试的小问题不能正常工作,但我不确定我做对了,所以想在要点中做这项技术

对于导致挂起的原因,我有点迷茫。任何想法它是什么或追踪它的提示?

更新:切换到 Firefox 作为浏览器,Selenium 作为驱动程序后,问题就消失了......

4

1 回答 1

0

我在 Coypu 名单上收到了一些回复。我还没有对它们进行测试,因为目前 Firefox 一切正常,但万一它们对其他人有帮助......

2012 年 8 月 2 日星期四 16:38:30 UTC+1,Adiel 写道:

[...]我相信 watin 需要 nunit 在 STA(单线程)中运行,这可能与您的问题有关。

换句话说,也许您使用静态单例浏览器会话使您的测试线程安全,但是现在通过 specflow 的 IOC,由于 nunit 的运行方式,您将获得多个实例。


2012 年 8 月 2 日星期四 16:41:11 UTC+1,Matt Ellis 写道:

这听起来像是 Internet Explorer 的保护模式妨碍了它。IE 在不同的进程中运行不同的区域,例如 Internet 和 Intranet(以及 about:blank),而 IIRC WatiN 处理得不是很好。如果你可以在你的服务器上禁用保护模式,你应该没问题。

于 2012-08-03T08:18:00.227 回答