请帮助我使用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文件中并调用函数,并尝试了其他一些可能性。但没有任何帮助,所以请帮助。
答案 0 :(得分:4)
首先,我们应该了解RunScript
和EmbedScript
函数(以及它们的FromFile
变体)。
RunScript
是Page
和Frame
的方法,它接受JavaScript并执行它,返回脚本的结果(通常是最后一个表达式运行)。EmbedScript
是Browser
的一种方法,它意味着&#34;确保此脚本在所有Page
和Frame
上运行从现在开始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