EmbedScriptFromFile 和 RunScriptFromFile - QTP/UFT

zea*_*eal 3 javascript qtp

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

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

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

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

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)")
Run Code Online (Sandbox Code Playgroud)

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


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;
}
Run Code Online (Sandbox Code Playgroud)

所以我想要实现的是,执行makeArray()函数来创建一个数组,并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
Run Code Online (Sandbox Code Playgroud)

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

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

Mot*_*tti 5

首先我们应该了解RunScriptEmbedScript函数(及其FromFile变体)。

  • RunScriptPageand 的一个方法,Frame它接受一个 JavaScript 并执行它,返回脚本的结果(通常是最后一个表达式运行)。
  • EmbedScript是一种方法,Browser它的意思是“确保此脚本从现在开始在所有Pages 和FramesBrowser上运行”。此函数不返回任何值,因为它的主要目的是在将来运行(尽管它也立即在 中的Page和现有Frames上运行Browser)。EmbedScript可用于使 JavaScript 函数可供将来RunScript使用。

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

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

如果你希望它是一个字符串,你应该把它放在引号中,在任何情况下看起来你都在期待一个数组,所以也许你打算这样做:

Set cloned = Browser("Home").Page("Home").RunScript("cloneArray(['Users', 'Gopi'])")
Run Code Online (Sandbox Code Playgroud)

在任何情况下,将 JavaScript 数组传递到 VBScript.length都是有问题的,该属性可以正常工作,但对数组进行索引是一个问题(可能是因为 JavaScript 使用方括号而 VBScript 使用括号)。

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

// wrapArray.js
function wrapArray(array) {
    return { 
        length: array.length,
        item: function(index) {
            return array[index];
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

然后您可以在 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
Run Code Online (Sandbox Code Playgroud)

输出:

0:回答
1:42