51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4828|回复: 6
打印 上一主题 下一主题

[原创] 调用子程序时不能使用括号?是啥意思?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-4-10 20:11:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我自己写了一个函数,放在QTP的主程序中,如下:

Function RegExpCheck(string1,string2) 'expch正则表达式符号,string1被搜索的字符串,string2在其上搜索的字符串
Dim regEx,  Matches ' Create variable.
Set regEx = New RegExp ' Create a regular expression.
regEx.Pattern = string1 ' Set pattern.
regEx.IgnoreCase = True ' Set case insensitivity.
regEx.Global = True ' Set global applicability.
Set Matches = regEx.Execute(string2) ' Execute search.
If (Matches.count=0) Then
        msgbox("false")
Else
        msgbox("true")
End If
End Function

Dim testcode'用来得到编号以与系统自动获得的编号验证
Dim temp

..............................
...录制代码主体.........
........................

set temp=browser("工程项目管理信息系统").Page("工程项目管理信息系统_4").Frame("frm_right_2").WebEdit("WebEdit").GetROProperty("value")
testcode="^"&testcode               ’加入^元字符
RegExpCheck (testcode,temp)     '调用自定义函数,从temp中找testcode

结果报错,说什么”调用子程序时不能使用括号?“

这是啥意思?望高手指点一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-4-10 23:46:50 | 只看该作者

我觉的你的CODE 有点问题.1 FUNCTION 应有RETURN 值.要是没有.最好定义SUB

2 .什么地方要用括号给你PASTE 一段QTP USER GUILDE 的内容:

Using Parentheses
You must use parentheses around method arguments if you are calling a
method that returns a value and you are using the return value.
For example, use parentheses around method arguments if you are
returning a value to a variable, if you are using the method in an If
statement, or if you are using the Call keyword to call an action or function.
You also need to add parentheses around the name of a checkpoint if you
want to retrieve its return value

The following example requires parentheses
Set WebEditObj = Browser("Mercury Tours").Page("Method of Payment").
WebTable("FirstName").ChildItem (8, 2, "WebEdit", 0)
WebEditObj.Set "Example"
Call RunAction("BookFlight", oneIteration)
or
Call MyFunction("Hello World")

because the method is used in an If statement.
If Browser("index").Page("index").Link("All kind of").
WaitProperty("attribute/readyState", "complete", 4) Then
Browser("index").Page("index").Link("All kind of").Click
End If

NO Parentheses
Browser("Mercury Tours").Page("Method of Payment").WebTable("FirstName").
Click 3,4
The following example requires parentheses around the
It u want to check whether text box is visible or not
If Browser("TEST").Page("TEST").WebEdit("FirstEditBox").GetROProperty("visible") = TRUE Then
Reporter.ReportEvent 0, "pass", "pass"
Else
Reporter.ReportEvent 1, "fail", "fail"
End If
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2007-4-11 11:30:55 | 只看该作者
    根据错误提示,把 RegExpCheck (testcode,temp)   改为 RegExpCheck  testcode,temp  后试试看看。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    4#
    发表于 2007-4-11 11:32:51 | 只看该作者
    另外,testcode="^"&testcode   应该为 testcode="^"&test 吧? 因为前面压根就没有testcode   这个变量的定义,而只有test 这个变量的定义。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2007-4-11 14:21:21 | 只看该作者
    感觉不是括号的问题。。我写的脚本中也是用括号的
    "FUNCTION 应有RETURN 值.要是没有.最好定义SUB"引用上面的话
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2007-4-11 14:24:18 | 只看该作者
    谢谢大家,我已经解决了问题,特此作个总结

    function 返回值和调用时使用()的问题

    例子1,下面的例子里function没有返回值

    function RegExpCheck(string1,string2) 'expch正则表达式符号,string1被搜索的字符串,string2在其上搜索的字符串
    Dim regEx,  Matches ' Create variable.
    Set regEx = New RegExp ' Create a regular expression.
    regEx.Pattern = string1 ' Set pattern.
    regEx.IgnoreCase = True ' Set case insensitivity.
    regEx.Global = True ' Set global applicability.
    Set Matches = regEx.Execute(string2) ' Execute search.
    If (Matches.count=0) Then
            msgbox("没找到")
    Else
            msgbox( "找到了")
    End If
    End function

    Dim testcode'用来得到编号以与系统自动获得的编号验证
    Dim temp,result

    ....................................................


    temp=browser("工程项目管理信息系统").Page("工程项目管理信息系统_4").Frame("frm_right_2").WebEdit("WebEdit").GetROProperty("value")
    testcode="^"&testcode
    RegExpCheck testcode, temp  '调用时就没有用(),如果使用(testcde,temp)就会报"调用子程序不用使用()"


    例子2、修改成返回

    function RegExpCheck(string1,string2) 'expch正则表达式符号,string1被搜索的字符串,string2在其上搜索的字符串
    Dim regEx,  Matches ' Create variable.
    Set regEx = New RegExp ' Create a regular expression.
    regEx.Pattern = string1 ' Set pattern.
    regEx.IgnoreCase = True ' Set case insensitivity.
    regEx.Global = True ' Set global applicability.
    Set Matches = regEx.Execute(string2) ' Execute search.
    If (Matches.count=0) Then
            RegExpCheck="没找到"
    Else
            RegExpCheck= "找到了"
    End If
    End function

    Dim testcode'用来得到编号以与系统自动获得的编号验证
    Dim temp,result

    .......................................

    temp=browser("工程项目管理信息系统").Page("工程项目管理信息系统_4").Frame("frm_right_2").WebEdit("WebEdit").GetROProperty("value")
    testcode="^"&testcode
    msgbox(RegExpCheck(testcode, temp)) '需用()
    ‘RegExpCheck(testcode, temp) 这样写是会报错“调用子程序不用使用()”

    总结:

    在QTP里调用函数时,不管函数是否有返回值,当使用返回值时必须用();如果不使用返回值时,必须不使用()

    [ 本帖最后由 kursk 于 2007-4-11 14:26 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    7#
    发表于 2007-4-11 14:40:37 | 只看该作者
    kursk总结地很好。他(她)自己发现问题、提出问题,然后在论坛上各位朋友的帮助下解决了问题,并最后把解决方法和结论都宛转地总结了出来。 kursk 思路清晰、做事有始有终,此种精神值得学习。
    另外,关于括号的问题,请参考 [QTP精华区]里面的帖子
      http://bbs.51testing.com/thread-43343-1-2.html
    强烈建议大家有时间多去 [QTP精华区]看看。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-27 23:30 , Processed in 0.077256 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表