VBScript中获取JavaScript中的变量

2 篇文章 0 订阅
1 篇文章 0 订阅

[说明] 以下用JS表示JavaScript, 用VBS表示VBScript

          版权归 陈奕斌 所有


        在使用QTP做自动化测试过程中,有些时候希望获取JS中的变量的值,如一些封装的控件经常在JS的变量中存储本控件的状态,如果知道这个状态,对于QTP操作此控件是很有帮助的。另外,有一些页面会在JS中存储页面相关控件的对象,通过获取JS中的对象变量就可以操作这些控件了。

        因此在查看相关DHTML帮助文档后,写了以下函数:

'/****************************************************/
'* 功能:读取JS变量或语句的值,支持返回值为对象
'* 参数:oDocumentObj:要是document对象,如Page().object,Frame().object
'*       strVariableName:JS是的变量名或语句,执行后的值可以是字符串也可以是对象
'*       errReturn:出错时的返回值
'* 返回值: 变量的值或对象,出错时返回errReturn指定值
'* 编写人:  chenyb
'* 编写日期:2011-08-13
'* 其他说明:以下只是方法,根据需要再扩展
'/****************************************************/
Function QtpGetJsVariableAdvance(oDocumentObj,strVariableName,errReturn )
    Dim objScript,qtpGetJsVarObj,rtValue
    On Error Resume Next 
    oDocumentObj.createAttribute "JsVariableAdvanceValue"
    Set objScript = oDocumentObj.createElement( "script" ) 
    objScript.language = "javascript" 
    objScript.type = "text/javascript"
    objScript.defer = true 
    objScript.text = "document.JsVariableAdvanceValue = " & strVariableName & ";"
    oDocumentObj.appendChild objScript 
    If IsObject(oDocumentObj.JsVariableAdvanceValue) Then
        Set rtValue = oDocumentObj.JsVariableAdvanceValue
    Else
        rtValue = oDocumentObj.JsVariableAdvanceValue
    End If 
    oDocumentObj.removeChild objScript
    If Err.Number <> 0 Then
        If IsObject(errReturn) Then
            Set QtpGetJsVariableAdvance = errReturn 
        Else
            QtpGetJsVariableAdvance = errReturn 
        End If
    Else 
        If IsObject(rtValue) Then
            Set QtpGetJsVariableAdvance =  rtValue
        Else
            QtpGetJsVariableAdvance =  rtValue
        End If 
    End If 
    On Error Goto 0
End Function 

         在做以上试验过程中,突然想到,之前写ASP时,在页面的VBS中想调用JS中的变量是否可以使用同样的方法呢? 于是改造一下上面函数,以便用于页面的VBS中。函数如下:

'/****************************************************/
    '* 功能:读取JS变量或语句的值,支持返回值为对象
    '* 参数:strVariableName:JS是的变量名或语句,执行后的值可以是字符串也可以是对象
    '*       errReturn:出错时的返回值
    '* 返回值: 变量的值或对象,出错时返回errReturn指定值
    '* 编写人:  chenyb
    '* 编写日期:2011-08-13
    '* 其他说明:以下只是方法,根据需要再扩展
    '/****************************************************/
    Function GetJsVariableAdvance(strVariableName,errReturn )
        Dim objScript,qtpGetJsVarObj,rtValue
        On Error Resume Next 
        document.createAttribute "JsVariableAdvanceValue"
        Set objScript = document.createElement( "script" ) 
        objScript.language = "javascript" 
        objScript.type = "text/javascript"
        objScript.defer = true 
        objScript.text = "document.JsVariableAdvanceValue = " & strVariableName & ";"
        document.appendChild objScript 
        If IsObject(document.JsVariableAdvanceValue) Then
            Set rtValue = document.JsVariableAdvanceValue
        Else
            rtValue = document.JsVariableAdvanceValue
        End If 
        document.removeChild objScript
        If Err.Number <> 0 Then
            If IsObject(errReturn) Then
                Set GetJsVariableAdvance = errReturn 
            Else
                GetJsVariableAdvance = errReturn 
            End If
        Else 
            If IsObject(rtValue) Then
                Set GetJsVariableAdvance =  rtValue
            Else
                GetJsVariableAdvance =  rtValue
            End If 
        End If 
        On Error Goto 0
    End Function 

        函数写好后,那得写一个小页面测试一下,小页面源码如下:

<html>
<head>
<title>试验VBS获取JS变量 </title>
<script language="javascript">
    var object = {name:"张三",age:20};
</script>
<script language="vbscript">
    Dim jsObj
    ' 获取js脚本中的object对象变量
    Function GetJSObj()
        Set jsObj = GetJsVariableAdvance("object",Nothing)
        MsgBox IsObject(jsObj)
    End Function
    ' 输出对象的值,这里用的是VBS中的变量jsObj
    Function ShowObjPropertys()
        Msgbox "姓名:" & jsObj.name & "   年龄:" & jsObj.age
    End Function 
    '/****************************************************/
    '* 功能:读取JS变量或语句的值,支持返回值为对象
    '* 参数:strVariableName:JS是的变量名或语句,执行后的值可以是字符串也可以是对象
    '*       errReturn:出错时的返回值
    '* 返回值: 变量的值或对象,出错时返回errReturn指定值
    '* 编写人:  chenyb
    '* 编写日期:2011-08-13
    '* 其他说明:以下只是方法,根据需要再扩展
    '/****************************************************/
    Function GetJsVariableAdvance(strVariableName,errReturn )
        Dim objScript,qtpGetJsVarObj,rtValue
        On Error Resume Next 
        document.createAttribute "JsVariableAdvanceValue"
        Set objScript = document.createElement( "script" ) 
        objScript.language = "javascript" 
        objScript.type = "text/javascript"
        objScript.defer = true 
        objScript.text = "document.JsVariableAdvanceValue = " & strVariableName & ";"
        document.appendChild objScript 
        If IsObject(document.JsVariableAdvanceValue) Then
            Set rtValue = document.JsVariableAdvanceValue
        Else
            rtValue = document.JsVariableAdvanceValue
        End If 
        document.removeChild objScript
        If Err.Number <> 0 Then
            If IsObject(errReturn) Then
                Set GetJsVariableAdvance = errReturn 
            Else
                GetJsVariableAdvance = errReturn 
            End If
        Else 
            If IsObject(rtValue) Then
                Set GetJsVariableAdvance =  rtValue
            Else
                GetJsVariableAdvance =  rtValue
            End If 
        End If 
        On Error Goto 0
    End Function 
</script>

</head>
<body>
<input type=button οnclick="GetJSObj();" value="获取对象" />
<input type=button οnclick="ShowObjPropertys();" value="显示对象属性" />
</body>
</html>


小页面的外观如下:



先试一下异常情况,先不点击“获取对象”按钮,直接点击“显示对象属性”按钮,会报以下错误:



接下来试正常情况,先点击“获取对象”按钮:



        上图显示对象已经获取,接着点击“显示对象属性”按钮:



        如上图所示,VBS中的jsObj对象确实等于JS中的object对象了。

        那如果是QTP中,又如何获取JS中的object呢? 道理是一样的,简单代码如下:

Dim obj
Set obj = QtpGetJsVariableAdvance(Browser("*").Page("*").Object,"object",Nothing)
If Not obj Is Nothing Then
    Msgbox "姓名:" & obj.name & "   年龄:" & obj.age
End If

        注明:以上的试验在 IE6IE8上试验都通过。QTP用的是10.0版本。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值