RFT的異常處理方式
在RFT中,異常處理的方式與QTP有所不同。QTP中的異常處理主要依賴VB Script的On Error Resume Next以及恢復場景(Recovery Scenario)的機制。
在RFT中,由於指令碼繼承於RationalTestScript,因此處理可以在指令碼中使用JAVA的try-catch語句做一般的異常處理外,還可以重寫IobjectManagerEventListener介面的各種事件,例如找到多個相同物件時的onAmbiguousRecognition事件、找不到物件時的onObjectNotFound事件等。
下面的指令碼重寫了onAmbiguousRecognition事件進行定製處理,testObjectMethodState物件的findObjectAgain方法讓RFT再次查詢物件。
public void onAmbiguousRecognition(ITestObjectMethodState testObjectMethodState,
TestObject[] choices,
int[] scores)
{
System.out.println("有"+choices.length+"個相同的物件!");
for(int i=1;i<choices.length;i++)
{
TopLevelSubitemTestObject window = (TopLevelSubitemTestObject)choices[i];
window.close();
}
// 再次查詢物件
testObjectMethodState.findObjectAgain();
}
以下指令碼重寫了onObjectNotFound事件。(參考RFT的幫助文件Handling unexpected active window)
/**
* Overrides the base implementation of onObjectNotFound. Whenever
* this event occurs, look through all the active domains (places
* where objects might be found). For HTML domains (Java
* and other domains are skipped) finds all the top objects.
* If the top object is an Html Dialog,
* types an Enter key to dismiss the dialog.
* Logs a warning when this happens.
*/
public void onObjectNotFound(ITestObjectMethodState testObjectMethodState)
{
if (!testObjectMethodState.getTestObject().
getPropertyFromMap(IMapPropertyName.DOMAIN).equals("Html"))
{
return;
}
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("HtmlScript.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("HtmlScript.onObjectNotFound; no Html Dialog to dismiss");
}
}
相關文章
- 異常-throws的方式處理異常
- 異常處理方式throws
- 異常-try...catch的方式處理異常1
- 異常-try...catch的方式處理異常2
- 什麼是異常?python處理異常的方式有幾種?Python
- 用Kotlin的方式來處理網路異常Kotlin
- 異常的處理
- 異常篇——異常處理
- JDK執行緒池異常處理方式JDK執行緒
- Java異常處理的兩種方式以及自定義異常的使用方法Java
- 異常處理
- 執行緒池異常處理的 5 中方式執行緒
- JSP 異常處理如何處理?JS
- React 異常處理React
- JS異常處理JS
- oracle異常處理Oracle
- Python——異常處理Python
- Python異常處理Python
- ThinkPHP 異常處理PHP
- JavaScript 異常處理JavaScript
- JAVA 異常處理Java
- golang - 異常處理Golang
- 異常處理2
- 異常處理1
- Java 異常處理Java
- Abp 異常處理
- JAVA異常處理Java
- 08、異常處理
- SpringMVC異常處理SpringMVC
- 異常處理機制(二)之異常處理與捕獲
- Java 異常表與異常處理原理Java
- restframework 異常處理及自定義異常RESTFramework
- springboot下新增全域性異常處理和自定義異常處理Spring Boot
- NodeJS之異常處理NodeJS
- JAVA_異常處理Java
- React Native 異常處理React Native
- Spring Boot 異常處理Spring Boot
- PHP 核心 - 異常處理PHP
- GRpc異常處理FilterRPCFilter