太空鱼 发表于 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
页: 1 [2] 3
查看完整版本: 当前问题:如何使用正则表达式实现Flights程序中WinList里的项目选择?(2012-3-26)