51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1967|回复: 8
打印 上一主题 下一主题

[原创] 求教:Execute使用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-3-27 21:18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今晚突发奇想,想使用VBS写一个对新创建对象添加属性的Function。代码如下;

Public Function Quote (txt)
Quote = chr(34) & txt & chr(34)
End Function

Function setObjetProperty ( ObjName , ProName , ProValue )
          'msgbox  ObjName & "(" & Quote(ProName) & ").value = " & Quote(ProValue)
          ExecuteGlobal ObjName & "(" & Quote(ProName) & ").value = " & Quote(ProValue)
End Function

其中 Quote在字符两端加上Char(34)用的,但是调用的时候返回了ObjName 类型不匹配,请各位大侠帮忙看看。谢谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-3-27 22:55:14 | 只看该作者
既然提示ObjName类型不匹配,那么问题应该在ObjName传递进来的值或对象。
要么你试试把ObjName放到引号里面看看。我记得excute后面都是字符串。
即:ExecuteGlobal "ObjName(" & Quote(ProName) & ").value = " & Quote(ProValue)
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-3-27 23:46:03 | 只看该作者
应该不行,ExecuteGlobal "ObjName(" & Quote(ProName) & ").value = " & Quote(ProValue),里面的 ObjName 就变成字符串【ObjName】了,不是传入的
对象变量了。

类似的,在前面加 “”,即 ExecuteGlobal "“ & ObjName(" & Quote(ProName) & ").value = " & Quote(ProValue) 这样改 ,也是不行的。

set baseLink = createObj ("micclass","Link")
setObjetProperty "baseLink","name","电脑整机"

类型不匹配: 'baseLink'

Function file: E:\QTPtest\testfun.qfl
Line (1): "'****************************************".

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2010-3-27 23:50:16 | 只看该作者
我怀疑是作用域的问题,在网上找了一下,ExecuteGlobal  这个是可以修改Function外面的全局变量的,但是为什么就是调不通呢?想不明白。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-3-28 10:37:25 | 只看该作者
不太清楚你的CreateObj创建的是一个什么样的对象。
我觉得首先要看你的对象是否支持那个语法,就是:baseLink("name").value="电脑属性"
在我印象里,能够这样写的语句好像也就是Description对象了。
如果你创建的是一个Web类型的对象,那么他是否支持这种语法呢?能否详细说说看,或者给我信箱发邮件。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2010-3-28 11:26:16 | 只看该作者
呵呵,刚起来上网看有没有回复咯,下面是从一堆test function 里面摘出来的。麻烦帮忙看看。谢谢
'****************************************
'直接关闭所有IE进程
'****************************************
Public function CloseAllBrowsers
   SystemUtil.CloseProcessByName "iexplore.exe"
End Function

'*************************************************************
'打开网页地址
'************************************************************
Function  OpenUrl( url )
   Dim StartURL,IE
    StartURL = url
    set IE = CreateObject("InternetExplorer.Application")
        IE.Visible = true
        IE.Navigate StartURL
End Function

'*************************************************************
'创建对象
'************************************************************
Function  createObj(ProName,ProValue)
   Dim obj
        Execute "Set obj  =   Description.Create()"
        'msgbox  "obj(" & Quote(ProName)  & ").value = " & Quote(ProValue)
        Execute  "obj(" & Quote(ProName)  & ").value = " & Quote(ProValue)
        set createObj = obj
End Function

'*************************************************************
'Quote 函数的作用是在变量 txt 两端  加上双引号
'************************************************************
Public Function Quote (txt)
Quote = chr(34) & txt & chr(34)
End Function

'*************************************************************
'setObjectProperty 给对象设置属性
'************************************************************
Function setObjectProperty ( ObjName , ProName , ProValue )
          'msgbox  ObjName & "(" & Quote(ProName) & ").value = " & Quote(ProValue)
          ExecuteGlobal ObjName & "(" & Quote(ProName) & ").value = " & Quote(ProValue)
End Function


'*************************************************************
'调用过程
'************************************************************

CloseAllBrowsers
TargetURL = "www.360buy.com"
OpenUrl TargetURL

set baseBrowser = createObj ("micclass","Browser")

'createObj(ProName, ProValue)
set basePage = createObj( "micclass","Page")

set baseLink = createObj ("micclass","Link")

setObjectProperty "baseLink","name","电脑整机"
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2010-3-28 12:16:59 | 只看该作者
看来你搞错了Description的用法。给你个例子看看。
  Set oDesc = Description.Create()
    oDesc("micclass").Value = "WebList"
    oDesc("name").Value = "country"
    Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)
    NumberOfLists = Lists.Count()
    For i = 0 To NumberOfLists - 1
        Lists(i).Select "#0"
    Next
那个方法并不是去改变对象的属性值,而是用描述性编程给定对象的属性值,然后结合ChildObjects方法找出满足这些条件的子对象集合,可能获得多个对象,那么你可以用Lists(index)的方式去操作这个对象。

假如这里只有1个满足条件的子对象,上面的语句其实等同于
Lists(0)等同于Browser("Mercury Interactive").Page("Mercury Interactive").WebList("micclass:=WebList","name:=country")
如果有多个子对象,那么
Lists(0)等同于Browser("Mercury Interactive").Page("Mercury Interactive").WebList("micclass:=WebList","name:=country","index:=0")

通常我是在调试的时候用这个方法,去查看页面上是否有两个一样的对象存在。当然偶尔也会用这种方法解决问题(比如可识别属性是随机值的时候,我就只能找出所有的子对象,然后选择第X个操作)。
当你用描述性编程需要匹配的属性较多的时候,用description对象写的更整齐美观一些。
不知道你明白了没有,呵呵。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2010-3-28 12:22:20 | 只看该作者
帮你改一下代码,你的原来的代码应该这样使用
'*************************************************************
'调用过程
'************************************************************

CloseAllBrowsers
TargetURL = "www.360buy.com"
OpenUrl TargetURL

set baseBrowser = createObj ("micclass","Browser")
Set ListsBrowser = Desktop.ChildObjects(baseBrowser)   '得到Desktop子对象Browser集合

'createObj(ProName, ProValue)
set basePage = createObj( "micclass","Page")
Set ListsPage = ListsBrowser(0).ChildObjects(basePage)    '得到Browser子对象Page集合

set baseLink = createObj ("micclass","Link")
setObjectProperty "baseLink","name","电脑整机"      '这里并不是改成这个,而是找name是电脑整机的link

Set ListsLink = ListsPage(0).ChildObjects(baseLink)    '得到Page子对象Link集合

ListsLink(0).Click

[ 本帖最后由 shotstar 于 2010-3-28 12:23 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2010-3-28 12:29:20 | 只看该作者
如果你想改那个link的属性值,比如他的文字,可以用这样的方法:
Browser("Mercury Interactive").Page("Mercury Interactive").Link("电脑整机").Object.innerText ="PC"

当然这种改动纯属娱乐的,只能你自己看到,呵呵。页面刷新一下就变回原来的值了。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-20 19:28 , Processed in 0.069276 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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