修改测试对象的属性值(SetTOProperty Method )与Run-time对象的属性值的区别
上一篇 /
下一篇 2007-05-22 13:43:27
/ 个人分类:QTP
修改测试对象的属性值(SetTOProperty Method )与Run-time对象的属性值的区别(一)通过SetTOProperty方法,可以修改测试对象(指对象仓库中的对象)的属性值;测试对象还有一个“Properties”,叫Object,通过它,可以修改Run-time对象(指应用程序中的对象)的属性值。参考下图。
以下面的一个WebElement对象为例,介绍二者的区别:
上面的那个控件,无法通过正常录制的方法捕捉到,同时也无法录制键盘输入文字的操作。
现在希望能通过脚本,自动完成文字录入操作,只能通过手工的方法,先将对象加入到对象库中,然后手工添加脚本代码。
将对象加入到对象库中的操作如下(QTP9.0):
(1). 菜单中选择Resouces>Object Repository,打开对象仓库管理器。
(2). 点击按钮,将对象加入到仓库中,如图下图1。对象Class为WebElement。
(3). 将对象的Enable Smart Identification值设置为False,如图2。
从上图可以看出,程序中该控件的输入内容全部可在“innertext”属性值中显示。因此应该可以通过修改innertext值,来模拟用户的文本输入操作。
我们可以先了解一下WebElement测试对象的属性,如下图。
上图中的属性值都可以通过测试通过的Settoproperty进行修改。如果在脚本中用SetToProperty对测试对象的属性值进行了修改,是不会真正改变对象仓库中对象的属性值的,只是一个临时的修改,测试运行时生效,运行结果后即结束它的使命,不对仓库中的对象属性产生任何影响。
例如:
Browser("测试").Page("测试").Frame("Frame").WebElement("测试对象").SetTOProperty"innerText","好好学习"
下面再介绍WebElement的Run-Time属性。通过Object Spy的方法,获取得该对象的Run-time属性如下图1:
通过“测试对象.object”的方法,可以修改Run-time的属性值,即修改程序中对象的属性值。从上图1中可以看到,WebElement有一个“innerText”属性,它的属性值也就是在程序中输入的文本内容。因此,如果使用“测试对象.object”的方法对innerText属性值进行修改,也就相当于在程序中手工输入了文本。
了解了WebElement的测试对象属性与Run-Time属性后,现在尝试进行脚本的编写。
首先,对程序(如图1)使用SetTOProperty方法建立脚本,如图2。(注:第1个语句用来检查测试对象属性值修改前,是否可以从程序中找到对象;第3个语句用来检测对象属性值修改后,是否还可以从程序中找到对象。
运行后,测试结果如下图3。
从图3可以看出,第1行脚本的点击事件通过,表示在程序中找到了对象,但在运行至第3行脚本的点击事件时出现错误,因为无法找到测试对象。由此表示如果对对象库中的对象属性进行了修改,会导致测试时无法从程序中找到对象。
图1
图2
图3
现在将程序中的文本也相应的改为“好好学习”。如下图1,注释第1行脚本,如图2,再次运行脚本,结果如下图3。
从图中可以看出,脚本运行是成功的。由此可见,如果对测试对象的属性值进行了修改,并在程序中对Run-time对象的属性值进行了相应的修改,这样保持了对象仓库中测试对象的属性与程序中Run-time对象属性的一致性,在这种情况下,脚本就可以运行成功。
上面的脚本实验同样也表时,无法通过SetToProperty方法来模拟用户输入,因为它只能改变测试对象的属性值,不能自动改变Run-Time对象的属性值。相反的,如果改变了测试对象的属性值,不在程序中对Run-time属性值进行修改的话,还会导致脚本运行时找不到对象。
图1
图2
图3
上面的试验证明了可以临时修改测试对象仓库中对象的属性,无法实现对程序中手工输入文本的操作。
现在将程序界面回复初始状态,如图1,并修改脚本,如图2,运行后程序界面如图3,结果如图4。
从图3可见,脚本实现了向应用程序中输入文本的操作,并且从图4可见,整个测试运行是成功的。
图1
图2
图3
图4
现总结如下:
使用测试对象的SetToProperty方法,可以临时改变仓库中对象的属性,对程序中的对象没有任何作用;使用测试对象的Object属性,可以改变程序中对象的属性,对于对象仓库中的对象没有任何作用。
当程序中的对象属性发生变化时,就需要对对象仓库中的测试对象的属性进行相应的修改,否则会导致RunTime属性与测试对象属性不一致。如果程序中有多个对象,其实可以合并为一个对象,因为它们除了某项识别属性值不同以后,其它所有的识别属性都相同,对于这种情况,可以只在仓库中保留一个对象,然后对该对象进行参数化。
如果希望改变应用程序中对象的属性值,应该通过“Object.object”方法,来改变对象的Run-time属性。
相关阅读:
- 用QTP调用外部vbs读写XML的例子(一) (51testing, 2007-5-21)
- VBScript中SendKeys的妙用 (erics, 2007-5-22)
- [转载]不用checkpoint的Bitmap比较 (erics, 2007-5-22)
- (转)QTP中读取Access数据 (erics, 2007-5-22)
- QTP中的描述性编程 (erics, 2007-5-22)
- (转)QTP中的descriptive programming (erics, 2007-5-22)
- [Quote]QTP Timeout Settings (erics, 2007-5-22)
- [Quote]QTP学习的一些技巧 (erics, 2007-5-22)
- QTP学习指南 (erics, 2007-5-22)
- QTP疑难问题解答(不能识别对象etc...) (erics, 2007-5-22)
收藏
举报
TAG:
QTP