




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、为什么要使用框架?框架是一组自动化测试的规范、 测试脚本的基础代码,以及测试思想、惯例 的集合。可用于减少冗余代码、提高代码生产率、提高代码重用性和可维护性。例如QTestWare就是QTP自动化测试框架中的一类。2、SAFFRON介SAFFRON针对 Webff发的一个简单的 QTPW试框架原型,是AdamGensler 于06年写的,需要QTP 9.1版本以上。完整的SAFFRON本代码可到以下地址 获取: cle&id=62:webqtp-saffron&catid=35:testing_is_believing3、如何使用SAFFRON?SAFFRON架以外部VBS
2、i:件的形式出现,因此使用方法比较简单,直接在 测试脚本中以资源形式导入即可使用,如图所示:导入后,可在"Available Keywords”视图中看到SAFFRON所有函数,如图 所示:选中某个函数,拖拽到专家视图的编辑器中,如图所示:后接一个 URL地址,例如 ,即可使用SAFFRON框架中的BrowseTo函数导航到指定的URL地址,如下脚本所示:UR.lcthii 口OtVjj E*r W ft* ETId#yrtf1 F&±rd » 用5 日立UHwTrrtfX AltlVlAl jh* ka oSjat a - a/ / O ti ilrwM
3、T i- jT EnfoTstli ;沁yW+EBHl1 /*#|!打ij*if aMlf$ Xis£«<f / Uwk J iQtjftU / Wwt / 50x5+41、 / 九wMrka同。 i必 /工 Ltl f uac-li. q*i" Twl Sii,;DJ XJFll丁于二 rlg,?“ 二:':1II H_hi T«,n递$BrowseTo(url)BrowseTo " 4、SAFFRON架代码剖析为了深入了解SAFFRO用及框架的使用方法,下面我们将分别介绍SAFFRON 中的主要函数,对SAFFRON码进行深入
4、剖析。4.1导航到指定URLSAFFRON用名为BrowseTo函数来负责导航到指定的URL如果浏览器尚未 启动,则先调用函数Launch来打开浏览器。BrowseTo函数的定义如下所示:Public Function BrowseTo (url)thirdlevel =""Report micPass, "Navigate to URL", "Navigating to URL: " & Quote (url)If initialized ThenExecute GenerateDescription("Brows
5、er")& "Navigate "& Quote(url)ElseLaunch "website", urlEnd IfReporter.Filter = rfDisableAllEnd Function在脚本中,会判断是否初始化了浏览器,如果有则执行导航动作,导航到指 定的URL导航动作是执行这行脚本来完成的:Execute GenerateDescription("Browser") & "Navigate " & Quote(url)Execute是一个用于执行指定
6、VBScript脚本语句的函数,GenerateDescription函数的定义如下所示:'Generates a generic description based up on the "level" viarable'levelstr - will be one of the values that is in the level array'returns - string representative of the object hierarchyPublic Function GenerateDescription (levelstr)l
7、= IndexOf(level, levelstr)If l >=0 Thenfdesc = level(0) & "(" & Quote(desc(0) & ")."If l >= 1 Thenfdesc = fdesc + level(1) & "(" & Quote(desc(1) & ")."If 2 >= l ThenIf thirdlevel <> "" Thenfdesc = fdesc + level(
8、2) & "(" & Quote(desc(2) & "," & Quote("na me:=" & thirdlevel) & ")."End IfEnd IfEnd IfEnd IfGenerateDescription = fdescEnd Function4.2返回测试对象的描述GenerateDescription函数用于返回对象的描述性语句,例如,指定Browser,则返回如下语句:"Browser("micclass:=Browser
9、")."该语句代表了当前浏览器对象,并且后面加了个点号,这是为了方便后接 "Navigate "这个浏览器对象的导航操作,以及指定的URL字符串,例如"。在 Execute 时,其实执行的VBScript语句如下所示:Browser("micclass:=Browser").Navigate "经过SAFFRON框架封装后,则只需要使用如下语句即可达到同样的效果:BrowseTo "4.3启动浏览器SAFFRON用名为BrowseTo函数来负责导航到指定的URL但是如果浏览器 未启动,则会先调用函数Lau
10、nch来打开浏览器。Launch函数的定义如下所示:prepares the framework for usage, and configures all internal frame work'variables and structures'apptype - used to launch different types of applications based'upon different technologies - currently there is only web'val - string that represents what to la
11、unch'returns - always returns truePublic Function Launch (apptype, val)If "website" = apptype Thenthirdlevel =""Report micPass, "Initialize", "Initializing Framework"level = split(webLevels, leveldelimiter, -1, 1)desc = split(webLevelsDesc, leveldescdelimi
12、ter, -1, 1)object = split(objects, objectdelimiter, -1, 1)objectDescription = split(objectsDescription, objectsDescriptiond elimiter, -1, 1)CloseBrowsersSet IE = CreateObject("InternetExplorer.Application")IE.visible = truelE.Navigate valWhile lE.Busywait 1WendEnd Ifinitialized = trueLaunc
13、h = trueEnd Function可看到脚本中创建了 IE的COM寸象,然后设置IE的Visible属性设置为 Tue,让浏览器可见,然后调用IE对象的Navigate方法导航到指定的URL除 了创建IE的COM寸象外,在Launch函数中还进行框架其它方面的初始化。4.4给指定字符串前后加双引号在BrowseTo函数的定义脚本中,调用了一个名为Quote的函数,该函数的定义如下所示:'generates a string with embedded/surrounding quotesPublic Function Quote (txt)Quote = chr(34) &
14、; txt & chr(34)End Function该函数的作用是给指定的字符串前后加上双引号字符,例如下面代码Msgbox "The message is " & Quote("hello world!")执行结果显示如图所示。ThemsnovT' hdlo world!"如果我们不使用这个函数,则需要这样写我们的代码来实现同样的功能:Msgbox "The message is ""hello world!"""很明显,这样的写法写出来的代码的可读性和可维
15、护性都差一截。4.5点击链接作为一个针对WEBZ用的脚本框架,除了能启动浏览器导航到指定的页面外, 还需要针对页面的各种元素进行测试操作,例如链接的点击、按钮的点击操作。 在SAFFRON架中,使用Activate函数来点击链接、按钮,其函数定义如下所 示:'Activates an object based upon its object type'objtype - the type of object should be limited to values in the object array'text - identifying text for the co
16、ntrol - for a link, it's thetext of the linkPublic Function Activate (objtype, text )localDesc =""If thirdlevel <> "" ThenlocalDesc = GenerateDescription(level (2)ElselocalDesc = GenerateDescription(level (1)End IfAutoSync()Select Case objtypeCase "Link"Execut
17、e localDesc & GenerateObjectDescription("Link","innertext: "& text ) & "Click"Report micPass, "Link Activation", "The Link "& Quote( text ) & "was clicked."Case "WebButton"Execute localDesc & GenerateObject
18、Description("WebButton", "value: ="& text ) & "Click"Report micPass, "WebButton Activation", "The WebButton "& Quote(text ) & " was clicked."End SelectEnd Function函数首先判断对象的类型,然后根据对象类型分别处理,如果是链接对象, 则通过以下语句组合成可执行的VBScript语句,然后
19、用Execute函数来执行:Execute localDesc & GenerateObjectDescription("Link","innertext:=" & text) & "Click"如果是按钮对象,则组合成:Execute localDesc & GenerateObjectDescription("WebButton", "value:=" & text) & "Click"在这里,调用了 GenerateObj
20、ectDescription 函数,GenerateObjectDescription函数的作用与 GenerateDescription函数的作用类似,都是用于返回一个测试对象的描述,不同的是 GenerateObjectDescription 函数需要传入测试对象的描述数组,GenerateObjectDescription函数的定义如'Generates an object description based upon the object, and object Description arrays'obj - name of the object in the obj
21、ect array'prop - additional property to help uniquely identify the object'returns - a string representative of the object descriptionPublic Function GenerateObjectDescription (obj, prop)i = IndexOf(object, obj)ndesc =""If i <> -1 Thenndesc = obj & "("& Quote
22、(objectDescription(i) & ","& Quote(prop) & ")."End IfGenerateobjectDescription = ndescEnd Function有了 Activate函数,我们在写脚本的时候就可以充分利用,简化脚本的编 写,例如下面是两句简单的脚本,分别点击页面上的一个链接和一个按钮:Activate "Link", "Person"Activate "WebButton", "Search"在Act
23、ivate函数中,调用了一个名为 AutoSync的函数,该函数的作用与 QTP的Sync方法是一样的,只是在外面封装了一层,函数定义如下所示:'waits for the web page to finish loadingPublic Function AutoSyncExecute GenerateDescription("Browser") & "Sync"End FunctionAutoSync函数用于等待WEBS面加载完成。4.6 一个小例子到现在为止,我们可以使用 SAFFRON Launch、BrowserTo ft Ac
24、tivate 函 数来编写简单的脚本启动浏览器, 导航到指定的页面,点击链接和按钮,例如下 面就是一个综合了这几个功能的脚本:启动浏览器Launch "website",":1080"'导航到 :1080/WebToursBrowseTo ":1080/WebTours/"点击名为“ administration ”的链接Activate "Link","administration”该脚本调用SAFFRON
25、架的Launch函数启动IE浏览器,然后导航到http:/127.0.O1:1080/WebTours,点击如图所示的页面中名为"administration"的链接。脚本的测试结果如图所示4.7 检查对象是否存在object前面的小例子仅仅实现了启动浏览器、 导航、点击链接和按钮的功能,如果 要组成一个完整的测试用例,还缺少一些东西,例如检查指定的对象是否存在, 在SAFFRON,用Verify函数来实现这个功能,Verify函数的定义如下所示:Verify the Existence of anobjtype - values should be limited to
26、values in the object array'text - multi-purpose argument that indicates what to verify '-for a link, or button, it's the text of the control '-for a list, it's the name of the control '-for a frame, it's the name of the frame Public Function Verify (objtype, text) rval =
27、false localDesc ="" estr ="" If thirdlevel <>"" ThenlocalDesc = GenerateDescription(level(2)Else localDesc = GenerateDescription(level(1)End IfAutoSync()Select Case objtype Case "Page"Execute "rval = "& GenerateDescription(level( 1) & &
28、quot;Exist (0)”If rval ThenExecute "title = "& GenerateDescription(level( 1) & "GetROProperty("& Quote( "title" ) & ")"rval = trueElse rval = falseEnd IfEnd IfCase ”CurrentFrame""Then& localDescIf thirdlevel <> estr = "
29、rval = End IfLink" , "innCase "Link"estr = "rval = "& localDesc & GenerateObjectDescription(ertext尸"& text)Case "WebButton"estr = "rval = "& localDesc & GenerateObjectDescription("value尸"& text)Case "WebLis
30、t"estr = "rval = "& localDesc & GenerateObjectDescription(name:=" & text)Case "WebEdit"estr = "rval = "& localDesc & GenerateObjectDescription(name:=" & text)WebButton"WebList","WebEdit",End SelectExecute estr +
31、 "Exist (0)”End IfIf rval ThenReport micPass, objtype &" Verification" , "The " & objtype &" " & Quote(text) &" was verified to exist"ElseReport micFail, objtype &" Verification" , "The " & objtype &&quo
32、t; " & Quote(text) &" was not found"End IfIf "True" = rval Thenrval = TrueElserval = FalseEnd IfVerify = rvalEnd Function由于判断不同对象的存在需要采用不同的属性,因此 Verify函数中对不同 的对象类型进行判断、分别处理。例如,对于 Link类型的对象,用innertext 属性,对于 WebButton,则采用value属性,但是最后都需要组合成一条语句, 后接"Exist",通过Ex
33、ecute方法执行这个语句,从而实现对象是否存在的判断。对于页面对象(Page)的存在性检查有点不一样,采用的是以下脚本:Case "Page"Execute "rval = "& GenerateDescription(level( 1) & "Exist (0)"Execute "title = "& GenerateDescription(level( 1) & "GetROProperty(" & Quote( "title"
34、) & ")"If title = text Thenrval = trueElserval = falseEnd IfEnd If通过GetROProperty方法获取当前页面的title 属性,然后与彳入的"text" 参数进行比较,如果相等,则认为页面对象是存在的。在测试脚本中可以这样使用 Verify函数: 启动浏览器Launch "website" , ":1080"'导航至U " :1080/WebTours”Brow
35、seTo ":1080/WebTours/"If Verify ( "Link" , "administration" )= False then Reporter.ReportEvent micFail,"检查链接","链接不存在"Else '点击名为" administration ”的链接 Activate "Link" , "administration" End IF 脚本中先用Verify检查名为
36、"administration"的链接对象是否存在,如果不存在则提示错误,如果存在则进一步调用Activate函数点击链接。4.8 在文本框输入字符串在SAFFRON,可以使用EnterTextIn 函数来给输入框(WebEdit对象)输入 字符串。EnterTextIn函数的定义如下所示:'Enters text into an edit field'objname - name of the control - use Object Spy if you don't kn ow what it is'text - the text to
37、enter into the controlPublic Function EnterTextIn (objname, text)localDesc =""rval = trueIf thirdlevel <>"" ThenlocalDesc = GenerateDescription(level(2)ElselocalDesc = GenerateDescription(level(1)End IfAutoSync()localDesc = localdesc & GenerateObjectDescription( "W
38、ebEdit" , "nam e:=" & objname)Execute localDesc & "Set (" & Quote(text) &")"Report micPass, "Enter Text" , "Text: "& Quote(text) &" was entered into "& Quote(objname)EnterTextIn = rvalEnd Function例如,如果我们要在如图
39、所示的登录界面中输入用户名和密码,则可以使用SAFFRON EnterTextIn 函数来实现。测试脚本可以这样编写:输入用户名EnterTextIn "username","chennengji”输入密码EnterTextIn "password","123"4.9 读取文本框的字符串在SAFFRON,可以使用EnterTextIn 函数来给输入框(WebEdit对象)输入 字符串。对应的有一个名为GetTextFrom的函数,用于读取输入框和文本列表的 字符串,GetTextFrom的定义如下所示:'Obtain
40、s text from a control'objtype - is the type of control the get the text from'objname - is the name of the control - use Object Spy if you d on't know the name'returns - the text of the controlPublic Function GetTextFrom (objtype, objname)text =localDesc =""If thirdlevel <
41、;>"" ThenlocalDesc = GenerateDescription(level(2)ElselocalDesc = GenerateDescription(level(1)End IfAutoSync()Select Case objtypeCase "WebEdit"Execute "text = "& localDesc & GenerateObjectDescription( "WebEdit" , "name:=" & objname) &am
42、p; "GetROProperty (" & Quote( "value" ) & ")"Case "WebList"Execute "text = "& localDesc & GenerateObjectDescription( "WebList" , "name:=" & objname) & "GetROProperty (" & Quote( "value&qu
43、ot; ) & ")"End SelectReport micPass, "Capture Text" , "Text: "& Quote(text) &" was captured from the control "& Quote(objname)GetTextFrom = textEnd Function假设我们需要读取如图所示的界面中的"Departure City"和"Arrival City" 这两个文本列表(WebList对象)中
44、的字符串,则可以使用 GetTextFrom函数。测试脚本可以这样编写:获取航班起始城市DepartureCity = GetTextFrom( "WebList","depart")获取航班终点城市ArrivalCity = GetTextFrom( "WebList","arrive")当然,也可以使用相同的函数来读取文本框(WebEdit对象)的字符串,例如 下面的脚本读取"NO. of Passengers"对应的文本框中的字符串:'获取乘客数量PassengerNumber =
45、 GetTextFrom( "WebEdit","numPassengers")4.10 选择列表中的一项在SAFFRON,可以使用SelectFromList函数从下拉框列表(WebList对象) 中选择指定的一项。SelectFromList的定义如下所示:'Selects a specific value from a listbox, or combobox'objname - name of the control - use Object Spy if you don't kn ow the name property
46、'text - the item in the combobox to selectPublic Function SelectFromList (objname, text)localDesc =""rv =""rval = falseIf thirdlevel <>"" ThenlocalDesc = GenerateDescription(level(2)Else localDesc = GenerateDescription(level(1)End If AutoSync() localDesc = loc
47、aldesc & GenerateObjectDescription( "WebList" , "nam e:=" & objname)Execute "cnt = "& localDesc & "GetROProperty(" & Quote( "items count" ) & ")"For i =1 to cntExecute "rv = "& localDesc & "Get
48、Item (" & i & ")"If rv = text Then rval = true End If Next If rval ThenExecute localDesc & "Select " & Quote(text)End IfIf rval ThenReport micPass, "WebList Selection" , "The WebList item "& Quote(text) &" was selected."E
49、lseReport micFail, "WebList Selection" , "The WebList item "& Quote(text) &" was NOT found."End IfSelectFromList = rvalEnd Function假设我们需要从如图所示的界面中的"Departure City"的下拉框中选择其中一项,则可使用SelectFromList函数来实现。测试脚本可以这样写:'选择航班起始城市为"San Francisco"Sele
50、ctFromList "depart","San Francisco4.11关闭浏览器We顷面测试的最后一个步骤一般都是关闭浏览器,在 SAFFRON,也把这 个过程封装成了一个名为"CloseBrowsers"的函数,该函数的定义如下:'close all opened browsersPublic Function CloseBrowsersIf Browser( "micclass:=Browser" ).Exist (0) ThenBrowser( "micclass:=Browser"
51、).CloseEnd IfWhile Browser( "micclass:=Browser" , "index:=1" ).Exist (0)Browser( "index:=1" ).CloseWendIf Browser( "micclass:=Browser" ).Exist (0) ThenBrowser( "micclass:=Browser" ).CloseEnd IfEnd FunctionCloseBrowsers函数会把当前所有打开的浏览器都关闭,脚本中采用描述性编程的方式获
52、取所有对象类型为“Browser”的测试对象,然后循环逐个关闭所有 这种类型的测试对象。5、对SAFFRON架进行扩展SAFFRON一个基本的框架,它封装了浏览器的相关测试操作、封装了一些 基本对象的测试操作,例如 Link、WebButton、WebEdit、WebList等控件,可用 于基本的WEEK面的测试,并且简化了测试脚本的编写,可以让代码的可读性和 可维护性得到增强。但是SAFFRON仅是一个基础框架,我们还需要进一步地对其扩展才能应用 到实际的WEB1动化测试项目中去,例如扩展对更多的控件的支持。下面是一个 对Activate函数扩展Image对象的点击操作的过程:(1)首先打开
53、SAFFRON架的VBS文件,找到开头的变量定义处,添加Image 对象,让框架可以识别和支持Image对象:'扩展对Image对象的支持objects = "Link|WebButton|WebList|WebEdit|Image"objectsDescription ="micclass:=Link|micclass:=WebButton|micclass:=WebList|micclass:=WebEd it|micclass:=Image”(2)修改Activate方法,添加对Image对象的Click操作的支持,脚本修改 成如下所示:'A
54、ctivates an object based upon its object type'objtype - the type of object should be limited to values in the object array'text - identifying text for the control - for a link, it's the text of the linkPublic Function Activate (objtype, text)localDesc =""If thirdlevel <>"" ThenlocalDesc = GenerateDescription(level(2)ElselocalDesc = GenerateDescription(level(1)End IfAutoSync()Select Case objtypeCase "Link"Execute localDesc & GenerateObjectDescription( "Link" , "innertext:= "& text) & "Click"Repor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 土地转让承包合同协议书
- 红木家具购销合同协议书
- 终止合同协议书
- 做记号笔合同协议书
- 荔枝转租合同协议书
- 理疗加盟合同协议书范本
- 厂区食堂承包合同协议书
- 终止办学合同协议书
- 作废合同协议书
- 食堂厨具合同协议书
- 求职线上测试题及答案
- 湖南炎德·英才大联考长郡中学2025届模拟试卷(一)语文+答案
- 2025存量房买卖合同电子版
- 危险化学品企业关键设施安全风险辨识管控指导手册
- 2025年陕西高中学业水平合格性考试物理模拟试卷(含答案详解)
- SL631水利水电工程单元工程施工质量验收标准第4部分:堤防与河道整治工程
- 人工智能引论知到智慧树章节测试课后答案2024年秋浙江大学
- 国开电大-工程数学(本)-工程数学第4次作业-形考答案
- 蒸汽锅炉运行记录表最新版
- 园林绿化工程质量检查验收记录表
- 全国电子设计大赛报告一等奖
评论
0/150
提交评论