刚开始以为FreeTextBox控件对应到WatiN中的TextField类,实际上FreeTextBox使用了iframe的技术(可以通过IEDevToolBar来察看,这个工具可以在微软网站上下载),而iframe对应到WatiN中的Frame类。当使用TextField来给FreeTextBox控件赋值的时候会出现System.Runtime.InteropServices.COMException异常:ditional information: Can't move focus to the control because it is invisible, not enabled, or of a type that does not accept the focus.
        而FreeTextBox控件的编辑器实际上是一个iframe对象,html如下所示(xxx为控件ID):
<IFRAME class="xxx_DesignBox" id="xxx_designEditor" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; WIDTH: 100%; PADDING-TOP: 0px; HEIGHT: 199px" src="about:blank"></IFRAME>
        因此,采用Frame类来获取FreeTextBox的相关信息。代码如下:
frame = ie.Frame( "xxx_designEditor" )
   frame.HtmlDocument.body.innerHTML = "详细要求:<br/>(略)";
Frame类的ID为FreeTextBox控件的ID和_designEditor的组合。Frame类不像TextField类,没有TypeText()方法。所以只能使用innerHTML给其赋值。运行的时候会看到WatiN给FreeTextBox控件赋值了,但由于在此FreeTextBox控件上应用了RequireFieldValidator,验证通不过,说明还有问题!在调试的过程中发现,只要切换到Html模式,验证就通过了,于是再增加一行切换代码。
        完整的代码如下(xxx为控件ID)::
            Frame frame = null;
            frame 
= ie.Frame( "xxx_designEditor" );
            frame.HtmlDocument.body.innerHTML 
= "自动测试项目<br/>详细要求:(略)";
            ie.TableCell( 
"xxx_htmlModeTab" ).Click( );    

        感谢风生水起WatiN的介绍
        觉得WatiN比Nunitasp的代码简洁一下。另外不清楚怎么自动响应alert/confirm/fileupload之类的对话框,使用WatiN的测试代码不行,哪位知道不妨告知一声!
posted on 2007-03-28 13:28  分享 共赢  阅读(2355)  评论(7编辑  收藏  举报