c# - Watin新版本2.1访问Frames时出错

标签 c# watin

Watin 2.1新版本访问ie.Frames报错

错误详细信息:无法使用与其底层 RCW 分离的 COM 对象。

    System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used.
   at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, Boolean& pfNeedsRelease)
   at mshtml.HTMLFrameElementClass.IHTMLElement_get_tagName()
   at WatiN.Core.Native.InternetExplorer.IEElement.get_TagName()
   at WatiN.Core.ElementTag.FromNativeElement(INativeElement nativeElement)
   at WatiN.Core.StaticElementFinder.CreateTagList(INativeElement nativeElement)
   at WatiN.Core.StaticElementFinder..ctor(DomContainer domcontainer, INativeElement nativeElement)
   at WatiN.Core.Element.InitElement(DomContainer domContainer, INativeElement nativeElement, ElementFinder elementFinder)
   at WatiN.Core.Element..ctor(DomContainer domContainer, INativeElement nativeElement)
   at WatiN.Core.Frame..ctor(DomContainer domContainer, INativeDocument frameDocument)
   at WatiN.Core.FrameCollection..ctor(DomContainer domContainer, INativeDocument htmlDocument)
   at WatiN.Core.Document.get_Frames()

请帮我解决这个问题。

最佳答案

我使用 Praveen 的建议修改了 AllFramesProcessor 的代码(见下文)。

在执行此操作之前,我在 Watin 主干上执行了 SVN 更新。 Jeroen 于 2011 年 4 月 18 日进行了检查,修复了 WaitForFramesToComplete 以重试/等待加载主文档的问题。仅靠 Jeroen 的修复并不能解决问题,但我相信正是该代码与修改后的 AllFramesProcessor 的结合使 Watin 在 Frames 问题上更加稳定。

public AllFramesProcessor(HTMLDocument htmlDocument)
{
    Elements = new List<INativeDocument>();
    _htmlDocument = htmlDocument;

    // Bug fix, trying to revert back to previous version
    // http://stackoverflow.com/questions/5882415/error-when-accessing-the-frames-in-watin-new-version-2-1
    //_iFrameElements = (IHTMLElementCollection)htmlDocument.all.tags("iframe");

    _iFrameElements = (IHTMLElementCollection)_htmlDocument.all.tags("frame");

    // If the current document doesn't contain FRAME elements, it then
    // might contain IFRAME elements.
    if (_iFrameElements.length == 0)
    {
        _iFrameElements = (IHTMLElementCollection)_htmlDocument.all.tags("iframe");
    }
}

关于c# - Watin新版本2.1访问Frames时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882415/

相关文章:

c# - 使用 watin 打开新的资源管理器窗口时鼠标指针跳到左上角

c# - 如何使用接受 Dapper.Contrib 方法的集合?

c# - 将长嵌套的 Excel 公式转换为 C#

internet-explorer - 在 watin 测试期间 IE 实例未停止的 Team City 问题

collections - WatiN:如何从单选按钮组中选中一个单选按钮

c# - 如何在Watin等候回邮?

c# - 有条件地添加一个新的 json.net JProperty

c# - 如何使窗口可拖动(C# Winforms)?

c# - 测试百分比计算器

c# - watin Attachto 嵌入式浏览器