(4)QTP自带的网上订票系统是一个非常经典的描述性编程例子
众所周知,在QTP里自带着一个网上订机票的网站,也就是Mercury Tour。现在一起来看一下在订票过程中何时需要使用描述性编程。
首先登录系统后,如果需要订票的话,就要先搜索航班,此时系统要求输入订票乘客的数量,假设在第一次写脚本的时侯将Passengers设置成了1,然后成功地完成了订票。然后,需要参数化乘客数量来测试订票系统,我们会发现QTP回放失败了。其根本原因在于,乘客的数量已经变化了,导致在订票时需要输入每个乘客的姓名,而在写第一个脚本的时候,只设定了一个乘客的姓名。乘客姓名的输入框是随着乘客数量的变化而动态生成的,我们不可能从对象库里得到没有添加过的对象(如果是100个乘客,那需要事先将100个乘客对应的姓名输入框添加到对象库里,显然这是不可取的)。因此,必须使用描述性编程来完成这个业务。现在,我们假设将乘客数量设定为2,如图1-193所示。
图1-193
然后来看一下设定单个乘客时的脚本如下所示:
Browser("Welcome: Mercury Tours")._ Page("Book a Flight: Mercury").WebEdit("passFirst0").Set "FirstName" Browser("Welcome: Mercury Tours")._ Page("Book a Flight: Mercury").WebEdit("passLast0").Set "LastName" |
然后到对象库里看看WebEdit控件,可以看到对象的属性如图1-194所示。
图1-194
当系统对于发生多个FirstName时,命名规则是passFirst0,passFirst1…依次类推。因此,我们现在只要通过描述性编程就可以完成动态FirstName与LastName的识别工作了。假设参数化的乘客数已经赋值给intPassNum = 3,那么在此,描述性编程脚本就该这样写:
For i = 0 to 3 Browser("Find a Flight:")._ Page("Book a Flight:").WebEdit("name:=passFirst"& i).Set "FirstName" Browser("Find a Flight:")._ Page("Book a Flight:").WebEdit("name:=passLast"& i).Set "LastName" Next |
再举一个和这个经典例子差不多的案例,比如现在有一个订书的网站,有一个输入框可以输入想要订购的数量,输入1就会出现1个输入书名的文本框,代码是:WebEdit("name:=book1");输入2就会出现2个输入书名的文本框,代码是WebEdit("name:=book2")…同样也是依此类推。像碰到这类情况,最好的解决方案就是描述性编程,代码可以是:WebEdit("name:= book"& i)。
小结:以上这些都是对象库编程搞不定或者不适宜搞定的案例。在真实的项目中一定还会有形形色色的案例,在此无法全部列举。但是完全可以举一反三,善加利用描述性编程,从而可以出色地辅助我们完成各种自动化测试需求。
本文选自《51Testing软件测试作品系列》之九——《精通QTP——自动化测试技术领航》。
本站经人民邮电出版社和作者的授权,近期将进行部分章节的独家连载,敬请期待!
版权声明:51Testing软件测试网获人民邮电出版社和作者授权独家连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
相关阅读: