太空鱼
发表于 2012-3-17 16:29:46
学习
無涙的星星
发表于 2012-3-17 17:07:40
观摩一下~
Sience
发表于 2012-3-19 09:13:10
新手围观、
lsekfe
发表于 2012-3-19 10:40:18
回复 8# msnshow
恩,是QTP里面的知识哦!
da乐
发表于 2012-3-20 11:22:39
本帖最后由 da乐 于 2012-3-20 11:26 编辑
百度了下
Function IsRegEqual(s_Text, s_Pattern)
Dim regEx, retVal ' 变量
Set regEx = New RegExp ' 创建正则表达式 .
regEx.Pattern = s_Pattern ' 模式
regEx.IgnoreCase = True
IsRegEqual = regEx.Test(s_Text)
End Function
Function SelectByText(objWebList,s_Text,b_RegExpression)
Set obj_Options=objWebList.object.options
i_Count =obj_Options.length - 1
For i=0 to i_Count
If b_RegExpression And IsRegEqual(obj_Options(i).text,"^"+ s_Text) Then
obj_Options(i).selected=True
Exit for
Elseif Lcase(s_text)=Lcase(obj_Options(i).text) then
obj_Options(i).selected=True
Exit for
End If
Next
End Function
Function SelectByValue(objWebList,s_Value,b_RegExpression)
Set obj_Options=objWebList.object.options
i_Count =obj_Options.length - 1
For i=0 to i_Count
If b_RegExpression And IsRegEqual(obj_Options(i).value,"^" & s_Value) Then
obj_Options(i).selected=True
Exit for
Elseif Lcase(s_text)=Lcase(obj_Options(i).value) then
obj_Options(i).selected=True
Exit for
End If
Next
End Function
Function SelectByIndex(objWebList,i_Index)
objWebList.object.options(i_Index).selected=True
End Function
下面是例子:
SelectByText Browser("Find a Flight: Mercury").Page("Find a Flight: Mercury").WebList("fromPort"),".*ond.*",TRUE
SelectByValue Browser("Find a Flight: Mercury").Page("Find a Flight: Mercury").WebList("fromPort"),"san.*francisco",TRUE
SelectByIndex Browser("Find a Flight: Mercury").Page("Find a Flight: Mercury").WebList("fromPort"),3
metoto
发表于 2012-3-20 12:45:04
LS的好详细啊,WinList里的项目选择,真的要再审下题了
icu200934
发表于 2012-3-20 17:00:02
可以作随机数获取winlist
冰释
发表于 2012-3-20 18:07:17
谢谢楼上大神 看了不是很明白 才接触 测试。。。。以后会多多努力
GreenVitamin
发表于 2012-3-20 21:35:43
学习了~
yingluowu
发表于 2012-3-21 11:01:35
来学习,顶一下!
冰释
发表于 2012-3-21 19:10:46
新手 不懂 同求
femir
发表于 2012-3-22 15:52:43
正则表达式,还没用过,学习哈
hsjzfling
发表于 2012-3-22 20:02:03
本帖最后由 hsjzfling 于 2012-3-22 20:08 编辑
先分析题意,目的应该是让选项的值中支持使用正则表达式。代码如下
'Select WinList中选项时支持使用正则表达式
Function RegExpSelect(objWinList, strPattern)
Dim objRegExp, arrAllItems, intIndex
'创建正则表达式对象,设置区分大小写
Set objRegExp = New RegExp
objRegExp.IgnoreCase = False
objRegExp.Pattern = strPattern
'取到WinList下的所有选项的文本,赋值到数组
arrAllItems = Split(objWinList.GetROProperty("all items"), VbLf)
'遍历选项数组
For intIndex = 0 To UBound(arrAllItems)
'判断表达式是否能匹配当前选项,能匹配则选中之,否则继续循环
If objRegExp.Test(arrAllItems(intIndex)) Then
objWinList.Select intIndex
Reporter.ReportEvent micPass, "RegExpSelect Successful", "Pattern=" & strPattern & " First Matched Item=" & arrAllItems(intIndex)
Set objRegExp = Nothing
Exit Function
End If
Next
'若遍历完所有选项都不能匹配,则报出不能匹配的错误,写入日志中
Reporter.ReportEvent micFail, "RegExpSelect Failed ", "No Item Matched, Pattern=" & strPattern
End Function
然后是函数的使用示例,这里我们可以直接将之注册到WinList对象的方法中去,示例如下
'将RegExpSelect函数注册到WinList的方法中去
RegisterUserFunc "WinList", "RegExpSelect", "RegExpSelect"
'在WinList中使用RegExpSelect方法,选择第一个能符合表达式的选项
'比如这里希望能自动选一个上午10点到12点间Portland飞往Los Angeles且价格低于180美金的航班
Window("Flight Reservation").Dialog("Flights Table").WinList("From").RegExpSelect "\d+ POR 1: AM LAX \d{2}:\d{2} M \w+ \$1\d\.\d{2}"
jingyu1954
发表于 2012-3-24 17:07:33
新人来学习不太懂
冰释
发表于 2012-3-25 14:12:26
不明白额。。。
icegirl1202
发表于 2012-3-26 12:52:40
回复 33# hsjzfling
这个答案不错
mimmy
发表于 2012-3-27 18:23:17
^\d{4,5}\s{3}({3}\s{3}(0|1):\sM\s{3}){2}{2,3}\s{5}\${2}\.{2}$
下面我的测试数据:
20332 FRA 10:12 AM LAX 05:23 PM AA $112.20
12490 LON 10:24 AM PAR 12:24 PM AF $167.20
5174 POR 09:05 AM DEN 10:46 AM NW $145.00
11553 SEA 08:00 AM SYD 11:00 AM DL $252.50
15595 SEA 12:13 PM LON 01:39 PM QF $138.40
16968 SYD 10:38 AM SFO 12:48 PM QF $196.40
1060 SEA 11:02 AM SFO 12:43 PM TWA $168.20
duangang312
发表于 2012-4-6 22:45:47
^\d{4,5}\s{3}({3}\s{3}(0|1):\sM\s{3}){2}{2,3}\s{5}\${2}\ ...
mimmy 发表于 2012-3-27 18:23 http://bbs.51testing.com/images/common/back.gif
写的太啰嗦了,用不着这样的,这种测试代码里面不需要严格匹配的。所以尽可以用\d+\s+\W+这种方法来匹配。
第二个,楼主的提议应该是根据某个参数来匹配选项。如这里,参数假如是出发(FRA),到达城市(LAX),那么可以用.?FRA.?LAX来匹配,其实就可以了,用不着这么复杂。在这个场景下面,这个表达式足够用了。
mimmy
发表于 2012-4-7 00:07:59
写的太啰嗦了,用不着这样的,这种测试代码里面不需要严格匹配的。所以尽可以用\d+\s+\W+这种方法来匹配 ...
duangang312 发表于 2012-4-6 22:45 http://bbs.51testing.com/images/common/back.gif
我不认同你的观点,不严格匹配怎么能测试出程序的错误呢?
楼主只是给了一个例子,列表中除了FRA、LAX还有其他代码,不能在表达式里写死了
duangang312
发表于 2012-4-7 18:06:47
我不认同你的观点,不严格匹配怎么能测试出程序的错误呢?
楼主只是给了一个例子,列表中除了FRA、LAX还 ...
mimmy 发表于 2012-4-7 00:07 http://bbs.51testing.com/images/common/back.gif
楼主的目的只是为了按照参数选取下拉列表中的值而已,并不是为了检验其中的格式。所以我说这种情况下,使用简单匹配足够了。我写的只是一个例子咯,如果想要别的参数,尽可以把这段代码封装成一个函数,调用即可。使用正则要看场合,能不用正则就不用正则,毕竟使用正则会影响性能,可读性也不好。正则写复杂了,出错的可能性太大,比方你写的这里,你觉得12:01PM是正确的值么?:lol