EmbedScriptFromFile 和 RunScriptFromFile - QTP/UFT

2023-12-11

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

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

我正在使用的 JavaScript 代码:

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()函数创建数组并使用以下命令创建 QTP/UFT 支持数组cloneArray方法通过传递makeArray()返回值/数组作为参数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 & RunScript当我单独尝试时工作正常,但在尝试传递另一个函数作为参数时无法使用。

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


首先我们应该明白RunScript and EmbedScript函数(及其FromFile变体)。

  • RunScript是一种方法Page and Frame它接受 JavaScript 并执行它,返回脚本的结果(通常是最后运行的表达式)。
  • EmbedScript是一种方法Browser这意味着“确保该脚本在所有Pages and Frame这个的Browser今后”。该函数不返回任何值,因为它的主要目的是在将来运行(尽管它也立即在Page和现有的Frame目前在Browser). EmbedScript可以用来使 JavaScript 函数可供将来使用RunScript use.

这些函数的普通版本接受一些 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

Output:

0:回答
1: 42

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EmbedScriptFromFile 和 RunScriptFromFile - QTP/UFT 的相关文章

随机推荐