【问题标题】:For loop in VBScript (QTP) not functioningVBScript (QTP) 中的 For 循环不起作用
【发布时间】:2012-03-23 06:35:35
【问题描述】:

我正在使用 QTP 11.0,它使用 VBScript 作为它的“语言”。

我有以下四行代码:

For x = 1 to 8
msgbox(x)
update1 =  SwfWindow("NextGen File Maintenance").SwfWindow("SIM Library Configuration").SwfObject("spreadCtl").Object.ActiveSheet.GetValue(x,2)
Next

返回值为:

1 3 3 3 3 3 ...永远

我似乎无法在 vbscript for 循环中使用计数器变量,否则它会以某种方式损坏 - 无论变量的名称是什么。我什至尝试将 X 分配给另一个变量并在我的 GetValue 语句中使用它,但没有成功。

我在这里错过了一些非常简单的东西吗? Google 上没有关于 vbscript For 循环的文档意味着任何不同的用法。我也没有发现任何关于 QTP 的内容。

谢谢,

杰森

【问题讨论】:

    标签: vbscript for-loop qtp next


    【解决方案1】:

    这很奇怪,我假设如果您删除循环中的第二行并留下MsgBox,那么x 会正确递增。

    也许ActiveSheet.GetValue 通过引用获取第一个参数并对其进行修改。您说您尝试使用临时变量但没有成功,您是否尝试过类似的方法?

    For x = 1 to 8
        tmp = x
        update1 =  SwfWindow("NextGen File Maintenance").SwfWindow("SIM Library Configuration").SwfObject("spreadCtl").Object.ActiveSheet.GetValue(tmp, 2)
        MsgBox("x=" & x & " tmp=" & tmp)
    Next    
    

    如果问题是 GetValue 确实更改了索引,您可以尝试使用按值获取索引的函数,然后在循环中使用它。

    Public Function GetVal(ByVal index)
           GetVal = SwfWindow("NextGen File Maintenance").SwfWindow("SIM Library Configuration").SwfObject("spreadCtl").Object.ActiveSheet.GetValue(index, 2)
    End Function
    

    【讨论】:

    • 似乎是 GetValue 方法导致了问题。我可以创建一个 for next 循环,在其他语句中使用计数器值就好了。当然,我找不到在哪里用 HP 记录缺陷,所以看起来我只需要写出 8 段可重复的代码.. :-(
    • @Jason 如果GetValue 引起了问题,那么问题(可能)出在您正在测试的应用程序中,而不是使用QTP,您毕竟使用的是.Object,这意味着您正在工作直接在被测应用程序中的对象上。我将值复制到 tmp 的建议没有帮助吗?
    • 不,它失败了。我以前试过。使用直接数值可以正常工作。我看不到应用程序是如何导致对象执行问题的,但如果您知道我遇到的其他问题,我不会感到惊讶。
    • @Jason,我在答案中添加了另一条可能的路线。
    • 如果您的替代路线有效,那么:update1 = SwfWindow("NextGen File Maintenance").SwfWindow("SIM Library Configuration").SwfObject("spreadCtl").Object.ActiveSheet.GetValue((x),2) 也应该有效。通过在 x 周围添加括号,在将其“发送”到 GetValue 方法之前对其进行评估。
    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 2017-04-13
    • 2013-12-31
    • 1970-01-01
    • 2011-03-08
    • 2015-07-05
    • 1970-01-01
    相关资源
    最近更新 更多