2

正在使用 WatiN 进行自动化。使用几个并发线程来测试应用程序。很少有线程失败,日志报告/堆栈跟踪显示以下内容。

System.InvalidCastException: Specified cast is not valid.
   at SHDocVw.IWebBrowser2.get_HWND()
   at WatiN.Core.Native.InternetExplorer.IEBrowser.get_hWnd()
   at WatiN.Core.Browser.get_hWnd()
   at WatiN.Core.DomContainer.StartDialogWatcher()
   at WatiN.Core.IE.CreateNewIEAndGoToUri(Uri uri, IDialogHandler logonDialogHandler, Boolean createInNewProcess)
   at WatiN.Core.IE..ctor(Boolean createInNewProcess)
   at Core.BaseWatinTestWrapper.Run()

在此异常之后,还会引发另一个异常,即

System.Runtime.InteropServices.COMException Retrieving the COM class factory for component with CLSID {0002DF01-0000-0000-C000-000000000046} failed due to the following error: 80080005.

请提供一些帮助。提前致谢。

4

2 回答 2

2

我也使用了几个线程并且遇到了同样的错误。制作您的主要方法 [MTAThread]。这解决了我的问题。

于 2011-11-03T05:07:57.667 回答
0

如果我没记错的话,WatiN 明确是单线程的 [STApartment] - http://watin.org/documentation/sta-apartmentstate/ 如果您希望进行这样的测试,我相信您需要在操作系统级别进行单独的进程。我无法确定您是否与此要求相冲突,但我建议单个浏览器的单个实例(它是后代窗口/进程)。

此外,可能还有另一个问题——WatiN 使用浏览器的内部连接到 IE,但如果在此过程中存在任何与 Windows/用户会话相关的活动,这可能会带来额外的混乱。

于 2011-04-22T10:14:52.807 回答