RFT处理未预料的活动窗口(代码收藏二)
上一篇 / 下一篇 2008-06-17 13:58:05 / 个人分类:Rational
1208328177
- 自动化测试:
- 测试文档:
5.处理未预料的活动窗口
由于浏览器安全等级改变或切换页面造成警告
录制的可能脚本
linkThatLeavesSecurePage().click();
Dialog_HtmlDialogButtonOK().click();
CheckboxOnTheUnsecurePage().click();
一个解决办法就是等待消息出现,如果没有出现,你就可以继续了。可以通过以下代码解决
linkThatLeavesSecurePage().click();
try
{
Dialog_HtmlDialogButtonOK().click();
} catch(ObjectNotFoundException e) {}
CheckboxOnTheUnsecurePage().click();
以上办法解决了主要目标,如果警告消息出现,我们解除了它;如果没有出现,我们最后停止等待并继续。如果我们知道警告消息大概在多少秒后出现,我们可以通过以下方法解决
linkThatLeavesSecurePage().click();
try
{
Dialog_HtmlDialogButtonOK().waitForExistence(5,1);
Dialog_HtmlDialogButtonOK().click();
}
catch(ObjectNotFoundException e) {}
CheckboxOnTheUnsecurePage().click();
最好的解决办法:在helper super scrīpt里添加执行,然后继承这个helper super class来处理脚本中的事件。下面为一个例子,代码实现了一个基础类,基础类实现了方法onObjectNotFound;这个方法检查所有HTML域和对话框。如果有警告就处理,没有就继续运行回放。
import com.rational.test.ft.scrīpt.*;
import com.rational.test.ft.object.interfaces.*;
public abstract class Htmlscrīpt extends RationalTestscrīpt
{
public void onObjectNotFound(ITestObjectMethodState testObjectMethodState)
{
boolean dismissedAWindow = false;
DomainTestObject domains[] = getDomains();
for (int i = 0; i < domains.length; ++i)
{
if (domains[i].getName().equals("Html"))
{
// HTML domain is found.
TestObject[] topObjects = domains[i].getTopObjects();
if (topObjects != null)
{
try
{
for (int j = 0; j < topObjects.length; ++j)
{
if (topObjects[j].getProperty(".class").equals("Html.Dialog"))
{
// A top-level HtmlDialog is found.
logWarning("Htmlscrīpt.onObjectNotFound - dismissing dialog.");
try
{
dismissedAWindow = true;
((TopLevelTestObject)topObjects[j]).inputKeys("{enter}");
}
catch(RuntimeException e) {}
}
}
}
finally
{
//unregister all references to top objects
unregister(topObjects);
}
}
}
}
if (dismissedAWindow)
{
// try again
testObjectMethodState.findObjectAgain();
}
else
{
logWarning("Htmlscrīpt.onObjectNotFound; no Html Dialog to dismiss");