51Testing软件测试论坛

标题: 正则表达式错误 [打印本页]

作者: rivermen    时间: 2007-5-14 15:25
标题: 正则表达式错误
按照QTP 的tutorial 上的作法:

In the Active Screen, scroll up and highlight the date for the outbound flight, New York to San Francisco (12/29/2004). Right-click the highlighted string and select Insert Text Checkpoint. The Text Checkpoint Properties dialog box opens.

[attach]25087[/attach]

In the Checked Text area, click the Constant Value Options button  . The Constant Value Options dialog box opens.

In the Value box, replace the current date with [0-1][0-9]/[0-3][0-9]/200[0-9]. This instructs QuickTest to check that each character in the selected text matches the number-range format defined by the regular expression.

Select the Regular expression check box. A message box prompts you to insert the backslash character before each special character.


运行结果:
[localimg=400,300]2[/localimg]

不知道什么原因?
作者: rivermen    时间: 2007-5-14 15:28
结果
Text Checkpoint "[0-1][0-9]/[0-3][0-9]/200[0-9]_2": Failed


Date and Time: 2007-5-14 - 15:09:07



Details

Text Checkpoint: captured "7/31/2007" between to Frankfurt and SELECT , expected "[0-1][0-9]/[0-3][0-9]/200[0-9]"
Regular Expression : ON
Match case: OFF
Exact match: OFF
Ignore spaces: ON


[attach]25088[/attach]

[ 本帖最后由 rivermen 于 2007-5-14 15:30 编辑 ]
作者: fate    时间: 2007-5-14 15:59
应该是参数化导致的错误,你把TOPORT 参数化了吧
作者: zoeHuang    时间: 2007-5-14 16:27
本人觉得你这个问题还是你的正则表达式写的不正确。如果是[0-1][0-9]/[0-3][0-9]/200[0-9], 那么 07/31/2007是符合的,但是7/31/2007就不符合了。可以看看[0-1]{0,1}[0-9]/[0-3]{0,1}[0-9]/200[0-9]。 我对这个也不熟悉,共同学习
作者: rivermen    时间: 2007-5-14 17:46
问题解决了,诚如楼上所言。
正则表达式应该好好学。
另外:{0,1} 中间应该是英文的逗号
作者: 19thangel    时间: 2007-5-14 17:55
请问{0,1}是什么意思?
作者: rivermen    时间: 2007-5-14 18:05
出现了新的问题:
完整代码如下:
'####################################################################################################################################
'    描述性编程,事先把所有的IE窗口全部关闭    #
'#############################################
Dim WinIe,Ie,i,m
Set WinIe=description.Create()
WinIe("regexpwndtitle").value=" Microsoft Internet Explorer"   '所有页面的regexpwndtitle属性值都是" Microsoft Internet Explorer",也可以用其他属性
Set Ie=desktop.ChildObjects(WinIe)
m=Ie.count
For i=1 to m
        Ie(i-1).close                 ' 0为最后打开的一个,可关闭打开的几个,,循环改成for i=1 to m
Next
'####################################################################################################################################

systemutil.Run "iexplore","http://newtours.mercuryinteractive.com "
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Sync
'Browser("Welcome: Mercury Tours").Close
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("userName").Set "jie.wu"
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("password").SetSecure "463fe0d035b4df752e83110ce83e3cd8c3722b639b31"   '97210125
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Image("Sign-In").Click 29,10
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebRadioGroup("tripType").Select "oneway"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("departure", dtLocalSheet)
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromMonth").Select "February"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromDay").Select "30"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toPort").Select "Frankfurt"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toPort").Select "London"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toMonth").Select "July"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toDay").Select "31"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebRadioGroup("servClass").Select "Business"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("airline").Select "Unified Airlines"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").Image("findFlights").Click 69,9

'Regular Expressions
'Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Check CheckPoint("2/30/2007")

'Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Check CheckPoint("[0-1][0-9]/[0-3][0-9]/200[0-9]")
wait 5

Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Check CheckPoint("[0-1][0-9]/[0-3][0-9]/200[0-9]_2")
wait 2

Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Output CheckPoint("271")


Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").WebRadioGroup("outFlight").Select "Blue Skies Airlines$361$271$7:10"
Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").WebRadioGroup("inFlight").Select "Blue Skies Airlines$631$273$14:30"
Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Image("reserveFlights").Click 45,11
'Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Check CheckPoint("Book a Flight: Mercury")

'If Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Check (CheckPoint("Book a Flight: Mercury")) then
'        reporter.ReportEvent 0,"检查页面","页面正常"
'else
'   reporter.ReportEvent 1,"检查页面","页面不正常"
'end if


'Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Check CheckPoint("Book a Flight: Mercury_3")

Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passFirst0").Set "aaa"

' 添加一个bitmap CheckPoint
'If Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury_2").Image("banner2").Check (CheckPoint("banner2_2")) then
'        reporter.ReportEvent 0,"bitmap Checkpoint","successful"
'else
'        reporter.ReportEvent 1,"bitmap Checkpoint","fail"
'end if


