51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4882|回复: 12
打印 上一主题 下一主题

能否通过语句修改ObjectMap里的控件属性?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-12-17 18:20:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前用Robot,都是靠语句识别的。现在用RFT,不知道能不能用语句来修改ObjectMap里的控件属性,或者批量修改控件属性也行,有没有这方面研究过的朋友帮忙解答一下呗。



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

使用道具 举报

该用户从未签到

2#
发表于 2008-12-18 11:43:35 | 只看该作者
修改属性的话可以用object.setProperty()方法,具体的可以看一下API文档,里面已经说的很详细了.
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2008-12-19 13:19:48 | 只看该作者
谢谢指明方向!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2008-12-30 13:56:34 | 只看该作者
依然遇到了问题  SetProperty的工作方法好像是先识别object然后对这个object的属性进行修改,基本用在改editbox的值之类的地方:

setProperty
public void setProperty(java.lang.String propertyName,
                        java.lang.Object value)Sets the specified property to the specified value. Note that this directly modifies the object in the software under test; therefore, it should be done with extreme care. Avoid using setProperty whenever possible because it allows you to modify the software under test in ways that a typical user cannot. If you use this method, be sure to discuss its use with the developers of the software you are testing.
A common use for this method is to set the text value of an input or edit control. This may be simpler and more reliable than playing back a sequence of keys to update the control. However, you should be aware that even in this simple use case, there may be problems. For example, the developer may watch the keys going to the control and may have code to prevent certain characters from appearing. By setting the property directly, you may be circumventing the normal error handling.

Most commonly, the value is a value class - an object that can be recreated in the process of the software under test. However, the value can also be a TestObject containing a reference to an object in the software under test, for example, a TestObject returned by a previous call to getProperty.


Parameters:
propertyName - the name of the property
value - the value used to set the property

这个和我的想法不大一样,我是想不需要判断当前object是否存在而直接修改ObjectMap里object的某个属性然后应用到后面的测试中,类似于将object的某个属性设置成变量,可以对其进行赋值。我不像修改被测试程序的object的属性,而是修改RFT的ObjectMap中的Object识别的属性来适应不同的Objject 比如不同语言版本中的同一个Button,他们的text不同,我想跑不同的语言的时候调相应的text值来识别控件。

有对这方面研究过的么?谢谢先!
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2009-1-4 14:14:03 | 只看该作者
其实是没关系的,比如说对于一个button对象来说,用对象检查器可以看到他的两个主要属性(只是举例),分别是.id = submit,.text= 确定,那么识别的时候我们可以用.id属性来找到这个对象,然后修改.text属性嘛,也就是用A属性来识别对象,然后根据我们的需要修改其B属性
QTP的对象地图中可以将一个对象任意的属性进行参数化,同时也提供了描述性编程的方法;RFT我用的不多,不知道这个工具是否提供了对象地图参数化的功能,但是我觉的用find方法应该能实现你的需求
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2009-1-4 18:02:16 | 只看该作者
可以这样,先确定对象是否存在,然后再修改属性。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2009-1-5 09:13:18 | 只看该作者
"以用.id属性来找到这个对象,然后修改.text属性嘛,也就是用A属性来识别对象,然后根据我们的需要修改其B属性"
这样的话直接用.id或者.associatedID属性直接识别也成,但是我想根据.text来做主要识别,否则修改.text就没啥意义了。
另外我用的脚本语言是VB,http://www.ibm.com/developerwork ... i-ujjwal/index.html 这篇文章里用Java做了示范,我没大看懂,只是大概了解了思路。像Dreamever说的那样,我想做到的就是对象地图参数化的功能,同样我也不知道用RFT的VB怎么做...
Find方法?可否详细说一下方向?
thx!
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-2-1 09:13:13 | 只看该作者
终于明白了楼主的意思了,你想实现的就是对象参数化的需求。首先看一下find方法的用法:
RootTestObject  root = this.getRootTestObject;
TestObject[] to = root.find(atDescant(".id","submit");
上面两句的作用是找出页面中所有属性名为 id  并且值为submit的对象,并将所有的对象存到一个数组中去,我们访问的时候使用索引就可以,例如如果界面中i个对象,那么我们访问时就可以使用to[i-1].click()这样的形式来写。
我们可以使用一个for循环来实现我们需要的对象参数化的功能,当然首先需要准备参数化的数据,我们也可以把它存到一个字符串数组中去,然后使用find方法来识别,下面这段代码你可以参考一下:
String[] paremt = {"确定","取消","登录"}
for(int i =0 ;i < paremt.length; i++{
    RootTestObject  root = this.getRootTestObject;
    TestObject[] to = root.find(atDescant(".id",paremt [ i ] ));
    /*以下代码默认访问对象数组中的第一个对象*/
    to[0].click();
}
QTP中可以直接对象地图进行参数化,我不清楚RFT的GUI界面是否提供了类似的功能,看看其他人有什么想法吧。

[ 本帖最后由 dreamever 于 2009-2-1 09:14 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2009-2-10 11:05:02 | 只看该作者
过年一直没关注此贴 谢谢大家回复 顺便拜个晚年~

谢谢 dreamever 我去试一下! 最好RFT提供地图进行参数化...我找找...
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2009-2-28 16:06:10 | 只看该作者
有个GetPropertyFromMap  咋就没有SetPropertyToMap啊
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2009-3-4 15:41:02 | 只看该作者
使用参数化对象识别应使用和find有关的方法,不需要使用和Map有关的方法。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2009-3-6 10:18:34 | 只看该作者
没办法啊 上头要用ObjectMap 整个framework就是这么安排的
现在我想写个工具 直接修改ObjectMap文件(XML格式) 还是有问题 慢慢来吧

目前的问题是 一样的Object属性 换了一个语言的app就找不到MenuBar了 然后Update Recognition Properties 从新抓以后 根本没有变化...属性都一样 然后就能识别了 是不是有什么隐藏属性需要更新?
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2009-3-6 11:32:10 | 只看该作者
解决了 。。。点了一下Root Object(就是最外面的window)就解决了 好奇怪啊...
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-9 10:35 , Processed in 0.404178 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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