VBScript中获取JavaScript中的变量

上一篇 / 下一篇  2011-08-21 12:28:45 / 个人分类:QTP

[说明] 以下用JS表示javascript:;" onClick="javascript:tagshow(event, 'JavaScript');" target="_self">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 bjScript. = 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 bjScript. = 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 bject = {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 bjScript. = 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呢? 道理是一样的,简单代码如下:

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

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


TAG: JavaScript javascript JS对象 QTP qtp VBScript

 

评分:0

我来说两句

chenyb85

chenyb85

大海无量。。。 QQ:20710378

日历

« 2024-04-29  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 18962
  • 日志数: 20
  • 建立时间: 2009-03-11
  • 更新时间: 2011-08-21

RSS订阅

Open Toolbar