能否通过语句修改ObjectMap里的控件属性?
以前用Robot,都是靠语句识别的。现在用RFT,不知道能不能用语句来修改ObjectMap里的控件属性,或者批量修改控件属性也行,有没有这方面研究过的朋友帮忙解答一下呗。谢谢先! 修改属性的话可以用object.setProperty()方法,具体的可以看一下API文档,里面已经说的很详细了. 谢谢指明方向! 依然遇到了问题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值来识别控件。
有对这方面研究过的么?谢谢先! 其实是没关系的,比如说对于一个button对象来说,用对象检查器可以看到他的两个主要属性(只是举例),分别是.id = submit,.text= 确定,那么识别的时候我们可以用.id属性来找到这个对象,然后修改.text属性嘛,也就是用A属性来识别对象,然后根据我们的需要修改其B属性
QTP的对象地图中可以将一个对象任意的属性进行参数化,同时也提供了描述性编程的方法;RFT我用的不多,不知道这个工具是否提供了对象地图参数化的功能,但是我觉的用find方法应该能实现你的需求 可以这样,先确定对象是否存在,然后再修改属性。 "以用.id属性来找到这个对象,然后修改.text属性嘛,也就是用A属性来识别对象,然后根据我们的需要修改其B属性"
这样的话直接用.id或者.associatedID属性直接识别也成,但是我想根据.text来做主要识别,否则修改.text就没啥意义了。
另外我用的脚本语言是VB,http://www.ibm.com/developerworks/rational/library/07/0925_mirchandani-ujjwal/index.html 这篇文章里用Java做了示范,我没大看懂,只是大概了解了思路。像Dreamever说的那样,我想做到的就是对象地图参数化的功能,同样我也不知道用RFT的VB怎么做...
Find方法?可否详细说一下方向?
thx! 终于明白了楼主的意思了,你想实现的就是对象参数化的需求。首先看一下find方法的用法:
RootTestObjectroot = this.getRootTestObject;
TestObject[] to = root.find(atDescant(".id","submit");
上面两句的作用是找出页面中所有属性名为 id并且值为submit的对象,并将所有的对象存到一个数组中去,我们访问的时候使用索引就可以,例如如果界面中i个对象,那么我们访问时就可以使用to.click()这样的形式来写。
我们可以使用一个for循环来实现我们需要的对象参数化的功能,当然首先需要准备参数化的数据,我们也可以把它存到一个字符串数组中去,然后使用find方法来识别,下面这段代码你可以参考一下:
String[] paremt = {"确定","取消","登录"}
for(int i =0 ;i < paremt.length; i++{
RootTestObjectroot = this.getRootTestObject;
TestObject[] to = root.find(atDescant(".id",paremt [ i ] ));
/*以下代码默认访问对象数组中的第一个对象*/
to.click();
}
QTP中可以直接对象地图进行参数化,我不清楚RFT的GUI界面是否提供了类似的功能,看看其他人有什么想法吧。
[ 本帖最后由 dreamever 于 2009-2-1 09:14 编辑 ] 过年一直没关注此贴 谢谢大家回复 顺便拜个晚年~
谢谢 dreamever 我去试一下! 最好RFT提供地图进行参数化...我找找... 有个GetPropertyFromMap咋就没有SetPropertyToMap啊 :Q 使用参数化对象识别应使用和find有关的方法,不需要使用和Map有关的方法。 没办法啊 上头要用ObjectMap 整个framework就是这么安排的
现在我想写个工具 直接修改ObjectMap文件(XML格式) 还是有问题 慢慢来吧
目前的问题是 一样的Object属性 换了一个语言的app就找不到MenuBar了 然后Update Recognition Properties 从新抓以后 根本没有变化...属性都一样 然后就能识别了 是不是有什么隐藏属性需要更新? 解决了 。。。点了一下Root Object(就是最外面的window)就解决了 好奇怪啊...
页:
[1]