(转) QTP实例-记录网站的酒店和房型、价格信息

上一篇 / 下一篇  2008-12-20 14:22:28 / 个人分类:QTP

1、目标:

获取酒店查询结果中所有的酒店信息,并获取所有房型和价格信息进行记录

2、难点:

a)酒店名称是链接形式,但查询结果界面很多链接,如何过滤出真实的酒店信息链接并获取其名称

b)每个房型的webtable是动态显示的,只有htmlid对于这个webtable是唯一的,需要获取htmlid值来识别对象

c)查询结果分页,每次服务器仅返回当前页面的的信息,翻页后再次获取新的酒店信息,所以取值需要分页进行

3、解决思路:

获取查询结果总页数,循环处理每个页面,在每个页面上获取所有链接的OuterHTML,并结合正则表达式从中提取出酒店名称和酒店ID(处理后作为房型WebTable的唯一识别属性),再获取WebTable中的房型和价格信息,记录在Text中

4、运用技术

a)DOM

运用getElementsByTagName("A")方法获取界面所有链接集合,并获取每个元素的OuterHTML

b)正则表达式

匹配出符合规则的OuterHTML,并运用Match对象Submatches集合获取OuterHTML中的酒店名称和酒店ID

c)WebTable对象方法

获取酒店的房型和相应的价格

d)FileSystemObject对象

记录所有的酒店、房型和价格信息

5)缺点:

因为链接对象过多,而且进行正则表达式匹配,所以运行速度比较慢,这个需要后续考虑是否有更好的方法进行优化

脚本代码:

'scrīpt Name:GetPrices
,ie(Es%|CL \138711'CreateBy:LiuPei
&i2K\Tm r B1Y~ A138711'CreateTime:2008-07-24
r/Mu5M$Q!~kY4b138711'Descrīption:获取所有酒店信息并列出房型价格
ql3z!Pq138711'————————————————————51Testing软件测试网"z/t L!]1Ka Pl(p
SystemUtil.CloseProcessByName "iexplore.exe"

Set IE = CreateObject("Internetexplorer.Application")
3rq6b {CY+O-K138711IE.Visible = True51Testing软件测试网3Er;fr:E+b RfWD
IE.Navigate "http://www.mangocity.com/HWEB/hotelWeb/queryHotelWeb!allForward.action?forward=query"

'查询符合条件的酒店51Testing软件测试网)vX N-^Z&\rt]
Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebRadioGroup("res_commonCity").Select "CAN"
)rZ9J5sz7Z4tb/Gy-y138711Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebEdit("queryHotelForWebBean.inDate").Object.value = "2008-07-30"
#D*W%^-Yw:W_138711Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebEdit("queryHotelForWebBean.outDate").Object.value = "2008-07-31"
C;L'j,c+^W138711Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Image("SubmitQuery").Click

'获取查询结果页数
-x$\:Pn6[!I2na138711AllItems = Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebList("selectPage2").GetROProperty("all items")
Zg%ZdoVo!D M138711ItemsArr = Split(AllItems , ";")
;L]-P"lYmdy&Q138711PageCount = UBound(ItemsArr) + 1

'循环取酒店名称直到所有都完成
rg,u*J m138711For i = 1 to PageCount
E0r-?s},S,Z:ib138711 Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebList("selectPage2").Select ItemsArr(i-1)51Testing软件测试网F#H Q%P5_0RJ
 Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Sync

 '获取酒店信息
