请教各位大神,WatiN遇到一个报错【COM对象与其基础RCW分开后就不能再使用】,真心求问如何解决,困扰很久了

时间:2021-04-19 20:15:23
public void LinkClickByID(IE ie, string frmName, string linkId)
        {
            this.preOperate(ie);
            Log.OutPut("点击Link,ID=" + linkId);
            ie.Frame(MainFrameName).Frame(Find.ByName(frmName)).Link(Find.ById(linkId)).Click();//这行报错【COM对象与其基础RCW分开后就不能再使用】
        }

下面是其中的一个方法,operate是操作界面控件的封装类,执行那些界面操作的时候,会报错,而且是会随即某个控件报错
  public static void Run(IE ie)
        {
            iniOperate inioperate = new iniOperate(Environment.CurrentDirectory+"\\ConfigFile\\UserConfig.ini");
            OperateContorl operate = new OperateContorl();
            //从配置文件中读取数据
            string taskName = inioperate.ReadValue("TaskCreat", "TaskName");
            string taskComments = inioperate.ReadValue("TaskCreat", "TaskComments");
            string pkgName = inioperate.ReadValue("TaskCreat", "PkgName");
            string siteName = inioperate.ReadValue("TaskCreat", "SiteName");
            //点击按钮
            operate.LinkClickByID(ie, "leftFrame", "createTaskId");
            //设置相关界面数据
            operate.SetTextValueByID(ie, "contentFrame", "taskName", taskName);
            operate.SetTextValueByID(ie, "contentFrame", "taskDesc", taskComments);
            operate.SelectListByID(ie, "contentFrame", "pkgPath", pkgName);
            operate.SelectListByName(ie, "contentFrame", "siteId", siteName);     
            //点击下一步按钮
            operate.ButtonClickByName(ie, "down_btn");
        }

请教各位大神有没有解决方法,万分感谢

4 个解决方案

#1


感觉是你用的com组件已经被释放,

#2


引用 1 楼 hdt 的回复:
感觉是你用的com组件已经被释放,

是的 但是不知道是什么原因导致了com呗释放,而且存在随机性

#3


至于何时被释放,只能看你的代码,加上调试才能清楚

#4



 IE newie = IE.AttachTo<IE>(Find.ByUrl("http://10.137.206.183:18080/ideploy/main.jsp"));

 public void preOperate(IE ie)
        {
            for (int j = 0; j < ie.Frame(MainFrameName).Elements.Count; j++)
            {
                //Console.Write(ie.Frame(MainFrameName).Elements[j].Id+",");
            }
                   }


 operate.SetTextValueByID(ie, "contentFrame", "taskName", taskName);


我再控件操作(按钮点击,文本输入)之前加了preOperate这个方法后出现随机性的,如果把这个方法删了,就肯定报错,这好奇怪啊

#1


感觉是你用的com组件已经被释放,

#2


引用 1 楼 hdt 的回复:
感觉是你用的com组件已经被释放,

是的 但是不知道是什么原因导致了com呗释放,而且存在随机性

#3


至于何时被释放,只能看你的代码,加上调试才能清楚

#4



 IE newie = IE.AttachTo<IE>(Find.ByUrl("http://10.137.206.183:18080/ideploy/main.jsp"));

 public void preOperate(IE ie)
        {
            for (int j = 0; j < ie.Frame(MainFrameName).Elements.Count; j++)
            {
                //Console.Write(ie.Frame(MainFrameName).Elements[j].Id+",");
            }
                   }


 operate.SetTextValueByID(ie, "contentFrame", "taskName", taskName);


我再控件操作(按钮点击,文本输入)之前加了preOperate这个方法后出现随机性的,如果把这个方法删了,就肯定报错,这好奇怪啊