' 添加一个Table CheckPoint
If Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebTable("Frankfurt to London").Check (CheckPoint("Frankfurt to London")) then
        reporter.ReportEvent 0,"Table checking","Table checking 正确!"
else
        reporter.ReportEvent 1,"Table checking","Table checking 不正确!"
end if

'添加一个Object CheckPoint
If Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passFirst0").Check (CheckPoint("passFirst0") ) then
         reporter.ReportEvent 0,"标准检查点","检查点数值正确!"
else
        reporter.ReportEvent 1,"标准检查点","检查点数值不正确!"
end if


Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passLast0").Set "aa"

'添加一个Output
reporter.ReportEvent 2,"检查Output输出值","检查Output输出值"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passLast0").Output CheckPoint("passLast0")
'使用GetRoproperty方法获取属性值
Dim value
value= Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passLast0").GetROProperty ("value")
reporter.ReportEvent 2,"属性输出值GetROProperty","输出值为:" & value

Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("creditnumber").Set "123345"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebList("pass.0.meal").Select "Bland"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebList("cc_exp_dt_mn").Select "01"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebList("cc_exp_dt_mn").Select "02"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Image("buyFlights").Click 72,14

'检查点 Insert Text Checkpoint
If Browser("Welcome: Mercury Tours").Page("Flight Confirmation: Mercury").Check (CheckPoint("Frankfurt")) then
         reporter.ReportEvent 0,"text Checkpoint","检查结果正确"
        else
         reporter.ReportEvent 1,"text Checkpoint","检查结果不正确"
end if

Browser("Welcome: Mercury Tours").Page("Flight Confirmation: Mercury").Image("Logout").Click


Browser("Welcome: Mercury Tours").Page("Sign-on: Mercury Tours").Sync

Browser("Welcome: Mercury Tours").Close






Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("departure", dtLocalSheet)
参数化,参数一共3行,可是,后面两行都会check失败,称没有抓到相关文本

[attach]25108[/attach]
作者: rivermen    时间: 2007-5-15 12:08
自己顶,召唤高手现身
作者: zoeHuang    时间: 2007-5-16 15:59
标题: 回复 #6 19thangel 的帖子
[0-1]{0,1},符合[0-1]的出现的次数 0次或则1次,如果没有,就应该是必须出现一次[0-1]中的一个
作者: zoeHuang    时间: 2007-5-16 16:30
在脚本里面发现 Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toPort").Select "Frankfurt"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toPort").Select "London"

这样的话,你的toport是London而不是Frankfurt,所以出现了上面的错误。可是很奇怪,为什么第一个iteration却没有错,不知道你的脚本是不是有所改变,就像checkpoint一样,脚本里面还是错的吗
另外,请问'Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Check CheckPoint("2/30/2007"),这里你用的standard checkpint 还是text checkpoint?

[ 本帖最后由 zoeHuang 于 2007-5-16 16:37 编辑 ]
作者: rivermen    时间: 2007-5-16 17:12
我确实toport 选的是“London”
因为:
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("departure", dtLocalSheet)

fromport选用的是 dataTable,分别是:
Frankfurt
New York
Paris


'Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Check CheckPoint("2/30/2007")
注释的
作者: 19thangel    时间: 2007-5-16 17:26
大概LZ测试的是
RETURN
London to Frankfurt                 5/15/2007  
SELECT

这里的日期

Frankfurt参数化后条件变了,第一次是Frankfurt所以成功了,后两次则找不到条件了。
作者: rivermen    时间: 2007-5-16 17:26
我想我已经找到了错误的地方了:
如果按照Tutorial所说的那样:

在 Active Screen 中向上滚动,然后突出显示出发航班 New York to San Francisco (12/29/2004)。右键单击突出显示的字符串,然后选择“插入文本检查点”。将打开“文本检查点属性”对话框。


肯定是会出错的。
因为我用了参数化fromport,每一次航班的起点都是不一样的
New York to San Francisco
中New York 这个位置的值都是一直在变动的
所以只有第一次是成功的。2,3次由于相应的字符串变动了,中间的日期当然找不到了。


所以改变策略:
采用standard checkpoint,检查“innertext” 这个值

而不是像Tutorial那样“插入文本检查点”。

其实就是那么简单。
尽信书不如无书......


我把脚本发上来,可以比照
Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").WebElement("2/30/2007").Check CheckPoint("2/30/2007_2")
和他下面的注释的那句
'Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Check CheckPoint("[0-1][0-9]/[0-3][0-9]/200[0-9]_2")

may it be helpful......
[attach]25437[/attach]
作者: zoeHuang    时间: 2007-5-16 17:51
标题: 回复 #13 rivermen 的帖子
位置变换不会造成text checkpoint的失败的,失败是因为 你设置the text before and after it 变化了,以致于找不到。QTP text checkpoint,不是靠位置查找的。




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