WatiN实战

WatiN是开源的.net Web自动化测试工具。
下文中记录了一些常见的问题的处理。感谢原作者。
本人在使用WatiN时,发现其在IE9下,取Iframe中嵌套的Iframe里的控件时,产生错误。下了源码研究了一翻,貌似是IE的问题,这里希望有高人帮助解决。
目前我采用执行JS的方法,绕过了此问题。 记录在此,希望对大家有帮助。 主要是在WatiN的源码Document类中增加了三个方法:
1 /// <summary>
2 /// 给iframe中的某控件赋值
3 /// </summary>
4 /// <param name="frameId"></param>
5 /// <param name="inputId"></param>
6 /// <param name="value"></param>
7   public virtual void FrameValue(string frameId, string inputId, string value)
8 {
9 string js = string.Format("$('#{0}',$('#{1}')[0].contentWindow.document).val('{2}');" , inputId , frameId , value );
10 this.RunScript(js);
11 }
12
13 /// <summary>
14 /// 给iframe中的某元素改变html
15 /// </summary>
16 /// <param name="frameId"></param>
17 /// <param name="elementId"></param>
18 /// <param name="value"></param>
19 public virtual void FrameHtml(string frameId, string elementId, string value)
20 {
21 string js = string.Format("$('#{0}',$('#{1}')[0].contentWindow.document).html('{2}');", elementId, frameId, value);
22 this.RunScript(js);
23 }
24
25 /// <summary>
26 /// 模拟点击iframe中的元素
27 /// </summary>
28 /// <param name="frameId"></param>
29 /// <param name="buttonId"></param>
30 public virtual void FrameClick(string frameId, string buttonId)
31 {
32 string js = string.Format("var btn = $('#{0}',$('#{1}')[0].contentWindow.document); btn.click();", buttonId, frameId);
33 this.RunScript(js);
34 }
35
36 /// <summary>
37 /// 等待
38 /// </summary>
39 /// <param name="seconds"></param>
40 public virtual void Wait(int seconds)
41 {
42 try
43 {
44 this.WaitUntilContainsText("无字天书无敌天下", seconds);
45 }
46 catch (Exception)
47 {
48 }
49 }
最后一个等待的方法比较丑陋,也是无耐之举,希望有高手帮助解决。  
PS: 文中 的JS需要 Jquery库的支持。 无JQuery库也可实现,写法稍有差异。
posted @ 2011-03-29 11:03  David.Yang  阅读(2283)  评论(18编辑  收藏  举报