修改测试对象的属性值(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。对象ClassWebElement

    (3).            将对象的Enable Smart Identification值设置为False,如图2

    从上图可以看出,程序中该控件的输入内容全部可在“innertext”属性值中显示。因此应该可以通过修改innertext值,来模拟用户的文本输入操作。

    我们可以先了解一下WebElement测试对象的属性,如下图。

    上图中的属性值都可以通过测试通过的Settoproperty进行修改。如果在脚本中用SetToProperty对测试对象的属性值进行了修改,是不会真正改变对象仓库中对象的属性值的,只是一个临时的修改,测试运行时生效,运行结果后即结束它的使命,不对仓库中的对象属性产生任何影响。

    例如:

    Browser("测试").Page("测试").Frame("Frame").WebElement("测试对象").SetTOProperty"innerText","好好学习"

    下面再介绍WebElementRun-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

  • 修改测试对象的属性值(SetTOProperty Method )与Run-time对象的属性值的区别(二)

    上面的试验证明了可以临时修改测试对象仓库中对象的属性,无法实现对程序中手工输入文本的操作。

    现在将程序界面回复初始状态,如图1,并修改脚本,如图2,运行后程序界面如图3,结果如图4

    从图3可见,脚本实现了向应用程序中输入文本的操作,并且从图4可见,整个测试运行是成功的。

    图1

    图2

    图3

    图4

    现总结如下:

    使用测试对象的SetToProperty方法,可以临时改变仓库中对象的属性,对程序中的对象没有任何作用;使用测试对象的Object属性,可以改变程序中对象的属性,对于对象仓库中的对象没有任何作用。

    当程序中的对象属性发生变化时,就需要对对象仓库中的测试对象的属性进行相应的修改,否则会导致RunTime属性与测试对象属性不一致。如果程序中有多个对象,其实可以合并为一个对象,因为它们除了某项识别属性值不同以后,其它所有的识别属性都相同,对于这种情况,可以只在仓库中保留一个对象,然后对该对象进行参数化。

    如果希望改变应用程序中对象的属性值,应该通过“Object.object”方法,来改变对象的Run-time属性。


  • TAG: QTP

     

    评分:0

    我来说两句

    日历

    « 2024-05-07  
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 

    数据统计

    • 访问量: 41640
    • 日志数: 55
    • 图片数: 6
    • 书签数: 1
    • 建立时间: 2007-05-22
    • 更新时间: 2007-12-12

    RSS订阅

    Open Toolbar