51Testing软件测试论坛

标题: 关于使用childobject的困惑 [打印本页]

作者: cherryqxh    时间: 2009-7-21 14:07
标题: 关于使用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
那你直接用MSGBOX  curPage.childObjects(descdisplayTime)
看看呢,我没有用过childobject
不过有时侯我用类似
Set arrayRes=curPage.childObjects(descdisplayTime)
语句会报告错误,我把 SET 删除了就好了,为啥 我也不知道,反正好了
作者: nbkhic    时间: 2009-7-21 17:20
这是一个好问题!
我刚看了下帮助文档,所以妄自猜测一下原因。
首先看一下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
标题: 回复 2# 的帖子
非常感谢你的回复!
不过我用MSGBOX  curPage.childObjects(descdisplayTime) 试过了,程序报错,原因应该是3楼说的那个
作者: cherryqxh    时间: 2009-7-21 17:50
Dim arrayRes(10)这个声明我本来就有用过哦,还是会报错呢。
作者: Haereticus    时间: 2009-7-21 18:21
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
标题: 回复 6# 的帖子
太感谢了咯,测试通过了,
感动ing
作者: onlonely    时间: 2009-7-21 21:26
原帖由 cherryqxh 于 2009-7-21 14:07 发表
我在网上好像看到说childObject返回的是对象的指针,但是VBScript的数组不支持指针

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

不知道你理解了没有?
作者: lijinshui    时间: 2009-7-22 09:07
似乎明白了,嗯...
作者: sunhope800    时间: 2009-7-28 15:17
又学到了点东西,
作者: cherryqxh    时间: 2009-10-13 10:15
标题: 回复 8# 的帖子
这个问题我现在倒回来看才真正领悟了,谢谢你的回复,帮了我极大的忙呢
作者: 跨越蓝天    时间: 2010-3-4 11:39
为什么在我这测试还是报类型不匹配呀。
作者: 跨越蓝天    时间: 2010-3-4 11:41
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
实在抱歉,解决了。马虎造成的。




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