版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、WatiN 自动化测试实践本书前面章节介绍了 watir 的使用,而在本章我们将介绍一款受到 watir 项目的启发, 从而在 .NET 平台上开发的 Web 开源测试工具下项目 -WatiN. 如果你已经阅读过本书中前面 有关于 Watir 的章节,那么将会对更好的理解本章的内容有所帮助。如未阅读也没关系,本 章的内容是个从零开始的过程,并不依赖其他章节。本章将首先就 WatiN 的概况,如何安装以及基础知识进行讲解,然后对 WatiN 中的一 些高级应用进行知识面的扩展,再之后介绍如何使WatiN 与 .NET 平台的单元测试工具结合来更好的管理和运行测试, 最后通过一个具体的实例来把之前
2、介绍的内容串联起来, 来到达 在实际工作中熟练运用 WatiN 进行自动化测试项目的实施的目的。WatiN 简介在学习 WatiN 的使用之前, 我们先对 WatiN 的情况做一些简单的介绍, 通过简介你会知 道 WatiN 可以做什么以及它的优势在哪里。3.1.1 WatiN 介绍WatiN 的全称为“ Web Application Testing In .Net ” ,是由 Jeroen van Menen 在 2005 创建 并开发的一个开源项目。 之初, 他开发的目的是为了替代当时在公司使用的商业工具,之后在应用中取得了巨大的成功,并且当时缺少一款免费且好用的基于.net的web测试
3、工具,所以最后他决定把这个项目开源。 WatiN 项目创建之后得到了广泛的使用,目前已有超过 12 万次的下载量。由于 watin是基于.net开发的,所以如果公司开发项目的环境是.net的话,选择 watin 作为测试工具可以更好的与现有项目集成,缩短学习周期,是个不错的选择。下面 简单罗列了 Watin 的一些主要功能, 已给读者更好确实定 watin 是否适合本公司的情况作出支持 AJAX 站点测试 支持 web 页面截图支持 frames 和 iframes可以处理 alert,confirm 之类的弹出提示框 支持 HTML 对话框 可以很容易与现有的单元测试工具集成 支持 IE6,
4、7,8,9 以及 Firefox 2,3 浏览器 代码开源,可以二次开发适合自己的功能3.1.2 WatiN 与其它自动化测试工具的比较WatiN自动化测试环境搭建WatiN进行自动化测古语有云:工欲善其事,必先利其器。为了更为简易,便捷的使用 试,搭建一个合理的测试环境可以使我们事半功倍。WatiN的安装配置WatiN 目前最新的版本是196,可以从地址:/projects/watin/files/WatiN%202.x/2.1/下载最新版本的安装包。对于使用一个工具,首先了解它的目录结构是非 常重要的,尤其是对于开源的工具,里面会包含大量的的有关工具使用的知识以及相关的说 明文件。那么我们
5、把下载的源文件解压缩后,目录如图3-1所示:图3-1 WatiN源文件的目录结构源文件目录说明:Bin :包含.Net 2.0,3.5,4.0几个版本的编译过的WatiN程序集,其中最重要就是 WatiN.Core.dll这个文件,这个就是 WatiN的核心文件,在创建自动化测试项目后,都要在项目中引用该 文件。Examples:包含几个介绍 WatiN使用的几个例如。这几个例如分别说明了WatiN的几个高级应用或扩展,相关的知识会在后面的章节中一一进行讲解。Mozilla :包含WatiN在使用Firefox进行测试执行时需要的几个不同版本的jssh插件。Source :包含 WatiN的源
6、代码。WatiN.chm: WatiN的帮助文档,可以帮助我们更好的了解WatiN的组成和使用。在编写测试代码的过程中,它是一个非常好的工具文档。在我们了解了 WatiN源文件的文件组成后,应该有点迫不及待的想体验一下WatiN 了。不过在此之前,我们还需要把WatiN的相关测试环境搭建起来。我们需要首先安装 Vistual Studio 2008或以上版本,需要说明的是,本章的所有代码或截 图都基于Vistual Studio 2008,所以为了学习的方便,也建议大家安装这个版本,具体的安 装过程这里就不再赘述。Vistual Studio安装之后,为了使用WatiN,我们只需要在创建的项目
7、中引用 WatiN.Core.dll这个文件即可,创建的项目可以是控制台程序,桌面程序或者测试 项目。本章中的代码例如大都是在控制台程序中编写的,所以就以控制台程序为例来说明引用WatiN的具体过程:创建控制台程序,名称命名为打开Vistual Studio 2008,新建项目,在项目模版中选择“控制台应用程序”“WatiNTest ”,点击确定。图3-2在Visual Studio 2008中创建控制台应用程序添加WatiN引用WatiNTest项目创建完毕后,在“解决方案资源管理器”面板中,右键点击“引用”文 件夹,然后点击“添加引用”,出现“添加引用”的对话框。图3-3添加 WatiN的
8、引用在“浏览”中,找到 WatiN源文件中/bin/net3.5冃录,选择“ WatiN.Core.dll ”文件,点using: using:System:SyrstML击确定。成功添加 WatiN.Core.dll文件的引用后,我们还需要在代码中引用相关的命名空间。Collections, Generi c; Test:,sing TflfatiU. Cor;图3-4引用 WatiN.Core命名空间到这里,我们就完成了WatiN测试环境的搭建。WatiN开发环境及辅助工具3.2.1小节介绍了如何安装配置WatiN,大家对构建一个 WatiN的测试环境也有了初步的认识。本节会更为细致的介绍
9、在开展WatiN自动化测试过程中可能会用到的一些其它工具。这些工具的使用可以在日常工作中给我们带来很大的便捷,下面我们根据自动化测试实施的阶段的划分来进行介绍。WatiN自动化测试设计阶段IE开发人职工具一款IE自带的web开发者工具,IE8后已经和浏览器集成在一起了,直接“F12”就可以打开该工具。该工具的其它功能不提,我们主要用到它的查找元素功能,用来查看元素的属性及属性值。查看元素属性,只需要点击“单击选择元素”按钮,然后把鼠标的光标移动 到需要查看的元素上单击即可在工具界面中定位出元素的HTML代码。图3-5 IE开发者工具的界面FirebugFirefox浏览器中著名的插件应用, 同
10、样是一款功能强大的 Web开发者工具。它集HTML 查看和编辑、Javascript控制台、网络状况监视器于一体,是开发JavaScript、CSS、HTML和Ajax的得力助手。同样,我们也只常用到它的查找元素功能,用法与 IE开发人职工具类 似。UIM ?S rdlv Qg Lcll-rbbV皿吐1iartat lb- liII X.-F laL 4111 2 Lri-3 Hi hi ji iKrrvi片當口 ITU Pi8BI止呻植起M DTiir1VKV. Huif|.J.y. ciw.iUAi fl【 H 打)SUOADDI;J|,1齢 m VW EQiVEt 0* ht ft! (
11、M 8 I?)fa IM ITpi IFI-Ii-L *!-Tt,;Lsi m BEjuiEJ cm 业翌(* u J?)iT*rrr 0 wrfli:fa*t laft.Ei.Tf n-ha-i -Icsri U图3-6 Firebug工具的界面WatiN Test Recorder一款在SourceForge上开源的WatiN脚本录制工具,使用该工具可以实现类似于商业化自动 化测试工具的录制脚本功能,可以在内嵌的浏览器中进行脚本录制操作,录制完毕后可以输出C#的测试脚本。最近该工具发布了最新的3.0版本,并改名为 Test Recorder现在并不仅仅可以输出 WatiN的测试脚本,还可以
12、输出Watir,Selenium等自动化测试工具的测试脚本。该项目链接:/WatiN自动化测试执行阶段Nun it单元测试框架Nunit是.NET平台上应用非常广泛的单元测试工具,Gallio单元测试框架WatiN自动化测试基础WatiN来进行自动化测试,首搭建好 WatiN的开发环境后,我们正式开始介绍如何使用 先我们来介绍WatiN的基本语法以及API的使用。WatiN基本语法前面提到过,WatiN是在.NET平台上使用C#开发,那么但凡.NET平台之上的编程语言 都可以用来开发 WatiN的自动化测试脚本,而在本章节中我们使用应用比较广泛的C#语言,所以在本章中的所有例如代码,都是使用C
13、#编写的。由于篇幅所限,本文不会再就C#的基本语法和使用做进一步细致的说明,所以我们假定本书的读者都具备了一定的C#语言基础。就如学习任何一门新的编程语言,我们总是从输出“Hello World! ”这句话开始一样。在学习一款自动化测试工具,我们往往都是从Google的搜索开始。在本章中,我们也不准备打破这一惯例,依然从测试 Google的搜索开始。先看看下面这段代码using WatiN.Core;namespace GoogleTestSampleclass Program STAThreadstatic void Main( string args)IE ie = new IE(); /
14、 打开空白的IE浏览器ie.GoTo(:/google .hk); / 导航到 Google 网站ie.TextField(Find .ByName(q ).TypeText( WatiN ); / 输入搜索条件ie.Button(Find .ByName(btnK ).Click(); / 点击搜索按钮这个简单例子演示了在控制台程序中编写WatiN测试脚本,值得注意的是在程序入口的Main方法前,我们加入STAThread这个属性标识。这是因为IE浏览器是非线程安全的, 我们必须在单线程单元STA模式下调用IE的COM才不会出错。所以在控制台或者 GUI程序中编写 WatiN测试代码,要在程
15、序的入口处加上STAThread.这段代码首先是初始化一个对象ie,这个对象就代表着打开的 IE浏览器。然后我们调用对象的GoTo()方法导航到Google的网站。然后在 Google网站的搜索框中输入WatiN ”,最 后点击搜索按钮进行搜索。对于代码中IE, TextField, Butt on等对象以及它们的方法不太明白不要紧,后面我们会对它们代表的含义以及使用方法做进一步的说明,目前只要求大家对WatiN的测试代码有个初步的印象。WatiN API 基本使用WatiN对象识别方法WatiN的核心在于对 web页面元素的定位以及处理,这也就是我们所说的对象识别。这 个过程就是先定位到我们
16、需要测试的页面元素,然后通过调用与此元素对应的WatiN类的方法来操纵页面元素。本章就来讲解如何定位页面中的元素,以及元素对象可使用的方法。WatiN的页面元素映射表WatiN是通过HTML Dom 来定位和处理页面中的元素的,所以针对Dom中不同的对象,WatiN也封装了对应的对象来操纵页面中的元素。下面列表列出了web页面中Html元素与对应的 WatiN类的映射关系。Html兀素WatiN 类例如Li nkvar link = browser.L in k(l in kid);Areavar area =browser.Area(Fi nd.ByAlt(alttext);Buttonva
17、r butt on = browser.Butt on( butt onl d);Divvar div = browser.Div(divld);vform /Formvar form = browser.Form(formld);vframe /Framevar frame = browser.Frame(frameld);viframe /vframeset /FrameCollecti onvar frames = browser.Frames;Imagevar image = browser.lmage(imageld);browser.CheckBox(checkboxld);Fil
18、eUploadvar upload = browser.FileUpload(fileuploadld);TextFieldvar textfield = browser.TextField(ld);RadioButt onRadioButto nCollectio nLabelLabelCollect ionOptio nOptio nCollectio nParaParaCollect ionSelectSelectCollectio nSpa nSpan Collect ionTableTableCollectio nTableBodyTableBodyCollecti onTableC
19、ellTableCellCollectio nTableRowTableRows342定位页面的元素从上一小节的映射表中,我们了解了页面元素与WatiN类的映射关系,但页面中这么多同类型的元素,我们怎么能确定实例化的WatiN的类就是我们需要的那个元素对象呢?回想一下映射表中的实例那一列,我们实例化一个元素类型,都会有Id这样一个参数,其实这个Id就是定位页面元素的关键。开发或界面人员在设计web页面时,一般会给页面的每个元素设置ID=value这样一个属性值,而且一般都是唯一的。而WatiN就是通过这个ID的属性值来准确定位页面中的元素的。当然,不严谨的页面设计也可能不会设置ID属性或者多个
20、元素的ID属性值是相同的,这给我准确定位元素带来了麻烦,所以WatiN中定位元素的方法并不仅限于通过Id属性,而是也可以使用其它的属性或者多个属性组合来进行元素的准确定位。WatiN把定位页面元素的方法都圭寸装在Find这个类中,看下3.3.1小节中给出的如下代码:ie.TextField( Find .ByName(q ).TypeText( WatiN);其中我们就使用Find类的ByName方法来定位Google的搜索框,同样你也可是使用 ById 的方法来定位,那么代码就可以修改为:ie.TextField( Find .ById ( lst-ib ).TypeText( WatiN)
21、;下面介绍Find类中主要的用于查找定位元素的方法ById通过页面元素的Id属性来定位元素,这个方法都多个重载的方法,主要有Byld(Stri ng)通过元素的属性值来查找页面元素。ById(Regex)通过与元素的属性值匹配的正则表达式来查找页面元素,看如下代码:Regex regex = new Regex( lst*);Byld(Comparer(String):在WatiN.Core parers 命名空间下,WatiN提供的几个比较类来简化字符串匹配,通过 这几个类匹配属性值来查找页面中的元素,看如下代码:/精确匹配Stringcomparer stringcomparer = ne
22、w StringComparer (lst-ib );ie.TextField( Find .Byld(stringComparer).TypeText( WatiN);/包含匹配WatiN.Core parers. StringContainsAndCaselnsensitiveComparerstringContain = newStringContainsAndCaselnsensitiveComparer (lst);ie.TextField( Find .Byld(stringContain).TypeText( WatiN);这几个重载方法在其它的查找元素的方法中都有,用法是一样的
23、。ByName通过页面元素的 Name属性来定位元素By通过指定元素的属性以及属性值来定位元素ie.TextField( Find .By( title , Google 搜索).TypeText( WatiN);Byl ndex通过元素的index来定位string str = iemage(Find .ByIndex(0).Src;上面代码就是查找页面中第一个image元素,并返回src属性。Byindex方法的参数是元素的index,是从零开始。ByTitle通过页面元素的Title属性来定位元素ByText通过页面元素的Text值来定位元素BySrc通过页面元素的Src属性来定位元素F
24、ind类中其它的定位元素的方法还有很多,用法和 Byld,ByName等方法是类似的,这 里就不一一赘述。如果想详细了解,可以查看 WatiN的帮助文档。值得注意的是,平常使用元素定位方法的一般性原则是如果能使用ID,Name进行定位的,尽量使用这两个属性,因为这两个属性的值一般不会改动,可以减少代码的维护成本。另外如果使用单个元素的属性无法准确定位页面元素,在WatiN中还可以通过多个属性以及属性值来定位页面元素,看代码:ie.TextField( Find .Byld( lst-ib ) & Find .ByName(q ).TypeText( WatiN);在这段代码中,同时使用了Byl
25、d和ByName方法来定位页面元素,这对于页面中多个元素的属性值相同的情况是很有帮助的。前面讨论了 WatiN中常用的识别页面元素的方法,但除了前面的方法外,WatiN还提供了一些不太常用的方法,在最后,介绍一下这些方法ElementWithTag 方法这个方法通过指定元素的Tag名称以及一种Find类中的元素定位方法。主要用于在前面元素映射表中未列出的元素,比方,等等。比方查找页面的标题,并返回值,代码如下:string title = ie.ElementWithTag( title , Find .Bylndex(O).Text;Filter方法前面映射表中列出WatiN中各元素的映射对
26、象,其实在 WatiN中每个元素对象还有相应的对象集合对象,比方 Link对象还有对应的Links对象,这个对象包含了页面中所有的Link对象,这样可以方便统计和处理页面中某一类元素。但如果想统计和处理这类元素中的某些元素,那么就可以使用Filter方法ie.Links.Filter( Find .Byld( gb_2)上面的代码是查找页面中所有Id= gb_2的元素,可以通过指定元素的index来使用某个元素,代码如下:ie.Links.Filter( Find .ById( gb_2 )O.CIick();通过父节点查找子节点前面讨论了如何通过元素的属性以及属性值来定位页面元素,但有些时候
27、页面中某些元素是没有任何属性的,那么我们如何去定位它们呢?依然以Google网站为例,网站中图片搜索的链接页面源代码如下: 图片 如果我们想定位到 图片,可以使Find类的ByText方法,但如果页 面中有个同样元素,就无法准确的识别元素了。 这时我们可以先定位元素的父节点 元素,然后再通过在父节点中查找子节点来定位这个元素,代码如下:上面代码是使用 Children()方法检索所有子节点,然后通过指定子元素的index来定位元素,还可以通过Find类中的方法来定位元素,代码如下:ie.Link( Find .ById( gb_2 ).Child( Find .Bylndex(1).CIick
28、();上面代码使用了Child这个方法,这个方法是在所有的子节点中查找需要的节点。还可以在某类元素的子节点中查找元素,代码如下:ie.Link( Find .ById( gb_2 ).Span( Find .Bylndex(1).CIick(); ChildrenWithTag()WatiN高级自动化测试技术3.5.1处理页面中的表格在进行Web程序测试过程中,我们经常会与表格打交道,尤其是在有数据查询的地方, 数据查询结果大都是以表格形式进行展现的,而我们为了验证查询结果的正确性,就需要对页面中的表格以及表格中的数据进行识别及处理。在3.4.1章节的WatiN对象映射表中,我们可以找到几个与
29、Table处理有关的类,它们分别对应着表格的不同部分,如下所示Table:表示整个表格TableBody:表格主要分为三个部分,分别为表头,主体以及脚注,而TableBody就表示表格的主体部分。TableRow:表示表格的行TableCell:表示表格的单元格下面我们通过一个实例来详细讲解如何使用这些类以及类中的方法来读取或验证表格中的数据。假设我们有一个需要查询用户地址的数据查询,查询结果在页面中以表格展现,结果如下IDCityAddress1北京北京市*胡同*号2上海上海市*街道*号上面表格在网页中的 HTML代码如下IDCityAddress1 北京 北京市 * 胡同 * 号 2 上海
30、 上海市 * 街道 * 号 处理表格的表头值得注意的是,表格的html代码中有th标签,这表示为表格的表头,但是在 WatiN中却没有提供对应的类来映射这部分。所以对于Table表头的处理,我们就需要做些特殊的处理,请看如下代码Elementcollection tableHeader =ie.Table( Find .Byld( GridView1 ).TableRowsO.ChildrenWithTag( th);string columnname1 = tableHeaderO.Text;string columnname2 = tableHeader1.Text;string colu
31、mnname3 = tableHeader2.Text;Console .WriteLine(表格的列名分别为:0 1 2 , columnname1, columnname2, columnname3);Console .ReadKey();运行结果如图上面的代码中,我们先是通过 Find.ById方法定位到表格,返回Table对象。然后使用Table 对象的TableRows属性返回TableRowCollection对象,这个对象表示 TableRow集合,在这 里就是表示表格中所有的行。从表格的html代码中可以看出,Table的列名在表格的第一行中,所以我们可以通过 TableRow
32、s0定位到第一行,但在第一行的tr标签中的th表头标签由于在WatiN中没有对应的对象映射,所以我们使用3.4.3中提到的ChildrenWithTag方法 来返回所有的th标签的元素集合,这样最后只要在th元素集合中使用索引器进行读取元 素就可以了。统计查询结果数据的数量如果我们需要统计查询结果的表格中数据的数量,可以使用Table对象的TableRows属性,返回表格中所有的行,然后调用Count属性就可以统计出表格的行数了。 值得注意的是,统 计出的行数中包括了表头,所以我们去掉一行后才是真正的查询结果数据的条数。int rowNumber = ie.Table( Find .ById(
33、 GridView1 ).TableRows.Count - 1;Console .WriteLine(表格中的数据数量为:0 , rowNumber);运行结果如图辰格中的数据数量为唸验证查询结果数据的正确性通常情况下,我们都需要验证查询结果数据的正确性,这就需要我们把单元格中的数据读取出来,与预期结果进行比对。前面已经说过,单元格的映射对象为TableCell,而在表格的行对象TableRow中有个TableCells属性,可以返回行中所有TableCell。这样,我们就可以通过先定位行,然后再在行中定位单元格的方式就可以返回单元格中的数据。stringdatal=ie.Table(Fin
34、d.Byld(stringdata2=ie.Table(Find.ById(stringdata3=ie.Table(Find.ById(GridView1 ).TableRows1.TableCells0.Text;GridView1 ).TableRows1.TableCells1.Text;GridView1 ).TableRows1.TableCells2.Text;Console .WriteLine(表格中第一行中的数据为 :0 1 2, data1,data2,data3);Console .ReadKey();运行结果如图请注意,前面讲到的统计查询结果数据的数量,应该尽量防止出
35、现列表分页的情况,因为 上面讲到的方法并不能统计分页情况下的数据数量。而验证查询结果的正确性,则需要在实施自动化测试前准备测试数据,这样才能防止其它数据对于自动化测试实施的干扰。操作frame/Iframe框架中的元素在一些网站中,我们可能已经看到过 frame或iframe,但你可能并没意识到它们就是frame或iframe。什么是frame和iframe呢?简单的说,frame是框架,iframe是内联框架,在这 里不会详细说明它们的区别以及详细用法,我们只需知道在frame和iframe中可以内嵌显示文件或其它网页就行了。如图,我们创建了一个静态页面,里面使用了iframe显示了百度搜索
36、的网页。下习內祗了一个乏詢e.且示白度搜末Bai&百度帝底网历帖E知這胡円陲户验竝他国当你看到这个页面时,你也许会按照前面讲过的有关 码WatiN的知识去编写相应的测试代IE ie =ie.GoTo(new IE();:/localhost/Test/lfameAndFrame.html);ie.TextField(ie.Button(Find .Byld( kw ).TypeText( WatiN);Find .ById( su ).CIick();我们运行测试代码后,去咄现了如下图的错误,A ElementHatFoundEKceptian unharidledx匚mild nQt Fri
37、d INPUT (hidden)r INPUTar INPUT (Uxt) ar IbFUT (textsre)or TEXTAREA elernent tag matching criteria: ftttribdte id equals W at http :/locafiost/T esUffamaAndRam&.html测试代码按照逻辑是没有错误的,可是为什么会执行失败呢?你通过查看该网页的源代码 也许就能得出答案了。下面内嵌了一个Iframe,显示百度搜索我们看到了有个元素标签,它内嵌了百度搜索的网页,却不会显示任何有关百度搜索网页的细节,那么上面的测试代码直接在这个网页中去定位百度
38、搜索网页中的元素,肯定是会出现错误的。对于此种情况,WatiN中提供了 Frame类,用于处理frame和iframe元素。相应的代码可以修改成IE ie = new IE();ie.GoTo( :/localhost/Test/IfameAndFrame.html);Frame baiduFrame = ie.Frame( Find .ById( baidu);baiduFrame.TextField(Find .ById( kw ).TypeText( WatiN);baiduFrame.Button( Find .ById( su ).Click();前面仅举了处理ifame的例子,对于
39、frame做同样的处理就可以了。处理弹出对话框在网页中操作过程中,我们经常会遇到弹出提示框,本节将对在WatiN中如何处理常见的几种弹出框进行介绍。常见的弹出对话框主要有JS弹出对话框,上传下载对话框,安全对话框等等,而我们最常见的弹出对话框就是JS弹出对话框。JS弹出对话框又主要分为以下三种alert():弹出消息框con firm():弹出含有确定,取消的消息框prompt():弹出含有输入框的消息框下面我们分别就这三种弹出对话框进行详细介绍,首先来创建一个静态网页,用来演示这 三种类型的弹出框,其中在页面中,有三个按钮,点击按钮会弹出相应类型的弹出框。function show_aler
40、t()alert(我是一个消息框!)function show_confirm()var r=confirm(点击按钮!);if (r=true)alert(你点击了确定按钮!);elsealert(你点击了取消按钮!); function show_prompt()var name=prompt(请输入你的名字,) if (name!=null & name!=)alert( 你好+ name + !) 弹出alert消息框/弹出confirm 消息框/弹出prompt消息框/input id=alert type=button onclick=show_alert() value=inpu
41、t id=confirm type=button onclick=show_confirm() value=input id=prompt type=button onclick=show_prompt() value= WatiN中用于处理弹出框的几个类都是位于WatiN.Core.DialogHandlers命名空间下,所以在编写测试代码之前,要在代码文件的头部加入对该命名空间的引用using WatiN.Core.DialogHandlers;WatiN 中用于处理 js 弹出框的类主要有 AlertDialogHandler , ConfirmDialogHandler ,Prompt
42、DialogHandler这个几个,它们使用方法都是类似的,思路大体如下:创建Handler对象建立浏览器与Handler对象的关联触发js,弹出对话框等待Handler对象等待对话框的出现 Handler对象调用方法操作对话框 取消Handler对象与浏览器的关联以前面我们创建的页面为例,如果我们要处理id= alert的按钮触发的alert提示框,我们就需要编写如下代码:IE ie = new IE();ie.GoTo( :/localhost/Test/PopBoxandWindow.html);AlertDialogHandler alertDialogHandler = new Al
43、ertDialogHandler (); / 仓U建一个 Handler 对象 ie.AddDialogHandler(alertDialogHandler);/Handler 对象与 ie 建立关联ie.Button( Find .ById( alert ).CIickNoWait(); 点击按钮,注意,使用的是 ClickNoWait() 方法 alertDialogHandler.WaitUntilExists();/ 等待 Alert 对话框出现alertDialogHandler.OKButton.Click();/ 点击 Alert 对话框的 0!按钮ie.WaitForCompl
44、ete();ie.RemoveDialogHandler(alertDialogHandler);/Handler 对象与 ie 取消关联Console .ReadKey();值得注意的是,点击alert按钮的时候,我们使用的是ClickNoWait方法,而不是常见的Chlick方法。ClickNoWait方法与Chlick的区别就在于,无需等待Click事件的完成就可以直 接继续进行,因为只有立即执行下一步,我们写的 WaitUntilExists方法才会起到作用,所以 它通常就用于JS触发弹出框的情况。我们处理confirm对话框的方法与alert对话框时类似的,不同点就在于使用不同的Ha
45、ndle类以及这个 Handle类不只是有 OKButton这个确定按钮,还有CancelButtonq这个取消按钮。 所以处理confirm对话框只要代码中的如下部分修改即可ConfirmDialogHandler confirmDialogHandler= new ConfirmDialogHandler (); / 仓U建一个 Handler 对象confirmDialogHandler.OKButton.Click();点击 Confirm 对话框确实定按钮confirmDialogHandler.CancelButton.Click();点击 Confirm 对话框的取消按钮而对于P
46、rompt弹出框,在处理方式上与处理 alert, confirm弹出框有些差异。 Prompt弹 出框中包含了一个输入框,一个确定按钮以及一个取消按钮。 当我们需要输入数据,并点击 确定按钮时,我们以以下的方式初始化PromptDialogHandler对象,PromptDialogHandler promptDialogHandler = new PromptDialogHandler (WatiN);构造函数中的参数“ WatiN ”就是我们在输入框中输入的值。但是当我们不用输入数据,直 接点击取消按钮时,会用到另外一个PromptDialogHandler类的构造函数PromptDia
47、logHandler promptDialogHandler = new PromptDialogHandler (true );其中构造函数中的参数true,就表示会点击取消按钮。完整的代码如下:IE ie = new IE();ie.GoTo( :/localhost/Test/PopBoxandWindow.html);/PromptDialogHandler promptDialogHandler = new PromptDialogHandler(true);PromptDialogHandler promptDialogHandler = new PromptDialogHandl
48、er (WatiN); ie.AddDialogHandler(promptDialogHandler);ie.Button( Find .Byld( prompt ).CIickNoWait();ie.WaitForComplete();ie.RemoveDialogHandler(promptDialogHandler);Console .ReadKey();前面我们分别对 Js三种弹出提示框做了比较详细的说明,其实在watin中还有另外一种处理弹出框的方法,那就是使用 UseDialogOnee对象和浏览器的 DialogWatcher对象来监控弹出 框的出现,依然以前面介绍过的alse
49、t弹出框为例IE ie = new IE();ie.GoTo( :/localhost/Test/PopBoxandWindow.html);AlertDialogHandler alert = new AlertDialogHandler (); using ( new UseDialogOnce (ie.DialogWatcher, alert)ie.Button(Find .Byld( alert ).ClickNoWait();alert.WaitUntilExists();alert.OKButton.Click();Console .ReadKey();对于这种监控弹出框出现和处理
50、的机制,两种方式都是可以的。操作 cookie对于cookies,相信大家都很熟悉,简单的来说,就是你访问的网站存放一些特定的信息 在你的机器上,下次再次访问该网站时,网站会根据这些信息做一些个性化的处理。cookies的方法,不过在介绍这些方法之前,WatiN的IE类中提供了几种用于创建和返回 要先对.NET中几个有关Cookie的类有所了解。System.Net. Cookie提供了一组用于管理 cookie的属性和方法,其中比较关键的几个属性为Name: cookie 的名称Value:cookie 的值Expires:cooike的过期日期事件Path:cookie 适用于的 uriS
51、ystem.Net. CookieCollectionSystem.Net. Cookie 对象的集合System.Net. CookieC ontainer为CookieCollection对象的集合提供容器,既可以往这个容器中添加和获取CookieCollection,也可以获取和添加Cookie。SetCookie string url,string cookiedata 操纵已打开或弹出的浏览器窗口前面所讲,如果需要测试网页,都是先打开一个窗口,然后再在其中进行自动化测试。那么对于已经打开或测试过程中弹出的窗口,那么该如何做呢?假设已经有一个打开了的谷歌网页,如果想要在这个网页上进行测
52、试的话,可以编写如下的代码:IE window = lE.AttachTov IE( Find .ByTitle( Google);上面代码中使用了Find.ByTitle方法来识别窗口,同样也可以使用Find.ByUrl, Find.ByUri,Fi nd.By(hw nd, win dowHa ndle)等方法。当如果有多个同样的窗口时,也可以通过指定窗口的index来识别IE window = lE.AttachTov IE( Find .ByTitle( Google )&Find .ByIndex(0);测试异步ajax请求Ajax,即为异步JavaScript和XML,是近年来比较
53、流行的一种创建交互式网页应用的网页开发技术.它主要的特点是使用JavaScript的XML Request对象来直接与服务器进行通信。通过这个对象,JavaScript可在不重载页面的情况与Web服务器交换数据,也就是常说的局部刷新。这会给自动化测试带来麻烦,一般的自动化测试工具都是在页面加载完成后,然后去页面中定位识别其中的元素,但运用Ajax实现局部刷新后,工具往往无法准确的识别局部交互的页面是否加载完成,从而出现定位识别元素失败的问题。使用Firefox浏览器进行测试WatiN 2.0发布开始,就加入了支持 Firefox浏览器的功能。该功能是基于Firefox的一个插件Jssh开发的,
54、所以在使用 Watin进行测试之前,需要安装相应的jssh插件。在3.2.1小节中已经列出了 WatiN安装文件中jssh插件所在的位置,打开测试机器中安装的firefox,直接把相应版本的jssh拖入打开的firefox窗口进行安装即可,firefox与jssh版本对应关系 如下:FireFox vers ionxpi file3.6jssh-3.6-WINNT.xpi3.5jssh-WINNT-3.5.xpi3.xjssh-WINNT-3.x.xpi2.xjssh-WINNT-2.x.xpi安装成功的界面值得注意的是,由于firefox 4.0不再支持jssh插件,所以在firefox 4
55、.0中运行 WatiN的测试脚本是会出错的。Jssh安装成功后,就可以编写相应的测试代码使用firefox进行测试了。编写 Firefox的测试代码与编写IE的测试代码在语法上没有什么不同。这是因为Firefox类与IE类都是派生于Browser类,它们都实现了同样的方法。依然以谷歌搜索为例,使用Firefox进行测试的代码如下:FrieFox firefox = new FrieFox ();/打开空白的 IE浏览器firefox.GoTo( :/google .hk); / 导航到 Google网站firefox.TextField( Find .ByName(q ).TypeText(
56、WatiN ); /输入搜索条件firefox.Button( Find .ByName(btnK ).CIick(); /点击搜索按钮比照之前IE的相关代码,其实在用法上却是没有区别。这时,也许会有人问“既然两者 的用法相同,那么在做浏览器兼容性测试的时候,有必要独立写两套测试代码吗?”。答案肯定是否认的,不然开发以及维护成本也太大了。前面说过FireFox类和IE类都派生于Browser类,那么可以在这个类上做下文章,以满足使用一套测试代码可以同时在两种浏览 器中运行测试。首先,先创建一个浏览器类型的枚举类型BrowserType,用于表示浏览器的类型public enum Browser
57、Type/ III IE浏览器/ IE,/ III FireFox 浏览器/ FireFox,BrowserType然后,创建一个关于浏览器的工厂类BrowserFactory,该类可以根据不同的类型实例化不同的对象。public class BrowserFactoryBrowser browser = null ;/ / 根据不同的BrowserType实例化不同的浏览器/ / vparam name=browserType BrowserType 类型 / Browser 对象 public Browser getBrowser( BrowserType browserType)swit
58、ch (browserType)case BrowserTypeE:browser =new IE ();break;case BrowserType .FireFox:browser =new FireFox ();break;return browser;最后就可以编写相应的测试代码了,谷歌搜索的测试代码可以修改如下BrowserFactory browserFactory = new BrowserFactory ();/切换不同的浏览器运行测试,只需要输入不同的BrowserType类型Browser browser = browserFactory.getBrowser( Brows
59、erType .FireFox); browser.GoTo( :/google .hk);browser.TextField( Find .ByName(q ).TypeText( WatiN);browser.Button( Find .ByName(btnK ).CIick();WatiN 中的 Page模式当你学习了之前的章节,你一定写了不少的WatiN自动化测试代码,并很愉悦的看到它们能正常的运行。也许仅仅是对于Google搜索的测试,你都已经写了很多的测试代码,当然这些代码中很多都是可以复制和粘贴而来的。但随着测试代码越来越庞大,你会感觉维护这些代码会越来越困难。也许修改一个页面元
60、素的属性值,都要修改很多处的测试代码, 显然这给测试代码维护和管理带来了很大的困难,也不利于构建易用的测试框架。为了解决这个问题,我们必须实现测试对象与测试代码的别离,所以在 WatiN 2.0中引用了 Page模式来解决这个问题。Page模式的思路是通过编写实体类来映射被测Web程序的页面,这些实体类通过属性和方法来描述页面元素以及行为。通过编写这些实体类,我们实现了测试对象与测试代码的剥 离,一旦页面中的元素发生了变化,我们只需要更改对应的实体类就可以了,而不用像以前必须在测试代码中找到所有使用该元素的代码并修改它们。下面我们来介绍如何创建一个基于Page模式的测试。我们依然是以Googl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 最可爱的人课件大班
- 玻璃课件教学课件
- 《流程培训课件》课件
- 山东省泰安市宁阳县2024-2025学年七年级上学期期中考试英语试题
- 2022年江苏省公务员录用考试《行测》真题(B类)及答案解析
- 2022年公务员多省联考《申论》真题(辽宁A卷)及答案解析
- 语文《相信未来》课件
- 《演绎培训课程设计》课件
- 《水生生物学》课件
- 石油专用抽油泵产业规划专项研究报告
- 宁夏回族自治区银川市2025届高三上学期第三次月考数学试卷含答案
- 2024-2030年中国净菜加工行业市场营销模式及投资规模分析报告
- 中国视觉小说行业现状调查与竞争趋势分析研究报告(2024-2030版)
- 仓储物流中心物业安全管理
- 咨询师基础心理学课件
- 医疗器械注册专员培训
- 生物丨金太阳(25-69C)广东省2025届高三10月大联考生物试卷及答案
- 期中测试卷(试题)2024-2025学年人教版数学三年级上册
- 冷库保洁服务方案
- 中国戏曲 昆曲学习通超星期末考试答案章节答案2024年
- 2024-2030年中国移动云行业市场发展趋势与前景展望战略研究报告
评论
0/150
提交评论