51Testing软件测试论坛

标题: 调用子程序时不能使用括号?是啥意思? [打印本页]

作者: kursk    时间: 2007-4-10 20:11
标题: 调用子程序时不能使用括号?是啥意思?
我自己写了一个函数,放在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

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

这是啥意思?望高手指点一下
作者: henhenchen    时间: 2007-4-10 23:46
标题: 我觉的你的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
作者: walker1020    时间: 2007-4-11 11:30
根据错误提示,把 RegExpCheck (testcode,temp)   改为 RegExpCheck  testcode,temp  后试试看看。
作者: walker1020    时间: 2007-4-11 11:32
另外,testcode="^"&testcode   应该为 testcode="^"&test 吧? 因为前面压根就没有testcode   这个变量的定义,而只有test 这个变量的定义。
作者: firefox82    时间: 2007-4-11 14:21
感觉不是括号的问题。。我写的脚本中也是用括号的
"FUNCTION 应有RETURN 值.要是没有.最好定义SUB"引用上面的话
作者: kursk    时间: 2007-4-11 14:24
谢谢大家,我已经解决了问题,特此作个总结

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




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2