qGeC U ~138711 Set ōPage = Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Object

 For Each Element in oPage.getElementsByTagName("A")51Testing软件测试网*IDwWN.`sA
  TempHtml = Element.outerhtml51Testing软件测试网8i uF*|~
  51Testing软件测试网(BUXAR)i"}c4L
    '建立正则表达式匹配符合条件的链接字符串51Testing软件测试网'da}o,w)n
  Set RegEx = New RegExp51Testing软件测试网3iu2iAK~p*x
  RegEx.Pattern = "<A\s*?\w*?\W*?\s*?view_hotel_priceinfo\(.(\d{8})..*?\s*?jpg.\).\s*?href\=.\s*.*?>([^\x00-\xff]*?\W*?[^\x00-\xff]*?\(.*?\))</A>"
u]\Va6g9q138711  RegEx.Global = True
_+Y/zYR#L2C138711  RegEx.IgnoreCase = True51Testing软件测试网ESs BY9pVrd.e
  Set matches=RegEx.execute(TempHtml)

  '获取酒店名称
8`Ss;c nX#JS138711  For each match in matches
$R8P Zf.c[rWQ138711   Hotelid = match.submatches(0)51Testing软件测试网(g{.bS0d/\J3m.X-J
   HotelName = match.submatches(1)

   '记录酒店信息51Testing软件测试网 p ?:Qp)wi
   Call WriteHotelInfo(HotelName , "D:\HotelInfo.txt")

   '房型WebTable的htmlid唯一,采用该属性识别WebTable51Testing软件测试网c _L{ iXwnFb
   id = "hotel" & Hotelid
`c1v7@7b3\7_VD$T138711   
!^P5F$J$EP4jf/G138711   '获取房型和价格
R/zqA3J `E138711   Set ōWebTable = Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebTable("html id:="&id)51Testing软件测试网3paYN d9ZT?
   NumOfRow =  oWebTable.RowCount()
l/Fj9IZ%]:^t4m1O(MX6f138711   For j = 1 to NumOfRow
H|cm9Zv5[ H138711    '获取房型
eg"G3r(B/].~|4^138711    Room =  oWebTable.GetCellData(j , 1)
Q$X1e Z["u(F\5Mw138711    Arr = Split(Room , chr(32))
9IZ{@rww$K138711    RoomType = Arr(Lbound(Arr))51Testing软件测试网%N9u,pgp,A^.CA
    '获取价格51Testing软件测试网L?K#g!`!eh_ bB
    RoomPrice = oWebTable.GetCellData(j , 4)

    '记录房型价格信息
T%_4@!T xL2O.rE138711    Call WriteRoomInfo(RoomType , RoomPrice , "D:\HotelInfo.txt")51Testing软件测试网,f.E1_lZ9k*I
   Next
B,L#F4s!p138711  Next
X7VS,S2M vgB(B7R138711  Set RegEx = Nothing51Testing软件测试网4x X_+M3D|MH
 Next
{+r,r'_lHra"R138711Next
7cF!^.K.W/H.q c)_S138711Set IE= Nothing

'写入酒店名称
ok:\$o5Z2pk2T138711Function WriteHotelInfo(Hotel , FilePath)51Testing软件测试网&tf.D~ E V8ICj!m
 Set fso = CreateObject("scrīpting.FileSystemObject")51Testing软件测试网:[o!r!W[+E2E.Y
 
8f z7vRoGy5j%w138711 Const ForAppending = 8
7X"?5NH5u138711 Set f = fso.OpenTextFile(FilePath , ForAppending , True)
1~9nP8O{ r8ji;Q!g3b138711 f.WriteLine "------------------" & Hotel & "------------------" & vbCrLf
HO0y#XC-B[w138711 
I&AMXi#V&s138711 f.Close51Testing软件测试网-Ej#tIg'E
 Set f = Nothing
n.SZg6j+m4?!r138711 Set fso = Nothing51Testing软件测试网$d,g1]/T/|hzr
End Function

'写入房型价格信息51Testing软件测试网'w"v}B6\8d
Function WriteRoomInfo(Room , Price , FilePath)51Testing软件测试网-r:L cH5}2B [+|
 Set fso = CreateObject("scrīpting.FileSystemObject")
r2K l!}(V"o138711 
&\*x(Hn*Kf\138711 Const ForAppending = 8
6X+i'w*Zac i138711 Set f = fso.OpenTextFile(FilePath , ForAppending , True)
)| r}4t&@-{d138711 f.WriteLine Room & "-----------" & Price51Testing软件测试网x$[ ZFK
 51Testing软件测试网Pj5f)\'z
 f.Close51Testing软件测试网!dF;V0~+Za;W^
 Set f = Nothing
:v+oW&xJ a138711 Set fso = Nothing51Testing软件测试网OESH2x1NPta @2t
End Function51Testing软件测试网x(Z4pF8x(mZ(_

运行效果:

------------------广东国际大酒店(Guangdong International Hotel)------------------

房型-----------周三
+Ukp:G8v0J e138711标准客房(单自助早)-----------¥48051Testing软件测试网?;wGpvx+r+b{(i
高级客房(单自助早)-----------¥590
k6z]i$ol138711商务套房(单自助早)-----------¥69051Testing软件测试网"J0cG W$AG
行政房(单自助早)-----------¥69051Testing软件测试网+jCJAY
豪华套房(单自助早)-----------¥79051Testing软件测试网6inx4|/q5o;`Z | ~ Q
行政商务套房(双自助早)-----------¥86051Testing软件测试网,` _7B!Z9ZS&pr
行政豪华套房(双自助早)-----------¥1010
ZL+D)? t+DCqH Y$K138711------------------广州总统大酒店(Guangzhou President Hotel)------------------

房型-----------周三
3M8v+Y1?Y"V m138711舒适间(无早)-----------¥32051Testing软件测试网Z;HC O,QGG
舒适间(双自助早)-----------¥360
I/WlY)z!N#]~8g8R138711高级间(双自助早)-----------¥408
4mz`3g]ua138711行政间(双自助早)-----------¥498
nv P HR138711商务套房(双自助早)-----------¥64851Testing软件测试网Y-S%e6{*PXp
行政套房(双自助早)-----------¥788
#Q"IT z3^j%X138711------------------广东南洋长胜酒店(Guangzhou Nanyang King Gate Hotel)------------------

房型-----------周三
!T/NK%u2fU-f ?*g138711卢浮宫-标准单人间(含双早)-----------¥300
^%G;M2M;F138711卢浮宫-标准双人间(含双早)-----------¥300
a"HM5]V5TBk1H138711凯旋宫-高级房(含双早)-----------¥38051Testing软件测试网;i!}.SSi&F E'L
凯旋宫-豪华房(含双早)-----------¥438
Q K_ U^ T138711凯旋宫-豪华商务大床房(含双早)-----------¥568
o2TRB+^:uF138711卢浮宫-行政A一房一厅(含双早)-----------¥60051Testing软件测试网"w0x|3Z!G-q@]
凯旋宫-豪华套房(含双早)-----------¥950
`+x(l"Zw#MGL!g b2h138711卢浮宫-行政B三房一厅(含双早)-----------¥160051Testing软件测试网om DvM5gX
------------------广州鼎龙国际大酒店(Guangzhou Donlord International Hotel)------------------

房型-----------周三51Testing软件测试网6Rc ?@_Z A-v
舒适房(双自助早)-----------¥380
"Z r6Va*P.Bf)l138711高级单人房(双自助早)-----------¥43851Testing软件测试网LW~+K,f1^Bw Pa|
高级双人房(双自助早)-----------¥43851Testing软件测试网2k(M:QrQ's
豪华房(双自助早)-----------¥55051Testing软件测试网!wF{ o!He:E o4u
高级套房(双自助早)-----------¥640
*~CR6|#y138711豪华行政客房(双自助早)-----------¥64051Testing软件测试网0cH0?3?:I'z xm,x ^n%X
豪华套房(双自助早)-----------¥840

 


TAG:

 

评分:0

我来说两句

Open Toolbar