




已阅读5页,还剩271页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.3.5总结本章节的内容主要讲的是QTP的录制与回放,市面上,任何一本书都会有这部分的内容。但是,作者对这部分内容进行了提炼,把其他书里的那些几乎等于QTP工具介绍的内容全部剔除,因为那些内容在实际的项目应用中几乎不会用到,保留了能切实在项目中用到的内容,通过自己的实战经验配合大量案例、实例(几乎每一个知识点都有例子)进行细致地讲解,希望读者在学习了本章后,能对QTP这个自动化测试工具的操作,以及如何把工具融合实际项目上有个整体的把握。虽然剔除了很多不需要的内容,但是,由于介绍的是QTP的源头(就好比本章节标题一样“QTP的开关”)而且配合了大量的实例,图文并茂,所以在完成本章节的编写后才发现原来还是需要用到那么大的篇幅才能将重要的知识点讲清楚、讲透。在设计练习题的方面,作者思虑许久,考虑到本章节内容的性质,决定在本章节的巩固练习题中不设置实际操作题,本章节的练习题如果要出成操作题,无非就是传统的“录制与回放”,这样就会不由自主地偏离作者的原有思想。所以,作者决定以选择题(单选和多选)、判断题、排列题等各类有趣的形式出一份类似Exam一样的概念理论题,这些所谓的理论题其实是对整个章节内容知识点的贯穿,希望能起到巩固与复习的作用。知识点巩固和举一反三练习一、知识加强巩固趣味题之过5关(注:选择题可能是单选也可能是多选)1、 请排列QTP业务操作及执行流程的顺序。()A、录制B、打开浏览器C、回放D、打开QTP2、 QTP的两种脚本运行模式分别是Normal和Fast,它们之间的区别是什么?请在下面4个选项中做出正确的选择。()A、以QC调用的方式执行脚本,运行模式是Fast。B、脚本运行时,如果左侧有黄色箭头,则代表这种运行模式是Fast。C、Normal运行模式的执行速度最快。D、可以在Normal运行模式中设置间隔时间,单位是毫秒。3、请在以下4个选项中选择正确的选项。()A、QTP停止运行的快捷键是Ctrl+Alt+F5,但不提供个性化设置。B、QTP具有Event和Mouse两种回放模式。C、QTP具有Slow、Normal和Fast 3种运行模式。D、QTP具有两种录制模式,它们是Analog Recording和Low Level Recording。4、 请在以下4个选项中选择错误的选项。()A、假设在运行设置中选择Run on all rows选项,在QTP的Data Table中建立4行数据,其中第2行的值为空,则QTP在执行两次迭代后运行结束。B、如果激活Run one iteration only选项,QTP在运行时只运行1次C、Browser navigation timeout:XX seconds就是设置运行测试步骤之前,等待网页加载时间的最大值,超出了该值后脚本直接退出并报错。D、QTP的运行模式设置具体位置在:ToolsOptionsWebAdvancedRun settings下的Replay type。1.3.5总结本章节的内容主要讲的是QTP的录制与回放,市面上,任何一本书都会有这部分的内容。但是,作者对这部分内容进行了提炼,把其他书里的那些几乎等于QTP工具介绍的内容全部剔除,因为那些内容在实际的项目应用中几乎不会用到,保留了能切实在项目中用到的内容,通过自己的实战经验配合大量案例、实例(几乎每一个知识点都有例子)进行细致地讲解,希望读者在学习了本章后,能对QTP这个自动化测试工具的操作,以及如何把工具融合实际项目上有个整体的把握。虽然剔除了很多不需要的内容,但是,由于介绍的是QTP的源头(就好比本章节标题一样“QTP的开关”)而且配合了大量的实例,图文并茂,所以在完成本章节的编写后才发现原来还是需要用到那么大的篇幅才能将重要的知识点讲清楚、讲透。在设计练习题的方面,作者思虑许久,考虑到本章节内容的性质,决定在本章节的巩固练习题中不设置实际操作题,本章节的练习题如果要出成操作题,无非就是传统的“录制与回放”,这样就会不由自主地偏离作者的原有思想。所以,作者决定以选择题(单选和多选)、判断题、排列题等各类有趣的形式出一份类似Exam一样的概念理论题,这些所谓的理论题其实是对整个章节内容知识点的贯穿,希望能起到巩固与复习的作用。知识点巩固和举一反三练习一、知识加强巩固趣味题之过5关(注:选择题可能是单选也可能是多选)1、 请排列QTP业务操作及执行流程的顺序。()A、录制B、打开浏览器C、回放D、打开QTP2、 QTP的两种脚本运行模式分别是Normal和Fast,它们之间的区别是什么?请在下面4个选项中做出正确的选择。()A、以QC调用的方式执行脚本,运行模式是Fast。B、脚本运行时,如果左侧有黄色箭头,则代表这种运行模式是Fast。C、Normal运行模式的执行速度最快。D、可以在Normal运行模式中设置间隔时间,单位是毫秒。3、请在以下4个选项中选择正确的选项。()A、QTP停止运行的快捷键是Ctrl+Alt+F5,但不提供个性化设置。B、QTP具有Event和Mouse两种回放模式。C、QTP具有Slow、Normal和Fast 3种运行模式。D、QTP具有两种录制模式,它们是Analog Recording和Low Level Recording。4、 请在以下4个选项中选择错误的选项。()A、假设在运行设置中选择Run on all rows选项,在QTP的Data Table中建立4行数据,其中第2行的值为空,则QTP在执行两次迭代后运行结束。B、如果激活Run one iteration only选项,QTP在运行时只运行1次C、Browser navigation timeout:XX seconds就是设置运行测试步骤之前,等待网页加载时间的最大值,超出了该值后脚本直接退出并报错。D、QTP的运行模式设置具体位置在:ToolsOptionsWebAdvancedRun settings下的Replay type。1.4认清并请远离QTP的脚本录制模式阶段要点 了解Keyword View结构。 摆脱Keyword View。 熟练掌握Expert View的代码结构。1.4.1QTP的两种视图及思维转换从本章节开始,读者将真正开始彻底摆脱脚本录制,正式走向脚本开发的台阶。在开始讲解QTP脚本开发之前,首先需要详加介绍Expert View这个视图,这个视图是QTP官方指定的脚本开发唯一认可的视图。那么,以何为出发点以及如何介绍Expert View这个视图呢?决定以抛砖引玉的方式,利用脚本录制视图Keyword View形象地引出脚本开发视图Expert View。相信只要稍许接触过QTP的读者就一定知道QTP提供两种视图,一种是Keyword View(关键字视图),另一种是Expert View(专家视图)。Mercury公司开发两种视图的本意是想让不同类型的人使用不同类型的视图。接下来分别对这两个视图进行讲解,并开始抛砖,直到引出一块良田美玉。1Keyword View(关键字视图)通过关键字视图(一种图形化的视图),QTP提供了一种模块化的表格格式,创建和查看测试或组件的步骤。在录制脚本的过程中,用户在应用程序上执行的每个步骤,在关键字视图中记录为一行,这样用户就可以轻松地修改任何一部分业务步骤。在这里拿“百度”的首页举一个例子,业务操作分3个步骤:点击“图片”链接;在图片搜索栏中输入“凤姐”;点击“百度一下”。在完成了这3个步骤后,关键字视图将包含下列行,如图1-47所示。图1-47图1-47中可以看到关键字视图非常直观有效,使用的用户可以很清晰地看到被录制对象的录制层次及运行步骤。但是,如果想自动化完成一些复杂的业务操作,在这张视图里是绝对不可能的,那就必须切换到专家视图里才行。专家视图等一切事宜就暂且搁置一下。先掌握关键字视图的界面、原理和工作机制。在关键字视图中,一共分4列:Item、Operation、Value和Documentation。Item:记录了所有对象。Operation:该对象的操作。Value:对象操作所用到的值。Documentation:QTP自动生成的描述语句,描述了是什么对象,做了什么,怎么做。关键字视图的介绍马上就要结束了,最后作者分解这个视图(语句会很随意)后会直接进入专家试图的解说。前面说过“在录制脚本的过程中,用户在应用程序上执行的每个步骤在关键字视图中记录为一行”,在本例中一共记录到6个步骤,如下: 打开浏览器; 进入百度首页; 点击图片链接; 进入图片页面; 在搜索框输入“凤姐”; 点击百度一下。2Expert View(专家视图)瞬移成功,首先肯定是要讲专家视图的工作原理,“QTP在关键字视图中的每个节点在专家视图中对应一行脚本”。读者可能一下子不明白这句话,那先来看两段代码,第一段代码是将关键字视图的工作原理用在专家视图上的错误代码,转换后的脚本如下:Browser(百度一下,你就知道)图1-47中页面1部分Page(百度一下,你就知道)Link(图片).Click图1-47中页面2部分Page(百度图片全球最大中文图片库)WebEdit(word).Set凤姐WebButton(百度一下).Click再看一下专家视图中正确的代码:图1-47中页面1部分Browser(百度一下,你就知道).Page(百度一下,你就知道).Link(图片).Click句1图1-47中页面2部分Browser(百度一下,你就知道)._Page(百度图片全球最大中文图片库).WebEdit(word).Set凤姐句2Browser(百度一下,你就知道)._Page(百度图片全球最大中文图片库).WebButton(百度一下).Click句3看完这两段代码以后,再回过头来理解专家视图的工作原理,专家视图和关键字视图是完全不同的,用通俗点的讲,专家视图并不像关键字视图那样,每个步骤都在视图中记录成一行,在专家视图中,必须定位到业务操作最终的对象,并且每一句的结束,以及最终的对象的业务行完毕为基准。在这里,最终的对象就是节点,专家视图中的一句代码是关键字视图中好多个步骤的结合。而那段作者自己伪造的代码就不是,每一句都不完整,要么有头没尾,要么无头有尾,这就是Keyword View和Expert View最根本的区别,下面,一句句看专家视图中的代码构成,先以“句1”来说,“句1”中集合了3个对象。Browser该对象如果出现必定是第一层,可以把它想象成打开的一个指定浏览器,具体哪个浏览器那么就由后面括号里的参数决定,如:Browser(百度一下,你就知道),这样QTP就能很准确地识别到底打开的是哪个浏览器了。Page浏览器下肯定有各种各样的网页。那要定位这个对象也就很简单了,和上面一样,在后面的括号内加参数,如:Page(百度一下,你就知道),这样QTP就知道了,原来是要定位一个叫“百度一下,你就知道”的网页,然后其他网页会一概不理!Link在定位了前两个对象后,终于可以定位到要进行业务操作的对象了。可是,页面上如果有好多Link呢,怎么办?只能和之前一样,在后面的括号内写进参数,如Link(图 片),这样QTP就不会乱了!好了,在最终找对了要操作的对象后,就可以给出指令,命令它做事情了,如需要它进行点击操作,那就给Link对象来个Click方法,到此,整个语句就可以完毕了。分析:“句1”已经被拆解,作者在这里用最通俗的语言方式连贯地叙述一遍“句1”,希望能让新人听明白。在一个叫做“百度一下,你就知道”的浏览器下的一个名曰“百度一下,你就知道”的网页页面上找到一个叫“图片”的链接,找到后,点击它。小提示:在上面的例子中,是以Browser().Page().Link()的结构出现的,但实际上,在Web测试中并不只有这一种固定形式,除了Browser必定是在第一层以外,Page以及Link(或其他所有对象控件,如WebEdit等)都不是固定必须要接在前面那层的后面的,比如:(2)Browser().Page().Frame().Link():Link对象跟在Frame对象后面而没有跟在Page后面。(2)Browser().Dialog().Page().WebElement():Page对象跟在Dialog对象后面的一个例子。接下来再看看“句2”,这句代码中需要注意Page已经变化了,变成了Page?(百度图片全球最大中文图片库),然后在该页面中找到对象WebEdit(word),最后给这个对象一个Set的操作方法并在后面写入参数,使得QTP在该页面上找到关键字搜索框,输入“凤姐”。最后的“句3”唯一和前者的变化就是最终操作的对象不同了,Browser不变,页面仍然是Page(百度图片全球最大中文图片库),最后在前面输入好参数的前提下对WebButton?(百度一下)这个控件进行一个点击的操作,使得百度图片搜索引擎能够搜索到一些凤姐的照片*终极分析*以上可以看到Browser对象一直使用的是同一个,随着Page对象的改变而分成了2个分支,在不同的分支上定位到不同的最终目标并赋予“动作”。所以,现在应该知道关键字视图中的代码结构了。就是通过这样的一层层定位,直到定位到最后的待操作对象,从而在Expert View下完美地组成一句脚本代码。注:需要引出下一层对象用“.”,直到定位到最后一个待操作对象,然后仍然用“.”赋予其动作(各种不同的方法)。小提示:在QTP中,要找到具体对象,如“图片”这个Link,规则就是在对象大类(Link类)后面以括号+引号的形式具体定位到那个Link控件,比如Link(图片)。需要注意的是,输入括号和引号乃至其他任何符号都必须是在英文状态下。切记!很容易出现类似的问题,在中文状态的输入法下打引号,结果QTP报错,自己找了好长时间也找不出问题。概括&小结:对于QTP 来说,绝大部分的复杂操作都无法在关键字视图中实现,例如,要处理动态对象、需要定制个性化测试结果、获取对象运行时的属性值(Run-time Value)等。QTP的核心编码语言是Visual Basic Script,因此,如果读者熟悉VBScript,就可以运用自如地通过编程方式在专家视图中设计复杂的测试脚本。同样,QTP本身的对象库编程(Object Programming)和描述性编程(Descriptive Programming),这一切也都必须在专家视图中才能完成。关于对象库编程、描述性编程、VBScript编程、Run-time Value、处理动态对象等一系列知识都会在后面的章节中逐步向读者呈现。1.4.2总结不知道有些读者会不会有这样的疑问,本书既然一向有“彻底抛弃脚本录制”的理念,那为什么还要写Keyword View(关键字视图)的内容呢,就算要写只一句话带过不就得了!作者由衷地希望有这些疑问的读者越多越好,这说明广大读者就是冲着“抛弃录制”的思想购买这本书的。现在听作者解释一下吧。作者这么做就是因为想抛出一块好砖引出更好的玉,在抛砖的时刻(笼统、重点配合一个实例介绍关键字视图)如果能做,越有声色,后面引出的玉一定就能更好(将关键字视图中的步骤“画面”,一条一条转进专家视图使其成为脚本代码的一个解读过程)。另外,请重新回顾下这个小章节标题的后半部分“思维转换”。作者觉得更应该引导读者转换的是思想、思维,绝对不该是两个视图间的转换那么简单与粗糙。读者要从思想上去认识Expert View,如果光从操作上直接转向Expert View(直接在关键字视图敲击代码),表面上看很简单很轻松,但其实忽略了对专家视图的认识,也忽略了对QTP两个视图原理以及之间关系和不同点上的认识,如果这样走下去,作者觉得在今后脚本开发的学习道路上挫折会越来越多,地基打好的关键性大家都很明白。相信,本书的这一个小章节内容虽少,但是对今后的帮助不一定少!知识点巩固和举一反三练习一、大家来找茬(结合图1-48找出代码片中的错误)图1-48代码片如下:Browser(百度一下,你就知道).Page(百度一下,你就知道).Link(知道).ClickBrowser(百度百科全球最大中文百科全书)._Page(百度百科全球最大中文百科全书).WebEdit(word).ClickBrowser(百度一下,你就知道)._Page(百度百科全球最大中文百科全书).WebButton(进入词条).Set51testing二、请根据图1-49中关键字视图的结构与步骤转化成专家视图中的代码。图1-491.5QTP精华对象库(上)之基础攻略篇阶段要点 初步了解QTP中的测试对象模型。 明确Object Identification是管理对象模型的长官。 掌握智能识别原理、机制和各项设置。 对象库基本操作之添加、更新、对象闪烁、副对象库(Associate Repositorys)。 一个有趣的实验证明,做项目时手工添加对象的好处与效率。 Export Local Objects与Export and Replace Local Objects。 掌握并熟练运用Object Spy。 明确使用公共对象库的必要与优点。 熟练驾驭对象库指挥官Object Repository Manager。 Object Repository Manager的两个王牌级辅助工具初体验。1.5.1引言如果说,上一章节是彻底摆脱脚本录制的一个良好的开端,是带领读者逐步走向QTP自动化测试项目开发的台阶,那么从本章节开始,读者将跨出巨大的一步,真正开始走进QTP脚本开发的世界。在QTP这个自动化测试工具中,存在着两种脚本开发模式,第一种开发模式就是从本章节开始要逐步具体、深入、详细讲解的“对象库编程”。当然,本书的一贯原则是“实用原则”,所以无论是在上篇(本章节)还是下篇(1.6章节)都绝对不会详细地讲解在实际项目运用中用不到或很少会用到的知识点。想要精通对象库编程这个开发模式,并驾轻就熟地运用到自动化测试项目中,首当其冲就是要先“精通”QTP的对象库,作者讲的对象库其实是一个总称和概括,从大的方面包含对象库本身的功能、对象库的机制与原理、对象库编程知识、如何在实际项目中运用对象库编程等。在上面作者主要针对QTP对象库的机制与原理以及对象库本身的功能做深入讲解,而对象库编程的部分则会在下篇中精彩解读。虽然需要掌握那么多知识的确很烦,也需要一个过程,但是作者认为上篇和下篇中的所有内容已经是最精简的了,所以,请读者务必对这些知识点做到“精通”,它们都是经常在实际项目中使用的,可以说是QTP脚本开发的必备技能!如果不能精通QTP的对象库,那一定不会是一名合格的QTP自动化测试工程师!1.5.2对象库的出现改写了软件测试历史QTP的对象库是这个强大的自动化测试工具的核心,也是其精华所在!有了对象库这一整套功能、机制,QTP才可以在那么多的自动化测试工具中脱颖而出!QTP的整套对象库功能与对象识别机制给自动化测试人员带来了前所未有的体验,它的成熟、上手度、良好的使用感受都是市面上其他任何自动化测试工具无法给予的。对象库是QTP在实际项目应用中的枢纽,读者一旦精通了它,会感觉到在项目应用、QTP各项功能中都会和对象库产生必要联系。本章节的内容会结合大量仿真项目的应用来引导读者逐步精通对象库,希望读者能够做到举一反三,细细去品味对象库带来的不同感受(针对之前使用过其他自动化测试工具的读者效果更佳)!小小的总结一下,可以说QTP在实际项目中的应用开发(特别是自动化测试项目做成功的案例)绝大部分都基于对象库编程模式,所以,对象库的出现改写了自动化测试领域的历史,也推动了这个技术领域走向更高的台阶!另外,先预告下,本章节以及下一章节的篇幅会很大,因为这两个章节的内容是QTP最精华的部分,也是整个第一章的最重要的一块,务必耐心学习。1.5.3一个简单的实例介绍对象库原理、机制及操作流程1.5.3.1对象模型的老大Object Identification和对象库的暧昧关系在介绍对象库的原理与机制之前,首先说一下QTP自动化测试的原理,分以下3个步骤。(1)封装真实被测对象并转化为QTP对象到对象库。(2)对比对象库里的对象鉴别属性和运行时的真实被测对象的鉴别属性。(3)对比后如果一致,则说明对象成功匹配并可以继续对该真实被测对象进行后续操作,如果两者不一致则报错,提示为对象无法识别。我们可以看到,QTP自动化测试的原理其第一步就和对象库产生了联系,具体到底是如何联系起来的呢?其实很简单,在QTP里有测试对象模型这一个概念,它把各种对象都分门别类起来,建立出一个个对象模型,然后用这些对象模型来表示Web页面中的对象,比如WebButton、WebList、WebElement等各种各样的对象。每个对象模型都有一个可以唯一标识对象的关键属性列表,我们将前面这些连起来一块说,就是在添加对象至对象库后,QTP自动建立被添加对象的对象模型,并给出一个默认识别标识。然后,每个对象模型都有一个可以唯一标识对象的属性列表,这个属性列表是可以设置的,它就是Object Identification,先认识一下它,如图1-50所示。图1-50如图1-50所示,可以看到这就是Object Identification的界面,开启它的方法是:QTP上方菜单栏ToolsObject Identification。在Object Identification对话框中设置的属性在添加完对象后就可以在对象库中查看到。如果觉得这些默认显示的属性还不够或者有的默认的属性是多余的,可以进行手工设置,看一下实例,通过实例来看最终效果,需要再一次借用百度的搜索框,如图1-51所示。图1-51这是一个WebEdit控件,也就是一个WebEdit对象模型,等会作者把这个对象添加到对象库中,添加两次,第一次不改Object Identification中WebEdit对象模型的默认属性,第二次剔除其中一个属性,然后一起看看它在对象库中的属性列表显示情况。先来看默认的情况,如图1-52所示。图1-52图1-52中,作者标识了两个不同的区域Mandatory Properties和Assistive Properties。先知道它们的区别,Mandatory Properties就是对象模型的必要属性,这个区域设置的属性在实际被测对象与对象库匹配时,只要有一个属性不一致就报错。Assistive Properties就没有这个规矩了,并且QTP默认所有的对象模型在这个区域中没有任何属性。继续回到前面所讲,如图1-52中所示,可以看到WebEdit对象模型的默认必要属性有3个:html tag、name、type。接下来,开始添加百度搜索框这个WebEdit对象,并一起来看一下对象库中的属性列表情况,如图1-53所示。图1-53我们可以看到,对象库列表中的属性(Description properties)也是3个:type、name、html tag,在Object Identification列表中显示什么,对象库列表就显示什么。小提示:关于?Test object details?列表中Description properties(描述属性):在?Description properties里定义的所有属性都是必要检查属性,都会和实际运行时对象的属性校验,如果匹配不上则报错,就以图1-53中的name属性举例,如果实际运行时,被测对象的name属性不是wd,则匹配失败,我们还可以根据项目实际情况额外地在列表下添加更多的必要检查属性,也可以筛检一部分,后续章节会有一些类似的实例。那在Object Identification列表中删除一个属性,对象库列表中会有什么变化呢?会不会仍然一致呢?继续做实验,在Object Identification列表中删除html tag属性,如图1-54所示。图1-54可以看到html tag属性已经从Mandatory Properties区域中消失了,关于如何让它消失或者复活,已经在图1-54中明示了。那么,再一次将百度搜索框添加到对象库中看效果,如图1-55所示。图1-55实验证明:Object Identification列表中没有的对象库列表中也不会有,如果读者哪一天发现预期结果不正确的时候,请提交缺陷给HP。不知道读者是否还记得,在“1.3.4 QTP回放机制”那个章节里提到过智能识别这个概念,在Object Identification里也有智能识别的设置按钮,在这里作者介绍下这个功能,并对QTP的智能识别做一些“合理的解释”。我们先来看下Object Identification里的这个智能识别设置功能,如图1-56所示。图1-56首先,我们可以看到,在所有的Web对象模型里,每个对象默认是允许智能识别的(而Standard Windows对象模型里的各类对象默认是不支持智能识别的),在这里的智能识别功能和“1.3.4 QTP回放机制”那个章节里提到的智能识别功能区别在于,这里的智能识别功能针对的是对象模型下的某一个具体对象,举个例来说,比如可以让WebEdit对象开启智能识别,但是不让WebCheckBox对象开启,而那个章节中的智能识别是一个总开关,假设这个总开关是打开的,那么例子中的情况就是WebEdit控件可以智能识别,而WebCheckBox控件则不行,那么假设这个总开关是关闭的,则在Object Identification里无论你怎么设置,任何对象控件都不会智能识别,务必别搞乱了!其次,在Object Identification里,如果某控件开启智能识别(仍然借用WebEdit对象为例),我们还可以对可智能识别的属性进行设置,如前面的图1-56中,点击Configure按钮就可以弹出设置框,设置框效果如图1-57所示。图1-57从图1-57中可以看到,已经打开了WebEdit对象模型的智能识别设置窗口,左侧的列表中是这个对象默认的基本智能识别属性,这个列表中的一切属性是即刻生效的(即会首先智能识别这些基本属性),而右侧列表是备用属性,暂时是不会生效的,只有当左侧基本属性列表中的属性全部使用过后,仍然没有识别到的情况下才会生效,QTP会根据备用属性列表中的属性按着设定好的属性顺序来一个个继续智能识别,直到匹配到为止,当然连所有备用属性都不能识别后QTP就会报错了。这里需要注意的是,每个对象模型的默认智能识别属性都是不同的。在做项目的时候,一般使用这些默认的设置即可以应付绝大多数情况,毕竟这些默认设置都是Mercury公司设计出来的,相信他们也是考虑再三的,肯定具备一定道理和权威性。最后,在了解了Object Identification里的智能识别相关功能和回顾了之前的智能识别功能后,现举一个实例来让读者明白,智能识别这个功能究竟是什么?在项目应用中启用了智能识别后会发生什么?实例:先说个基本概念和原理,运用智能识别后,QTP在遇到对象识别出问题的时候,会尝试应用智能识别(Smart Identification),如果智能识别能定位出对象则继续执行脚本,反之则报错并提示错误信息,下面看一下这个示例脚本:Browser(51Testing软件测试网-中国软件测试人的精神家园)._Page(51Testing软件测试网-中国软件测试人的精神家园)._Image(51Testing软件测试网).Click注:以上脚本来源于51Testing软件测试网首页,如图1-58所示。图1-58对于“51Testing软件测试网”这个Image对象,QTP默认采用alt、html tag、image type属性来识别对象(见图1-59)。图1-59然而,当开发好上述脚本后,假设开发人员又在同一个页面添加了名叫“51Testing软件测试网-老网站”的Image对象(现在用作登录老网站),同时修改了原来的“51Testing软件测试网”对象的alt属性,改成了“51Testing软件测试网-全新网站”。这样当针对这个新版本的页面重新回放上述脚本时,QTP就不能基于alt + html tag + image type的属性组合来识别原先的“51Testing软件测试网”(现在的“51Testing软件测试网-全新网站”)这个Image对象了,因为alt属性已经改了。但是QTP仍然能够正确地识别出这个对象,为什么呢?就是因为这个时候它开启并使用了智能识别功能(Smart Identifation)。下面的过程描述了QTP应用智能识别来确认原“51Testing软件测试网”这个Image对象的步骤。(1)根据Image对象默认设置的智能识别定义(默认智能识别属性是html tag),QTP首先从页面中找出所有html tag属性=IMG的对象(图1-55中可以看到html tag的属性就是IMG),前面也讲过了,在Base Filter Properties这个左侧区域中,定义的属性将进行第一轮筛选和过滤。(2)如果第一轮匹配不到,那么就会在右侧的Optioanl Filter Properties(备选属性区域)中根据定义的属性顺序地进行筛选和过滤,请看以下步骤。 QTP会首先检查对象智能识别备选属性的alt属性(默认在备选属性里alt在第一位,但是发现没有等于“51Testing软件测试网”的,因为已经被开发人员改为“51Testing软件测试网-全新网站”了。因此,QTP会忽略这个属性,继续应用下一个备选属性。 QTP接着检查对象的image type属性(默认在备选属性里第二位),把image type属性不等于“Image Link”这个值的对象过滤出去(图1-59中可以看到image type的值)。 然后QTP检查对象的html id属性(默认在备选属性里第三位),发现所有其他的对象的这个属性的值都是“logo”(见图1-60中对应位置)。图1-60 紧接着QTP检查对象的name属性(默认在备选属性里第四位),发现有两个对象“51Testing软件测试网-老网站”和“51Testing软件测试网-全新网站”的name属性都等于“Image”(见图1-60中对应位置),因此QTP把其他的对象又一次过滤掉,只剩下这两个对象。 于是QTP再检查剩下两个对象的file name属性,发现只有一个是等于“logo.gif”(见图1-60中对应位置),至此,QTP结束智能识别过程,推断出这个对象是它要找的“51Testing软件测试网”对象,并且点击它。当然了,如果在上一步仍然不能定位到对象,则还会依此类推继续下去。图1-60是一个为已经添加至对象库的对象添加必要的识别属性的窗口。需要注意的是,在这个窗口里属性的位置显示是没有次序可言的,或者和Object Identification里智能识别属性设置窗口中是不一一对应的,关于如何打开这个窗口和其他对象库功能的操作见下一个小章节。1.5.3.2以一个实例囊括对象库的原理机制与操作流程并揭开整个篇章已经初步了解了测试对象模型、掌握了Object Identification、QTP智能识别技术,以及对象库的一些原理和机制,内容太多可能有的读者一下子难以消化,在这里再提示一下,演示一个简单的对象库编程的操作流程的实例来启发读者,也为以后更深入地学习打基础。请先看演示需求如表1-3所示。表1-3 演示需求表添加对象之前,如图1-61所示。图1-61添加完对象后,如图1-62所示。图1-62脚本显示代码如下:Browser(百度一下,你就知道).Page(百度一下,你就知道)._WebEdit(wd).SetQTP自动化测试技术领航结果:脚本运行回放完毕后,百度搜索框自动输入了“QTP自动化测试技术领航”,如图1-63所示。图1-63这样一个非常简单的实例演示结束了,接着继续更深入地探索QTP的精华对象库以及对象库编程。1.5.4对象库基本操作在上一节中,对对象和对象库有了整体的认知,包括对象库编程在QTP中的价值、对象模型的含义、对象库的一些作用等。在上一节中有很多关于对象库的图例,这些都是作者事先设计好的,但是有些新人读者并不知道这些图例的效果是怎么设计出来的,因为本书还没介绍过对象库功能的操作,那么在本小节中,开始讲一下对象库功能的基本应用与操作,特别要申明下,本小节介绍的对象库指的是QTP对象库的功能意义上的操作,只是一些很单纯的操作方面的东西,就像如何将对象添加到对象库等,而不再像上一节那样指的是“对象库整体”。首先,我们得知道对象库如何打开,默认有两种方式。 QTP上方菜单栏ResourcesObject Repository。 快捷键Ctrl+R(推荐)。上述步骤操作后,打开的界面如图1-64所示。图1-64作者已经在图1-64中以数字标识了对象库功能中必须要掌握的操作,接下来将根据数字的顺序逐个介绍这些知识点(部分知识点配合实例)。1TestObjects我们先来了解对象存放的区域,从QTP 10.0版本开始,对象存放区域被分为两块,HP的意图是将测试对象和检查点对象、输出对象区分开来。Test Objects顾名思义是存放着测试对象(图例效果以及关于如何添加测试对象在第6点,这里暂且略过)。2Checkpoint and Output Objects检查点对象以及输出对象。QTP在10.0以前的版本是没有此区域的,但是感觉这块区域单独划分出来实用性不大,而且经过很多实践证明,Checkpoint and Output Objects在做实际项目时很少会被用到,作者仍然罗列出来的目的是把一些“现状”告知读者,最终是否使用由读者决定。3对象库中的Action切换首先要注意,这里的Action切换只是对象库中的切换,别和对象库外面的Action切换搞混了。在这里,可以通过它查看不同Action下的对象,很好的一个功能,可以非常直观地为对象归类,用户在使用时也可以快速查阅不同Action下所属的对象。同时,当需要添加对象时要注意切换到不同的Action再添加对象,比如当前脚本下有Action1和Action2,如果我们需要在Action2中添加其专属的对象,那就需要把Action切换到Action2后才能添加对象,只有这样对象才会被添加到Action2中。如果仅仅只是建立了Action2,但是添加对象的时候没有切换到Action2(即仍然停留在Action1),此时添加的对象自然是在为Action1添加,很容易忽略这个小细节,请务必注意。此外还要注意一点,假设脚本调用了外部Action,那么对象库中Action一样可以切换到那个外部的Action,但是只有查看对象的权限,而没有添加、删除、更新、编辑、亮灯等权限(灰显),大家可以看一下效果如图1-65所示。图1-654对象的剪切、复制、粘贴与删除这些功能是软件必备的功能。这里作者拿剪切和删除为例告知读者一些该注意的地方(剪切和复制大同小异,无须重复举例)。先看一下图1-66所示。图1-66如图1-66所示,现在如果需要将51Testing的搜索框对象剪切到百度的Page页面下,非常简单,只需要点击对象,然后使用图标或者快捷键Ctrl+X,再选中百度的Page进行粘贴即可(这个效果就不附带例图了,大家都能明白)。这里作者要提及的是如果剪切(或复制)的是父对象,那么粘贴后,其子对象会被一起剪切(或复制)过去,比如现在把百度的Page对象剪切到51Testing的Browser对象下,效果就会如图1-67所示一样,“百度一下,你就知道”这个Page对象以及其下的“wd”子对象被一起带到51Testing的Browser对象下,并且与51Testing下的Page对象平行。图1-67删除操作也一样,如果删除父对象,则所有子对象一并被删除,现在删除51Testing的Browser对象试一试,删除后效果如图1-68所示。图1-68如图1-68所示,51Testing的Browser对象一旦被删除,其所有内容一并被删除。5对象库中对象的查找与替换QTP的对象库为用户提供了非常快速且方便的GPRS导航系统,它就是Find & Replace功能,快捷键Crtl+F。认识一下这个功能的界面,如图1-69所示。图1-69打开这个功能后就会出现图1-69中的界面效果,上半部分是查找功能,下半部分是属性替换功能,在这里就可以将对象的属性值直接替换掉。6添加对象这个功能是罗列的11条里最重要的,没有添加对象也就没有后续功能了。这里需要给读者解释一下,作者本该把最重要的放第1条,但是为了文章的连贯性(如对象库中图标的排列顺序那样,这个按钮也没有排在第1个),所有内容顺序也尽可能与其图标位置相呼应。下面开始添加一个对象。步骤如下。第一步,点击Add Object to Local按钮,在点击后会出现一个白色手指。第二步,拖动白色手指至待添加的对象上,点击鼠标左键。在这里仍然以百度搜索框为例,来看一下点击后的效果图如图1-70所示。图1-70在图1-70中可以看到,在选中并点击对象后,还不算是添加对象完毕,QTP此时还会弹出一个对象选择框,用来做最后的选择。即从图1-70中可以看到,虽然只选中了百度搜索框,但同时这个名为“wd”的百度搜索框的两个父对象也会一起显示,如果此时假设选中Page对象,则最后添加进去的对象是这个Page,外加它的父对象Browser。所以,到了这一步只能说快接近完成一个对象添加过程,但是没有真正的结束。最后补充一个概念:当子对象被添加时,其父对象会一起被添加至对象库,而当父对象被添加时,如还有祖父对象,则父对象连同祖父对象一起被添加至对象库,但其子对象不会被添加,新手务必牢记。第三步,最终确认要添加的对象,确认无误后点击OK按钮。总结:在完成了以上3个步骤后,对象就添加到对象库了。实际效果如图1-71所示。图1-71另外,打个比方,现在需要添加百度首页上的另一个Link对象“贴吧”,它们属于同一个页面的,在添加完后,这个对象就会直接隶属于它的父对象下,如图1-72所示。图1-72小提示:当添加对象时,一旦白色手指出现以后就无法再继续页面上的任何操作了,如点击、切换网页、拖动滚轴等,因为只要有任何“左击”的动作,它就会帮你添加对象。假设如果在一个页面上添加对象后,需要切换到另一个Web页面添加另一个对象怎么办?一般的办法就是添加好一个对象后,暂时先不激活白色手指,等网页切换了以后再回到QTP界面切换手指,但这样会繁琐。添加一个、两个对象还好,如果要添加很多对象呢?会一直在页面和QTP界面中来回切换。Mercury公司当然预料到了这个情况,他们提供了一个捕捉模式切换功能。在这里作者先不讲这个功能,也只是做个预告。作者会在介绍到本章节的Object Spy这个重要的知识点时,分享这个实用又贴心的功能,添加对象和Object Spy是共享这一功能的,因为它们都需要捕捉,所以都具备捕捉模式。这个功能点已经讲完了,但是读者还记得在1.3.1节中请拒绝“录制”,再开始你的实际项目之旅中的1.3.1.2节一些“理论性的社会实际问题”实例吗,作者在末尾段说过要做一个实验来证明以手工添加对象的方式效率远远胜于录制添加的方式。如果已经记不清了,请看下面这段加了引号的原文:“另外,在添加对象方面上,录制也显得差强人意,因为靠录制的方式添加对象,表面上来看十分快速,但是通过这种方式添加到对象库中的对象,它们的命名都是QTP自动命名的,相当的乱,还是需要一个个去改,而且很多对象还是不需要的,QTP也给自动添加进来了,这样弄下来,效率远不如一开始就老老实实一个个添加对象,并根据规范为它们逐一命名再进行编程呢。”现在应该回忆起来了吧,作者将借用51Testing论坛的注册页面来做个小小的实验。先来看一下真实环境的界面,首先是进入51Testing软件测试网的首页,并在页面的上方找到“注册”按钮,点击进去,如图1-73所示。图1-73在进入了图1-73中的注册页面后,实验就要开始了,我们的业务流程是完成一次注册,所需要使用到的控件作者也已经排列出来了。对于添加对象的方法“是否效率”,暂且先不做对比。在此就先用录制的方式添加这些对象(所谓录制添加的方式就是指在录制这些业务操作的同时,对象会以QTP默认的设定自动添加到对象库),在完成了操作以后,看以下3张相当直观的例图,界面操作图(1-74)、脚本代码图(1-75)、对象库图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 24538-2025坠落防护缓冲器
- GB/T 20863.2-2025起重机分级第2部分:流动式起重机
- GB/T 34197-2025电铲用钢丝绳
- GB/T 44651.2-2025知识管理实施指南第2部分:制药
- 【正版授权】 ISO/TS 5617:2025 EN Tea - Classification by chemical composition
- 兴趣爱好的课件
- 化尘残影课件
- 夏季餐厅营销活动方案(3篇)
- 初中生安全逃生技能培训课件
- 化学用品安全培训课件
- 2025文具用品采购合同范本格式
- 树木学试题及答案北林
- 电气检修生产安全培训课件
- 《2025新版检验检测机构管理评审报告》
- 2025劳动教育考试试题及答案
- 江苏省南通市如皋市2025-2026学年高三上学期开学考试数学试卷
- 宠物急救标准化流程
- 焊工考试理论考试题库及答案
- 云原生压测技术-洞察及研究
- 关联交易贷款管理办法
- 2025年中国AMOLED半导体显示面板行业发展前景预测及投资战略研究报告
评论
0/150
提交评论