1.ie.waitforcomplete 和 thread.sleep 的使用
上述的两个方法,用来等待ie的加载
watin的专门的waitforcomple通过侦探ie的busy和ready状态来判断,实际使用时候有自己的局限性
一 般而言可以用ie.waitforcomplete来代替sleep,后来发现如果有类似AJAX postbacks之类的请求时,不是ie的状态能指出的,也即是ie.waitforcomplete失效,此时加上assert断言,页面加载并没有 完成,必须手动来sleep足够的时间
譬如 Atlas UpdatePanel 控件,就必须sleep
当然,还有一个解决办法,就是在ajax之类的postback后,页面肯定存在或肯定不存在的控件的值或状态,譬如
- 1.look for an element that will exist after the "AJAX postback":
ie.Element(findBy).WaitUntilExists();
- 2. wait until an element does not exist anymore
ie.Element(findBy).WaitUntilRemoved();
- 3. wait until an element has a certain (known) value that indicates the "AJAX postback" has finished:
ie.Element(Find.ById("...") && Find.ByCustom("atributename","knownvalue").WaitUntilExists();
1.1版本的解决方法:
ie.Element(Find.ById("...")).WaitUntil(Find.ByCustom("atributename","known value");
---------------------------
2 如果发现watin不支持的html标签时
例如 nobr ,可以自定义一个属性 new Attribute()
注意system也有这个System.Attribute,所以要加上全部的限定符
ElementCollection nobrElements = ie.Elements.Filter(new
WatiN.Core.Attribute("tagname", new
StringEqualsAndCaseInsensitiveComparer("nobr")));
//从控制台检查是否找到了对应的值
for(int i=0;i Console.WriteLine(nobrElements.InnerHtml);
----------------------------------
3. 事件的精确控制
譬如当新开页面关闭自己并刷新父页面时候,新开的页面的“保存并关闭”按钮的前台事件可以简单的通过调用
similarSuspectIE.Button("ctl00_MainContentPlaceHolder_Save").FireEventNoWait("onclick");
FireEventNoWait会只触发指定元素的指定事件并忽略waitForComplete(该返回值在弹出窗口的处理上,没有考虑很周全),在面临开了2个以上新窗口,并依次关闭且刷新父页面的情况下,会让测试走过去 --!以往的测试策略无法走通
这个是公安网办 新建嫌疑人-->编辑 -->类似嫌疑人对比 ,然后关闭类似嫌疑人页面,自动关闭当前页面并依次刷新父页面碰到的问题
----------------------------------
4. confirm等modeless弹出窗口以及弹出的ie窗口的定位
confirm窗口:
//注册Confirm窗口处理方法
ConfirmDialogHandler deleteConfirm = new ConfirmDialogHandler();
ie.AddDialogHandler(deleteConfirm);
//删除按钮,弹出Confirm对话框
//出现Model类型对话框时候,如Confirm、Alert等,父窗口的按钮点击事件必须为ClickNoWait()
ie.Button("ctl00_MainContentPlaceHolder_FoldingPanel2_Delete_Button2").ClickNoWait();
//确认删除
deleteConfirm.WaitUntilExists();
deleteConfirm.OKButton.Click();
//有忽略弹出的Confirm引起的ie返回状态代码和平时不一致的作用
ie.WaitForComplete();
弹出新ie窗口的定位:
IE newIE= IE.InternetExplorers()[IE.InternetExplorers().Length - 1];
WatiN的一些应用技巧总结
最新推荐文章于 2024-09-07 17:02:25 发布