51Testing软件测试论坛

标题: 关于RegisterUserFunc的疑惑. [打印本页]

作者: 风过无息    时间: 2007-7-14 17:59
标题: 关于RegisterUserFunc的疑惑.
Function MySet (obj, x)

dim y

y = obj.GetROProperty("value")

Reporter.ReportEvent micDone, "previous value", y

MySet=obj.Set(x)

End Function

RegisterUserFunc "WebEdit", "Set", "MySet"

Browser("MercuryTours").Page("FindFlights").WebEdit("Country").Set "Canada"

UnRegisterUserFunc "WebEdit", "Set"

以上这段代码是QTP帮助里的,很疑惑RegisterUserFunc 是现实Function 里的对象属性加到run 状态下的对象库中吗?
在现实中实现什么样子的效果呢?

[ 本帖最后由 风过无息 于 2007-7-14 18:38 编辑 ]
作者: winfood    时间: 2007-7-14 22:06
这个函数提供的是类似面向对象里面重载(Override)的功能。


  1. Function MySet (obj, x)
  2.        dim y
  3.        y = obj.GetROProperty("value")
  4.        Reporter.ReportEvent micDone, "previous value", y
  5.        MySet=obj.Set(x)
  6. End Function
复制代码

定义了一个用户自定义的函数MySet,当该函数被调用时对象obj的原有value属性值被输出到Report中,然后才被赋予新的属性值。


  1. RegisterUserFunc "WebEdit", "Set", "MySet"
复制代码

向QTP声明,从现在开始WebEdit对象类型的Set方法将由用户自定义的MySet方法替代。


  1. Browser("MercuryTours").Page("FindFlights").WebEdit("Country").Set "Canada"
复制代码

调用WebEdit("Country")对象的Set方法时,其实是在调用MySet方法(被Override)了。


  1. UnRegisterUserFunc "WebEdit", "Set"
复制代码

注销前面的Override,恢复WebEdit对象类型原有的Set方法。
作者: 风过无息    时间: 2007-7-15 10:56
谢谢楼上回答.受益匪浅.
其实就是把QTP原有的方法重构了使用.

[ 本帖最后由 风过无息 于 2007-7-15 10:58 编辑 ]
作者: garyyes    时间: 2007-7-15 15:40
原帖由 风过无息 于 2007-7-14 17:59 发表
Function MySet (obj, x)

dim y

y = obj.GetROProperty("value")

Reporter.ReportEvent micDone, "previous value", y

MySet=obj.Set(x)

End Function

RegisterUserFunc "WebEdit", "S ...

Help里面写得那么复杂干吗,这样就可以啦:

Function MySet (obj, x)

dim y

y = obj.GetROProperty("value")

Reporter.ReportEvent micDone, "previous value", y

MySet=obj.Set(x)

End Function

Dim ReturnValue
ReturnValue = MySet(Browser("MercuryTours").Page("FindFlights").WebEdit("Country"),  "Canada")
作者: songfun    时间: 2007-7-15 16:41
哟,风大版主也提问题啊,新鲜呃,嘻嘻

其实看代码就知道什么意思了,楼上的兄弟回答你了:)
原帖由 风过无息 于 2007-7-14 17:59 发表
Function MySet (obj, x)

dim y

y = obj.GetROProperty("value")

Reporter.ReportEvent micDone, "previous value", y

MySet=obj.Set(x)

End Function

RegisterUserFunc "WebEdit", "S ...

作者: 风过无息    时间: 2007-7-15 16:48
三人行必有我师,呵呵.
理解出问题了,所以弄了半天都出来效果,还是大家一语惊醒梦中人啊.

[ 本帖最后由 风过无息 于 2007-7-15 16:49 编辑 ]
作者: 风过无息    时间: 2007-7-16 18:45
回报大家,我把RegisterUserFunc 整理了一下,希望对那些和我一样理解有点偏差的人有点帮助.
  1. Function MySet (obj, x)
  2. dim y
  3. y = obj.GetROProperty("value")
  4. Reporter.ReportEvent micDone, "previous value", y
  5. MySet=obj.Set(x)
  6. End Function
  7. RegisterUserFunc "WebEdit", "Set", "MySet"
  8. Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebEdit("username").Set "test"
  9. UnRegisterUserFunc "WebEdit", "Set"
复制代码


大家可以看到MySet的方法其实是重载了QTP的set的方法,它还取了录制时候的value的值并输出到result中,大家可以看到结果的(见附件).
由此大家可以修改或者增加QTP的一些方法来灵活的应用.
作者: garyyes    时间: 2007-7-17 00:49
原帖由 风过无息 于 2007-7-16 18:45 发表
回报大家,我把RegisterUserFunc 整理了一下,希望对那些和我一样理解有点偏差的人有点帮助.
Function MySet (obj, x)
dim y
y = obj.GetROProperty("value")
Reporter.ReportEvent micDone, "previous va ...

我晕! 版主你好像道现在都不明白 Reporter.ReportEvent 的作用哦?

我写QTP 的script,从来不用QTP自带的检查点,所有检查用VBscript搞定,然后把checking结果用Reporter.ReportEvent 来写入QTP的result。

[ 本帖最后由 garyyes 于 2007-7-17 00:52 编辑 ]
作者: 风过无息    时间: 2007-7-17 12:22
我是说,通过RegisterUserFunc 来实现脚本用的set功能改变为我们自己写的myset的功能.
我们的例子可以看到,假如我们用了RegisterUserFunc 以后,我们在实现set功能以后还能输入一条日志.
作者: evergreenwang    时间: 2007-7-18 21:36
标题: 回复 #1 风过无息 的帖子
支持!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: lin85210    时间: 2009-3-27 11:24
日志操作   是 个人习惯问题了。。
作者: jandz0413    时间: 2009-3-31 00:48
用户自定义方法的注册,QTP帮助文件里有的。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2