51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4080|回复: 13
打印 上一主题 下一主题

[原创] 关于使用childobject的困惑

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-7-21 14:07:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下代码是我用childobject获取页面上所有类名为Time的webelement对象
  Set descdisplayTime = description.create()
   descdisplayTime("micclass").value="WebElement"
   descdisplayTime("class").value="Time"  
    Set arrayRes=curPage.childObjects(descdisplayTime)

如果我在程序的一开头加上Option Explicit语句的话,在 Set arrayRes=curPage.childObjects(descdisplayTime)
就会报错,说arrayRes没有定义,但是如果我在前面定义了的话,那么在这行也会报错,说类型不匹配。
我想用Option Explicit语句,也想用childObject函数,大家有没碰到过类似的问题,怎么解决的,分享一下哈。
我在网上好像看到说childObject返回的是对象的指针,但是VBScript的数组不支持指针,所以报错了,是这样的吗,大家帮个忙咯
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-7-21 14:37:42 | 只看该作者
那你直接用MSGBOX  curPage.childObjects(descdisplayTime)
看看呢,我没有用过childobject
不过有时侯我用类似
Set arrayRes=curPage.childObjects(descdisplayTime)
语句会报告错误,我把 SET 删除了就好了,为啥 我也不知道,反正好了
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-7-21 17:20:41 | 只看该作者
这是一个好问题!
我刚看了下帮助文档,所以妄自猜测一下原因。
首先看一下childObjects的返回值。
在简要描述页面,QTP的帮助文档时这样说的
Returns the collection of child objects contained within the object.
返回collection,这个collection 是什么东西呢?
呵呵,暂时还不知道。
我们再进入QTP函数的详细介绍,看一下这个方法的返回值:
Return Value :An Object object.
An Object object 是什么? 一个对象的对象?还是一个对象包含了所有返回对象的集合?
我想应该是后者。所以可以使用count的方法来获取其中的元素个数。

加上Option Explicit后,我想可能是QTP把childObjects的返回值当成了包含对象的数组,因此
Set arrayRes=curPage.childObjects(descdisplayTime)
中的arrayRes类型就不匹配了,因为不是对象也不是数组,只是普通数据类型。
数组怎么来声明?
呵呵,静态数组需要可以这样声明
Dim arrayRes(10)
加上这一句以后LZ再试试看
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2009-7-21 17:49:13 | 只看该作者

回复 2# 的帖子

非常感谢你的回复!
不过我用MSGBOX  curPage.childObjects(descdisplayTime) 试过了,程序报错,原因应该是3楼说的那个
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-7-21 17:50:00 | 只看该作者
Dim arrayRes(10)这个声明我本来就有用过哦,还是会报错呢。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2009-7-21 18:21:19 | 只看该作者
Option Explicit
Dim curPage,descdisplayTime
Dim arrayRes
Set curPage = Browser("xxx").Page("xxx")
Set descdisplayTime = description.create()
descdisplayTime("micclass").value="WebElement"
descdisplayTime("class").value="Time"  
Set arrayRes=curPage.childObjects(descdisplayTime)

执行顺利通过,LZ可试下
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2009-7-21 21:05:33 | 只看该作者

回复 6# 的帖子

太感谢了咯,测试通过了,
感动ing
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-7-21 21:26:58 | 只看该作者
原帖由 cherryqxh 于 2009-7-21 14:07 发表
我在网上好像看到说childObject返回的是对象的指针,但是VBScript的数组不支持指针

这里是你的理解偏差了造成的,对于使用childObjects获得的,的确全都是对象的集合
那么在VB中呢,你不能先定义一个数组"dim arrayRes()",然后用childObjects获得对象的集合赋值给这个数组.这样是错误的.
如果你在执行
Set arrayRes=curPage.childObjects(descdisplayTime)
之前定义的是普通的变量(dim arrayRes这样定义),就可以执行的.
使用的是时候用arrayRes.item(0)来使用这个对象集合.

不知道你理解了没有?
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2009-7-22 09:07:34 | 只看该作者
似乎明白了,嗯...
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2009-7-28 15:17:59 | 只看该作者
又学到了点东西,
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2009-10-13 10:15:48 | 只看该作者

回复 8# 的帖子

这个问题我现在倒回来看才真正领悟了,谢谢你的回复,帮了我极大的忙呢
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2010-3-4 11:39:45 | 只看该作者
为什么在我这测试还是报类型不匹配呀。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2010-3-4 11:41:06 | 只看该作者
Dim bb
set curPage = Browser("creationtime:=0").Page("index:=0").frame("html id:=content_system").WebTable("html id :=systemUserInfo_table")
Set EE= Description.Create()
EE("micclass").Value = "WebElement"
EE("class").value = "field-err"
set bb = curPage.ChildObjects(EditDesc)
我的这个代码有问题吗?
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2010-3-4 11:43:30 | 只看该作者
实在抱歉,解决了。马虎造成的。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 19:26 , Processed in 0.075048 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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