RFT中iframe里面嵌套的控件要怎么才能识别?
在用RFT时,控件的map图入下,在页面中嵌套了一个iframe,里面有text控件instanceId。在脚本回放时认不到控件,错误提示如下:
失败 2007年6月20日 下午05时07分30秒 testcases.TC_FlowInstanceManagerQuery.testMain 有未经处理的异常。
exception_context = 在“ibm.widgets.WTextField(名称:text_instanceId,映射:text)”上调用了 click()。
exception_name = com.rational.test.ft.UnsupportedActionException
exception_message = 找不到对象的屏幕点
script_name = testcases.TC_FlowInstanceManagerQuery
script_id = testcases.TC_FlowInstanceManagerQuery.java
line_number = 38
exception_stack = at com.rational.test.ft.domain.html.HtmlGuiProxy.noScreenPointFoundForAction(HtmlGuiProxy.java:2022)
at com.rational.test.ft.domain.html.HtmlGuiProxy.click(HtmlGuiProxy.java:172)
at com.rational.test.ft.domain.html.HtmlGuiProxy.click(HtmlGuiProxy.java:147)
------------------------------
------------------------------
at com.rational.test.ft.object.interfaces.GuiTestObject.click(GuiTestObject.java:337)
at ibm.widgets.ancestors.Widget.silentClick(Widget.java:163)
at ibm.widgets.WTextField.setText(WTextField.java:145)
at testcases.TC_FlowInstanceManagerQuery.testMain(TC_FlowInstanceManagerQuery.java:38)
at testcases.TS_QueryFlowInstance.testMain(TS_QueryFlowInstance.java:49)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
[ 本帖最后由 fzxugang 于 2007-6-20 17:37 编辑 ] 我发现不是iframe的问题,是iframe中的页面是动态生成的,导致控件不能识别。
需要使用testobject.find技术来识别,试了一下,没有成功。
需要继续琢磨。 find肯定应该可以找到的,查查看是不是回放太快了?
价格wait试试看。另外,是否能把你的代码贴一下。 再不行,就用ANY,NO_FLAGS试试看。
比如。
button_spifbutton(ANY,NO_FLAGS).click(); 用find来查找对象的代码
public WTextField getText_instanceId() {
RootTestObject root = getRootTestObject();
TestObject[] to = root.find(atDescendant(".class","Html.INPUT.text",
".id","queryForm:instanceId"));
//这里遍历了一遍link对象的Properties,方便在调试的时候检查对象是否是你想得到的。
Hashtable hashKey = to.getProperties();
Enumeration enumer = hashKey.keys();
while (enumer.hasMoreElements()) {
Object key = enumer.nextElement();
System.out.println(key + "=" + hashKey.get(key));
}
return new WTextField(to);
}
调用代码:
public void testMain(Object[] args)
{
FlowInstanceManager fim = new FlowInstanceManager();
// TODO 在此插入代码
fim.getText_instanceId().waitForExistence();
fim.getText_instanceId().setText("1111");
fim.getButton_queryBtn().click();
}
执行后打印出属性有这两个值:
.....
.offsetTop=1
onpage=null
.id=queryForm:instanceId
ondeactivate=null
.class=Html.INPUT.text
onkeydown=null
language=
.......
ondataavailable=null
回放脚本期间发生异常: [脚本“testcases.TS_QueryFlowInstance”的第 49 行上的 RationalTestScriptException - com.rational.test.ft.UnsupportedActionException:找不到对象的屏幕点。]。
Letting agent QTJA do the transformation
Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook
Picked up _JAVA_OPTIONS: -Xrunjvmhook -Xbootclasspath/a:C:\PROGRA~1\COMMON~1\MERCUR~1\FUNCTI~1\Java\classes;C:\PROGRA~1\COMMON~1\MERCUR~1\FUNCTI~1\Java\classes\jasmine.jar
但结果还是报错。 把你MI的东东先卸载吧。呵呵:)
脚本“testcases.TS_QueryFlowInstance”的第 49 行是哪行?
你能不能把代码放到一起,你这样调用是不行的。
fim.getText_instanceId().waitForExistence();
如果fim.getText_instanceId()有返回对象,根本就不用等,如果没有,你这样写,估计一辈子也等不出来吧?
先把root那些放到testMain里面去吧,把代码和错误信息贴清楚,49行估计不是setText这行吧? 这个跟MI的东东有关??
fim.getText_instanceId().waitForExistence();
是等待控件出现,但也不是一直等待下去的,等待的最长时间可以在设置中配置的,超过这个时间也就失败了!
下周上班的时间再调调看了。
很感谢lovetest6 的回答^_^ fim.getText_instanceId().waitForExistence();
是等待控件出现。
这个倒是没错。但是API里面没说waitForExistence()能自动调用你的find吧?呵呵。 问了IBM的工程师,说可能是版本要升级,要升级到RFT7.0.2的版本。
下载了一个,结果安装出了问题,还在折腾中。。。。sdlkfj7 你安装的mi路径太深了 .find()找到的控件不可以用waitForExistence方法。
如果是在等待页面loading,可以用判断浏览器的状态方法。.readyState 为4的时候页面load完全。
页:
[1]