51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5987|回复: 10
打印 上一主题 下一主题

RFT中iframe里面嵌套的控件要怎么才能识别?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-6-20 17:35:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在用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 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2007-6-21 22:32:27 | 只看该作者
我发现不是iframe的问题,是iframe中的页面是动态生成的,导致控件不能识别。
需要使用testobject.find技术来识别,试了一下,没有成功。
需要继续琢磨。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-6-22 08:34:37 | 只看该作者
find肯定应该可以找到的,查查看是不是回放太快了?
价格wait试试看。另外,是否能把你的代码贴一下。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-6-22 08:39:27 | 只看该作者
再不行,就用ANY,NO_FLAGS试试看。
比如。
button_spifbutton(ANY,NO_FLAGS).click();
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-6-22 10:50:13 | 只看该作者
用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[0].getProperties();
                 Enumeration   enumer   =   hashKey.keys();
              while   (enumer.hasMoreElements())   {   
         Object   key   =   enumer.nextElement();   
         System.out.println(key   +   "="   +   hashKey.get(key));
              }
                return new WTextField(to[0]);
        }



调用代码:
        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] [脚本“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

但结果还是报错。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-6-22 12:57:03 | 只看该作者
把你MI的东东先卸载吧。呵呵:)
脚本“testcases.TS_QueryFlowInstance”的第 49 行是哪行?
你能不能把代码放到一起,你这样调用是不行的。
fim.getText_instanceId().waitForExistence();
如果fim.getText_instanceId()有返回对象,根本就不用等,如果没有,你这样写,估计一辈子也等不出来吧?
先把root那些放到testMain里面去吧,把代码和错误信息贴清楚,49行估计不是setText这行吧?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2007-6-22 20:14:57 | 只看该作者
这个跟MI的东东有关??

fim.getText_instanceId().waitForExistence();
是等待控件出现,但也不是一直等待下去的,等待的最长时间可以在设置中配置的,超过这个时间也就失败了!

下周上班的时间再调调看了。

很感谢lovetest6 的回答^_^
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-6-25 08:40:22 | 只看该作者
fim.getText_instanceId().waitForExistence();
是等待控件出现。

这个倒是没错。但是API里面没说waitForExistence()能自动调用你的find吧?呵呵。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2007-6-26 16:38:25 | 只看该作者
问了IBM的工程师,说可能是版本要升级,要升级到RFT7.0.2的版本。
下载了一个,结果安装出了问题,还在折腾中。。。。sdlkfj7
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-9-4 18:01:22 | 只看该作者
你安装的mi路径太深了
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-10-14 14:43:25 | 只看该作者
.find()找到的控件不可以用waitForExistence方法。
如果是在等待页面loading,可以用判断浏览器的状态方法。.readyState 为4的时候页面load完全。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-9 10:39 , Processed in 0.068138 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表