51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4757|回复: 14
打印 上一主题 下一主题

[求助] 如何得到父对象

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-1-7 11:29:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我把一个对象传到函数中,现在我想在函数中得到该对象的父对象,请问有什么好办法吗?
比如:一个我的传入对象为Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd")
     现在我在函数中想得到Browser("百度一下,你就知道").Page("百度一下,你就知道")这个对象,大家有什么好办法吗?非常感谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-1-7 14:38:59 | 只看该作者
set objPage =  Browser("Browser").Page("百度一下,你就知道").WebEdit("wd").GetTOProperty("Parent")

objPage 就是你要的。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-1-7 14:47:44 | 只看该作者
又多学了一招,感谢楼上。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2008-1-7 15:27:03 | 只看该作者
首先非常感谢gy21st的帮助,问题解决了.
但是我有一几个疑问,刚也看了一些关于GetTOProperty和GetROProperty的文章,但还是不明白为什么.所以我有以下问题想赐教一下.
1.为什么我用GetROProperty得不到父对象?
2.Parent这个属性我SPY也没看到啊,在哪里可以找到啊?还是就是有这样一个固定用法?
3.是不是GetROProperty可以取出所有可以通过GetTOProperty取出的属性值(在不用SetTOProperty的情况下)?
4.为什么Win对象没有Run-Time Object Property?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-1-7 15:37:42 | 只看该作者
学习
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-1-7 16:18:01 | 只看该作者
原帖由 lantianwei 于 2008-1-7 15:27 发表
首先非常感谢gy21st的帮助,问题解决了.
但是我有一几个疑问,刚也看了一些关于GetTOProperty和GetROProperty的文章,但还是不明白为什么.所以我有以下问题想赐教一下.
1.为什么我用GetROProperty得不到父对象?
2.Pa ...


你为难我呢,这么多问题。 以下是个人理解,不一定完全正确:
首先我们都知道TOProperty是指对象库中的对象属性。而且我们知道,对象库中的对象是可以编辑的,包括其层次结构
拿这个对象来说Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd"),有严格层次关系,但同样可以变成
Browser("百度一下,你就知道")
Page("百度一下,你就知道").WebEdit("wd")
这样层次结构的对象库,也就是说Browser("百度一下,你就知道")和Page("百度一下,你就知道")是同一级的对象。当然我们实际并不会这么用。
(但类似browser().dialog()这种情况完全可以把dialog拉出来,更清晰。题外话。)
所以这里的parent显然和对象库中层次结构有关,和运行时没有任何关系。
这个属性是看不到,我也是看QTP自带的例子发现的,应该是一个固定用法。
而且我怀疑QTP应该还有类似"未公开"的属性,只是我们都不知道,知道了以后就可以写一个"Inside QTP"了

以上应该回答了1-3。关于第四点,Spy中我们可以看到"windows object do not support run-time object properties"。也就是说windows对象没有object属性。为什么我也不知道

