cherryqxh 发表于 2009-7-21 14:07:33

关于使用childobject的困惑

以下代码是我用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的数组不支持指针,所以报错了,是这样的吗,大家帮个忙咯

lijinshui 发表于 2009-7-21 14:37:42

那你直接用MSGBOXcurPage.childObjects(descdisplayTime)
看看呢,我没有用过childobject
不过有时侯我用类似
Set arrayRes=curPage.childObjects(descdisplayTime)
语句会报告错误,我把 SET 删除了就好了,为啥 我也不知道,反正好了

nbkhic 发表于 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再试试看

cherryqxh 发表于 2009-7-21 17:49:13

回复 2# 的帖子

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

cherryqxh 发表于 2009-7-21 17:50:00

Dim arrayRes(10)这个声明我本来就有用过哦,还是会报错呢。

Haereticus 发表于 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可试下

cherryqxh 发表于 2009-7-21 21:05:33

回复 6# 的帖子

太感谢了咯,测试通过了,:lol
感动ing

onlonely 发表于 2009-7-21 21:26:58

原帖由 cherryqxh 于 2009-7-21 14:07 发表 http://bbs.51testing.com/images/common/back.gif
我在网上好像看到说childObject返回的是对象的指针,但是VBScript的数组不支持指针
这里是你的理解偏差了造成的,对于使用childObjects获得的,的确全都是对象的集合
那么在VB中呢,你不能先定义一个数组"dim arrayRes()",然后用childObjects获得对象的集合赋值给这个数组.这样是错误的.
如果你在执行
Set arrayRes=curPage.childObjects(descdisplayTime)
之前定义的是普通的变量(dim arrayRes这样定义),就可以执行的.
使用的是时候用arrayRes.item(0)来使用这个对象集合.

不知道你理解了没有?

lijinshui 发表于 2009-7-22 09:07:34

似乎明白了,嗯...

sunhope800 发表于 2009-7-28 15:17:59

又学到了点东西,:victory: :handshake

cherryqxh 发表于 2009-10-13 10:15:48

回复 8# 的帖子

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

跨越蓝天 发表于 2010-3-4 11:39:45

为什么在我这测试还是报类型不匹配呀。

跨越蓝天 发表于 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)
我的这个代码有问题吗?

跨越蓝天 发表于 2010-3-4 11:43:30

实在抱歉,解决了。马虎造成的。
页: [1]
查看完整版本: 关于使用childobject的困惑