EmbedScriptFromFile& RunScriptFromFile - QTP / UFT

时间:2014-12-12 06:36:45

标签: javascript qtp

请帮助我使用EmbedScriptFromFile& RunScriptFromFile用于在QTP / UFT中执行JS文件。

我正在尝试使用JS文件获取N个值,并在数组中的QTP / UFT中接收相同的值。为此,我必须了解EmbedScriptFromFile& QTP / UFT帮助部分中的RunScriptFromFile。但是当我尝试使用示例代码时,我无法按预期进行。请帮我解决这个问题

我正在使用的Java脚本代码:

function cloneArray(arr) {
          var ret = [];
          for (var i = 0; i < arr.length; ++i)
          ret.push(arr[i]);
       return ret;
 }

VB脚本,我正在使用:

Browser("Home").Page("Home").EmbedScriptFromFile "C:\Users\Gopi\Desktop\CloneArray.js" 'Call the function and run the script that returns the array'
Set cloned = Browser("Home").Page("Home").RunScriptFromFile("cloneArray(C:\Users\Gopi\Desktop)")

执行这两行时遇到一些错误 - 对于第一行,我收到错误,因为'对象不支持此属性或方法'。对于第二行,我收到的错误是“参数不正确”。请帮忙


15-Dec-2014:我已尝试过以下建议并且有效!但除此之外,我还试图从JavaScript函数中获取数组值。

创建数组的代码:

function makeArray() {
    var myArray = new Array(4);
    for (var i = 0; i < myArray.length; i++){
        myArray[i] = i+1;
    }
    return myArray;
}

所以我正在尝试实现的是,执行makeArray()函数创建一个数组并使用cloneArray方法创建支持QTP / UFT的数组,方法是传递makeArray()返回值/ array作为ConeArray(arr)的参数。但是当我尝试使用以下代码实现这一点时,我无法做到。

Browser("Home").EmbedScriptFromFile "C:\Users\Gopi\Desktop\cloneArray.js"
'Set arr1 = Browser("Home").Page("Home").RunScriptFromFile "C:\Users\Gopi\Desktop\makeArray.js"
Set arr = Browser("Home").Page("Home").RunScript("cloneArray[C:\Users\Gopi\Desktop\makeArray.js]")
For i = 0 To arr.length - 1
    msgbox i & ": " & arr.item(i)
Next

EmbedScript&amp;当我单独尝试时,RunScript正常工作,但在尝试将另一个函数作为参数传递时无法使用。

我试图将这两个函数放在同一个JS文件中并调用函数,并尝试了其他一些可能性。但没有任何帮助,所以请帮助。

1 个答案:

答案 0 :(得分:4)

首先,我们应该了解RunScriptEmbedScript函数(以及它们的FromFile变体)。

  • RunScriptPageFrame的方法,它接受JavaScript并执行它,返回脚本的结果(通常是最后一个表达式运行)。
  • EmbedScriptBrowser的一种方法,它意味着&#34;确保此脚本在所有PageFrame上运行从现在开始Browser&#34; 。此函数不返回任何值,因为它的主要目的是将来运行(尽管它也会立即运行在Page和当前Frame中的现有Browser上。 EmbedScript可用于使JavaScript函数可用于将来RunScript使用。

这些函数的普通版本接受一些JavaScript脚本,而FromFile变体采用文件名(在文件系统或ALM中)并读取该文件。

关于您的问题 - 在您的第二行,您正在执行RunScriptFromFile但未传递文件名,您似乎正在传递一个脚本(你应该使用RunScript)。另外,您传递给cloneArray的参数不是有效的JavaScript值。

如果你想让它成为一个字符串你应该把它放在引号中,无论如何它看起来像你期待一个数组所以也许你打算这样做:

Set cloned = Browser("Home").Page("Home").RunScript("cloneArray(['Users', 'Gopi'])")

无论如何将JavaScript数组传递给VBScript是有问题的,.length属性工作正常,但索引到数组是一个问题(可能是因为JavaScript使用方括号而VBScript使用括号中)。

阵列问题的解决方法可能是这样的

// wrapArray.js
function wrapArray(array) {
    return { 
        length: array.length,
        item: function(index) {
            return array[index];
        }
    };
}

然后您可以在UFT / QTP中使用以下内容。

Browser("B").EmbedScriptFromFile "C:\wrapArray.js"
Set arr = Browser("B").Page("P").RunScript("wrapArray(['answer', 42])")
For i = 0 To arr.length - 1
    Print i & ": " & arr.item(i)
Next

<强>输出:

  

0:回答
  1:42