[ 本帖最后由 gy21st 于 2008-1-7 16:46 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-1-7 16:25:48 | 只看该作者
非常gy21st的精彩回答,佩服!
似乎第3个没有回答,是不是在对象没有用SetTOProperty的情况下,GetROProperty完全可以替代GetTOProperty?
看来还真的得仔细看看QTP自带的东西,很多还是非常好的,特别是一些扩展用法.
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2008-1-7 16:31:04 | 只看该作者

回复 6# 的帖子

我也有个问题想问一下:
你在回答中提到了对象库,并且说”parent显然和对象库中层次结构有关,和运行时没有任何关系。”。但是,我使用描述性语言运行也没有问题啊。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2008-1-7 16:35:39 | 只看该作者
原帖由 lantianwei 于 2008-1-7 16:25 发表
非常gy21st的精彩回答,佩服!
似乎第3个没有回答,是不是在对象没有用SetTOProperty的情况下,GetROProperty完全可以替代GetTOProperty?
看来还真的得仔细看看QTP自带的东西,很多还是非常好的,特别是一些扩展用法.


我不明白你说的"替代"是什么意思。各有各的用途,不存在替代一说。
如果意思是GetROProperty可以得到所有GetTOProperty可以得到的属性,那肯定不可以啦,比如这个parent就搞不定
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2008-1-7 16:41:37 | 只看该作者
原帖由 gy21st 于 2008-1-7 16:35 发表


我不明白你说的"替代"是什么意思。各有各的用途,不存在替代一说。
如果意思是GetROProperty可以得到所有GetTOProperty可以得到的属性,那肯定不可以啦,比如这个parent就搞不定

这个是特殊情况就不算了,我总感觉GetROProperty是包含GetTOProperty的(在没有用SetProperty的情况下),也就是在一般情况GetTOProperty可以做的,GetROProperty都可以做.是吗?如果不是,可以给个例子说明一下吗?(parent就除外了)
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-1-7 16:48:27 | 只看该作者
原帖由 jinsen 于 2008-1-7 16:31 发表
我也有个问题想问一下:
你在回答中提到了对象库,并且说”parent显然和对象库中层次结构有关,和运行时没有任何关系。”。但是,我使用描述性语言运行也没有问题啊。


我理解,描述性编程不用对象库,其层次结构应该就是语句定义的。你同样可以试试改变语句中对象的层次结构,应该可以看到不同的parent对象。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2008-1-7 16:53:18 | 只看该作者
原帖由 lantianwei 于 2008-1-7 16:41 发表

这个是特殊情况就不算了,我总感觉GetROProperty是包含GetTOProperty的(在没有用SetProperty的情况下),也就是在一般情况GetTOProperty可以做的,GetROProperty都可以做.是吗?如果不是,可以给个例子说明一下吗?(paren ...


我想那应该是很自然的。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2008-1-7 17:16:10 | 只看该作者

回复 12# 的帖子

呵呵...
以后请大哥多多照顾小弟啊!
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2008-1-7 18:26:03 | 只看该作者
如果确定对象是不变的,可以在函数外边,把Browser("百度一下,你就知道").Page("百度一下,你就知道")给一个变量,再把变量传到函数里边就可以了(我以前就是这么搞的)

如果是变化的就需要用到上边的方法了。

[ 本帖最后由 jifeng 于 2008-1-7 18:27 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2008-1-7 19:58:39 | 只看该作者
原帖由 lantianwei 于 2008-1-7 16:41 发表

这个是特殊情况就不算了,我总感觉GetROProperty是包含GetTOProperty的(在没有用SetProperty的情况下),也就是在一般情况GetTOProperty可以做的,GetROProperty都可以做.是吗?如果不是,可以给个例子说明一下吗?(paren ...


说说我的理解:
GetTOProperty得到的是测试对象的属性,GetROProperty得到的是运行时对象的属性,测试对象属性是在添加到对象库时QTP记录下来的,然后通过这些属性来识别对象,而记录的测试对象属性有强制属性和非强制属性,强制属性是必须用来识别对象的,而非强制属性可能被记录但不用来识别对象。强制和非强制属性只是针对记录测试对象来说的,而我们从对象库中看到的“Description properties"是不分强制和非强制的,只要列出来的就都必须被匹配。
这样就可能存在记录测试对象时多记录了一些非强制属性信息,而在运行时识别对象并未用到,但运行时该对象的这些属性已经不同,那么此时两个函数获得的值就应该会不同了。
做个简单的实验,只打开一个IE并打开http://www.sndo.cn/页面,然后添加这个browser对象,然后改变url,如http://www.google.com,执行如下语句
TOP =  Browser("browser").GetTOProperty("title")
ROP =  Browser("browser").GetROProperty("title")
msgbox "TOP:" & TOP & vbCRLF & "ROP:" & ROP
可以发现两者是不同的,其原因是title虽然在添加时被QTP记录了,但并没有用来识别对象,而运行时对象的title已经改变了。
所以不应该企图用GetTOPropery来获取运行时属性的值。

嗯,似乎这并没有没有回答所提的问题,其实想知道哪些属性是test object有而runtime object没有,在spy中看一下会有所发现,还是IE,有的属性名相同值不同,例如"class name"测试对象值是"Browser",运行时是"window",也有代表同一个属性但属性名不同例如测试对象的"abs_x"和运行时对象的"left"。

其实一般也不会用错或滥用的,这也只是为了解释而解释了,呵呵。

[ 本帖最后由 dsjlzh 于 2008-1-7 20:16 编辑 ]
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-25 16:19 , Processed in 0.073564 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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