gpt4 book ai didi

internet-explorer - 等待间歇性故障

转载 作者:行者123 更新时间:2023-11-28 20:33:17 24 4
gpt4 key购买 nike

我的团队有一堆由我们的 TeamCity 服务器自动运行的 WatiN 测试套件。我们最近将所有构建代理切换为 64 位,我还将 WatiN 测试切换为在 x64 模式下使用 NUnit。由于对 IE 浏览器的 Interop 调用失败或其他原因,Watin 总是给我们带来不常见的测试失败,但这种情况一直很少见。自从将所有内容都切换到 64 位后,我们几乎所有测试套件的每次运行都失败并出现以下异常:

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 runner 完成大约 5 次以上的测试套件运行后,除了一次出现同样的错误外,它们每次都失败了。我们将它们切换回 32 位,并且从那以后已经成功运行了 10 多次。我想目前的临时解决方法是使用 32 位 NUnit runner,尽管我仍在寻找发生这种情况的原因或允许我们切换回 x64 的解决方案。

最佳答案

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

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

public static extern Int32 SendMessageTimeout(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam, Int32 fuFlags, Int32 uTimeout, ref Int32 lpdwResult);

VS正确

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,并且不提供任何保证。

关于internet-explorer - 等待间歇性故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com