请帮助我使用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 文件中使用这两个函数并调用这些函数,并尝试了其他一些可能性。但没有任何帮助,所以请帮忙。
首先我们应该了解RunScript和EmbedScript函数(及其FromFile变体)。
RunScript是Pageand 的一个方法,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
| 归档时间: |
|
| 查看次数: |
4454 次 |
| 最近记录: |