WatiN 2.0 Firefox测试间歇性失败

问题描述:

我们有一些从CruiseControl运行的WatiN测试,但我们得到间歇性故障。最常见的失败点是在做简单的事情时,比如点击链接。这里有两个例子堆栈跟踪...WatiN 2.0 Firefox测试间歇性失败

WatiN.Core.Exceptions.TimeoutException: 超时等待主 文档变得可用---> System.IO.IOException:操作 不允许在未连接的 插座上。在在 WatiN.Core.Native.Mozilla.FireFoxClientPort.SendCommand(字符串 数据) System.Net.Sockets.NetworkStream.InitNetworkStream(插座 插座,FileAccess的访问)在 WatiN.Core.Native.Mozilla.FireFoxClientPort.SendAndRead (字符串 数据,布尔resultExpected,布尔 checkForErrors,对象[]参数)在 WatiN.Core.Native.ClientPortBase.WriteAndReadAsBool(字符串 数据,对象[]参数)在 WatiN.Core.Native.JSBrowserBase.IsLoading( ) 在 WatiN.Core.Native.JSWaitForComplete.b__0() 在 WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.Try [T](DoFunc FUNC)在 WatiN.Core.WaitForCompleteBase.WaitUntil(DoFunc`1 waitWhile, BuildTimeOutExceptionMessage exceptionMessage)在 WatiN.Core.Native.JSWaitForComplete.WaitWhileDocumentNotAvailable() 在 WatiN.Core.FireFox.WaitForComplete( INT32 waitForCompleteTimeOut)在 WatiN.Core.Element.FireEvent(字符串 eventName的,布尔waitForComplete, 的NameValueCollection eventProperties)
在 WatiN.Core.Element.ClickImpl(布尔 waitforComplete)在... [我们的代码]

...也...

WatiN.Core.Exceptions.TimeoutException: 超时等待主 文档变得可用在 WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.ThrowTimeOutException(例外 lastException,字符串消息)在 WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.Try [T](DoFunc waitWhile, BuildTimeOutExceptionMessage exceptionMessage)在 WatiN.Core.Native.JSWaitForComplete.WaitWhileDocumentNotAvailable() 在 WatiN.Core.FireFox.WaitForComplete(的Int32 waitForCompleteTimeOut)在 WatiN.Core.Element.FireEvent(字符串 eventName的,布尔waitForComplete, NameValueCollection中eventProperties)
在 WatiN.Core.Element.ClickImpl(布尔 waitforComplete)在... [我们的代码]

奇怪的是,它提到JSWaitForComplete,这似乎很奇怪,作为例外是来自那并不是一个普通的链接没有任何附加的Javascript。在我们的测试装置中,我们确保关闭浏览器,所以不应该有过时的FF实例阻塞事物。它有点神秘。

有没有人有任何建议,我们可以尝试解决这个问题?

这是运行WatiN 2.0 Final和Firefox 3.6.13。

+0

这个人有一个类似的问题,看起来并不像它被解决:http://*.com/questions/1145619/watin-tests-failing-with-timeoutexception-when-run-from-cruisecontrol – 2011-04-07 15:45:42

+0

是的,我看到了,并有类似的结果搜索网络的答案。真的不想用Selenium重新编写我们所有的测试(我首先想要做的!) – GoatInTheMachine 2011-04-07 15:47:55

+0

您是否遇到与IE相同的问题?*传播的WaitForComplete()或Thread.sleep()有什么区别吗? (只是在黑暗中刺伤,我从来没有用CC或FF使用过Watin)。 – 2011-04-07 15:56:04

我们在Firefox中运行一系列功能测试时遇到的一个问题是,测试脚本正在完成一项测试,然后在Firefox完成关闭之前继续进行下一个测试。

当下一次测试试图开始运行时,它试图做的第一件事是启动Firefox,但由于Firefox仍在忙于关闭前一个会话,它会间歇性地抛出错误框而不是启动浏览器。这显然导致测试失败。

我们想出了的解决方案是:

  1. 延迟添加到每个测试结束,使得浏览器有时间来正确关闭。

  2. 使用其他浏览器或浏览器组合来进行测试。

因为FF4发布我们还没有重新这一点,但我也注意到,FF4具有更快的启动和关机时间,所以这个问题也可以通过升级的Firefox来解决。这可能也可能不是一个选项,具体取决于你是否真的想在FF3.6中运行测试。

+0

我认为WatiN和FF4存在问题,所以我们不想升级。关于测试,我们目前正在重新启动浏览器而不是每次测试,所以我不认为它的启动是问题所在。虽然有用的建议! – GoatInTheMachine 2011-04-07 15:35:55