首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WatiN间歇故障

WatiN间歇故障
EN

Stack Overflow用户
提问于 2011-11-03 14:56:08
回答 1查看 655关注 0票数 1

我的团队有许多WatiN测试套件,它们由我们的TeamCity服务器自动运行。最近,我们将所有构建代理切换到64位,我还将WatiN测试转换为在x64模式下使用NUnit。由于对IE浏览器的互操作调用失败或其他原因,Watin总是给我们不经常的测试失败,但这些都是非常罕见的。由于将所有内容切换到64位,我们的测试套件的几乎每一次运行都会失败,但有以下例外:

代码语言:javascript
复制
Test(s) failed. System.InvalidCastException : Specified cast is not valid.
    at SHDocVw.IWebBrowser2.get_HWND()
    at WatiN.Core.Native.InternetExplorer.IEBrowser.get_hWnd()
    at WatiN.Core.DomContainer.StartDialogWatcher()
    at WatiN.Core.IE.CreateNewIEAndGoToUri(Uri uri, IDialogHandler logonDialogHandler, Boolean createInNewProcess)
    ...

我发现了一个related question,其中一个WatiN用户看到了同样的异常,但这是因为她正在尝试多线程。我们没有做任何这样的事情,事实上,我们使用的是WatiN文档所建议的正确的线程状态单元。不过,我在问题中确实注意到,有人评论说,这可能是因为x86与x64模式。

如何避免导致测试经常失败的错误?

如果这只是一个切换回32位模式的问题,我可以处理,但我想确定没有更好的解决方案。谢谢。

更新:

在将作业作为64位NUnit运行程序用于测试套件的5+运行时,它们每次都失败了,只有一次出现了同样的错误。我们将它们切换回32位,并成功地运行了10+。我想现在的临时修复是使用32位的NUnit运行程序,尽管我仍然在寻找发生这种情况的原因,或者一个允许我们切换回x64的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2014-07-24 08:27:25

我正在x64上使用Watin,它给我带来了一些麻烦。我最近回顾了Watin的源代码,PInvoke调用似乎有缺陷(只在32b系统上正确工作)。如果执行某些方法,它们会覆盖内存的某些部分(因为32b是为64b结果保留的),因此会产生奇怪的错误。

这只是一个例子: WatiN-2.1.0.1196/source/src/Core/Native/Windows/Win32.cs

代码语言:javascript
复制
public static extern Int32 SendMessageTimeout(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam, Int32 fuFlags, Int32 uTimeout, ref Int32 lpdwResult);

与正确

代码语言:javascript
复制
public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint msg, UIntPtr wParam, IntPtr lParam, uint fuFlags, uint uTimeout, out IntPtr lResult);

对于完全更改检查http://pastebin.com/KaVpM6wT,它需要重建的Watin.Core dll,当然,并没有任何保证。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7997025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档