System.InvalidCastException:指定的强制转换无效

时间:2011-04-07 16:17:50

标签: multithreading internet-explorer testing watin shdocvw

正在使用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.

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果我没弄错,WatiN显式是单线程[STApartment] - http://watin.org/documentation/sta-apartmentstate/ 如果您希望进行此类测试,我相信您需要在操作系统级别进行单独的过程。 我无法确定你是否接近这个要求,但我建议单个浏览器的单个实例(它是后代的windows / processess)。

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