WatiN框架学习

WatiN 是一个源于 Watir的工具,开源且用于web测试自动化的类库。Web Application Testing in .NET. WatiN 通过与浏览器的交互来实现自动化,使用起来具有轻便,简单的特点。

  WatiN.Core: WatiN的核心部分,与浏览器的交互都包含在此模块中。

  WatiN.Core.DialogHandlers: 该命名空间提供用于操作浏览器对话框的对象。

  WaitN.Core.Exceptions: 该命名空间里的对象用于处理各种异常。

WatiN的原理和其他web自动化测试工具基本类似,通过操纵浏览器和web页面中的DOM对象来实现模拟用户操作网页。WatiN封装了复杂的DOM操作并提供了大量的扩展,使对web网页的操作更灵活,更简便。

HTML元素与WatiN类的映射:

在编写测试代码之前,首先通过工具查看web页面中元素的信息,确定该元素的类型再通过映射关系确定使用WatiN中的类。

IE类:最基础,最重要的一个类,用于访问web页面中的元素以及操纵IE浏览器。

Goto(string): 导航到某个地址的网页

Close(): 关闭浏览器

ContainsText(string): 是否包含指定文本

CaptureWebPageToFile(string): 对当前web页截图并保存到指定位置

ClearCache(): 清除Cache

ClearCookie(): 清除Cookie

备注:使用IE类意味着在IE上做测试,由于WatiN最新版本也支持Firefox, 可以定义出一个Browser来从config文件中决定使用哪个浏览器:

第一步:定义IEStatic类,用于在Browser方法中定义IE浏览器时使用:

 1     public class IEStatic
 2     {
 3         private Browser browser;
 4         private int browserThreadId;
 5         private string browserHandle;
 6
 7         public Browser Browser
 8         {
 9             get
10             {
11                 var currentThreadId = GetCurrentThreadId();
12                 if (currentThreadId != browserThreadId)
13                 {
14                     browser = IE.AttachTo<IE>(Find.By("hwnd", browserHandle));
15                     browserThreadId = currentThreadId;
16                 }
17                 return browser;
18             }
19             set
20             {
21                 browser = value;
22                 browserThreadId = GetCurrentThreadId();
23                 browserHandle = browser.hWnd.ToString();
24
25             }
26         }
27
28         private int GetCurrentThreadId()
29         {
30             return Thread.CurrentThread.GetHashCode();
31         }
32     }

第二步:在WatiNTest类中定义Browser方法:

 1     public class WatiNTest
 2     {
 3         static Browser browser;
 4         static IEStatic ieInstance;
 5         public static string classPropertyName = "Classname";
 6         public static Browser Browser
 7         {
 8             get
 9             {
10                 string browserType = ConfigurationManager.AppSettings["BrowserType"].ToString().ToLower();
11                 browserType = browserType ?? "ie";
12                 switch (browserType)
13                 {
14                     case "ie":
15                         if (browser == null)
16                         {
17                             try
18                             {
19                                 browser = new IE();
20                             }
21                             catch
22                             {
23                                 CloseInternetExplorers();
24                                 browser = new IE();
25                             }
26                             ieInstance = new IEStatic();
27                             ieInstance.Browser = browser;
28                             Logger.LogAction("New IE instance created, hWnd=" + browser.hWnd.ToString());
29                         }
30                         else
31                         {
32                             browser = ieInstance.Browser;
33                         }
34                         classPropertyName = "Classname";
35                         break;
36                     case "firefox":
37                         if (browser == null) browser = new FireFox();
38                         classPropertyName = "Class";
39                         break;
40
41                 }
42                 return browser;
43             }
44         }
45
46         public static void CloseInternetExplorers()
47         {
48             var processes = from process in Process.GetProcesses()
49                             where process.ProcessName == "iexplore"
50                             select process;
51
52             foreach (var process in processes)
53             {
54                 try
55                 {
56                     process.Kill();
57                     process.WaitForExit();
58                     process.Close();
59                     process.Dispose();
60                 }
61                 catch { }
62             }
63             browser = null;
64
65         }
66     }

将 Goto(string)重写成以下方法:

1         public static void Navigate(string url)
2         {
3             browser.GoTo(url);
4         }

其他常用方法:

ClearCookie方法:

1         public static void ClearCookie()
2         {
3             using (IE ie = new IE())
4             {
5                 ie.ClearCache();
6                 ie.ClearCookies();
7             }
8         }

Close方法:

 1         public static void Close()
 2         {
 3             if (browser != null)
 4             {
 5                 browser.Close();
 6                 browser.Dispose();
 7                 if (ieInstance != null)
 8                 {
 9                     ieInstance.Dispose();
10                     ieInstance = null;
11                 }
12                 browser = null;
13             }
14         }

Find类:也是必须用到的一个类,用于查找并定位web页面中的元素

ById(), ByName(),  ByClass(), ByAlt(), ByText()….

一些例子,使用上面定义过的Browser方法来举例:

Link:

1             Link link = WatiNTest.Browser.Link(Find.ByClass("string").Or(Find.ById("string")));
2             string linkText = link.Text;
3             string url = link.Url;
4             link.Click();     

Button:

1             Button button= WatiNTest.Browser.Button(Find.ById("string"));
2             string buttonText = button.Text;
3             button.Click();

Div:

Div div = WatiNTest.Browser.Div(Find.ByClass("string"));

时间: 2024-11-01 05:21:06

WatiN框架学习的相关文章

WatiN框架学习二——对弹窗的处理

以IE为例,WatiN处理弹出窗口: 1 IE ie = new IE("string"); //打开指定web页 2 ie.Button(Find.ById("string")).Click(); //点击相应的按钮弹出需要测试的窗口TestSecondWindow 3 IE newIE = IE.AttachTo<IE>(Find.ByTitle("TestSecondWindow")); // 查找新窗口TestSecondWi

windows下scrapy框架学习笔记—&#39;scrapy&#39; 不是内部或外部命令

最近几天在深入的学习scrapy框架,但是装完各种需要的基础包之后却发现scrapy命令在别的路径下都用不了,我一开始是把python安装在F:\Python路径下的,安装了scrapy后它默认都会安装在这个路径下,scrapy在路径F:\Python\Scripts路径下,我的scrapy命令只能在此路径下用,因此创建什么工程也都只能在此文件下. 想了一下它的工作原理:它在F:\Python\Scripts路径下,就会在Scripts文件下存在一个scrapy批处理文件,那么在DOS下想要命令

Swagger框架学习分享

Swagger框架学习分享 转至元数据结尾 Created and last modified by 刘新宇 大约1分钟以前 转至元数据起始 一.背景介绍 1.1.项目简介 1.2.code repository 1.3.演示项目 二.开发准备 2.1.环境准备 2.2.项目搭建 2.2.1.jar仓库 2.2.2.相关依赖 2.2.3.编写配置文件 2.2.4.与swagger-ui集成 2.6.5.Controller配置 2.2.6.启动中间件 2.2.7.需求定制 三.学习感想 一.背景

某智能家居项目框架学习总结

这个月来第一篇博客,各种其他事情.. 之前负责过一个智能家居项目的二次开发,苏州一家公司做的,项目还是分了好几个系统,对业务流程的不同部分进行了划分,我是此项目的主要负责人,通过老师的指导,对这个项目也有了一些了解.此项目运用了一些框架,有些也是我第一次接触到的,下面将对项目用到的一些框架进行总结. 下面可能会出现几个有关智能家居的名词,介绍一下 1.机顶盒:每一个家庭都应该至少有一个机顶盒,控制电器开关都是由机顶盒向各电器的接收器发送命令 2.客户端:也就是用户的移动设备,手机.平板都可以,我

Spring框架学习之IOC(一)

Spring框架学习之IOC 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器.可单独使用,通常也与其他框架整合使用,例如SSH.SSM. IOC:控制反转 控制权由对象本身转向容器:由容器根据配置文件去创建实例并创建各个实例之间的依赖关系.等同于DI依赖注入 A

Android Afinal框架学习(一) FinalDb 数据库操作

框架地址:https://github.com/yangfuhai/afinal 对应源码: net.tsz.afinal.annotation.sqlite.* net.tsz.afinal.db.sqlite.* net.tsz.afinal.db.table.* net.tsz.afinal.utils.ClassUtils.net.tsz.afinal.utils.FieldUtils FinalDb 建库 FinalDb db = FinalDb.create(context, "my

spring框架学习(二)依赖注入

转自:http://blog.csdn.net/lishuangzhe7047/article/details/20740835 ———————————————————————————————————————————— spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入.接口注入不作要求,下面介绍前两种方式. 1,set注入 采用属性的set方法进行初始化,就成为set注入. 1)给普通字符类型赋值. [java] view plaincopyprint? pub

spring框架学习(一)

转自:http://blog.csdn.net/lishuangzhe7047/article/details/20740209 —————————————————————————————————————————————————— 1,什么是spring框架 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,ibatis框架等组合使用. 2,架构概述 1)IoC(Inversi

从零开始编写自己的C#框架——框架学习补充说明

非常感谢轩辕公子提出了对本框架的看法与意见,所以这里也将回复贴出来,让大家都了解一下 本系列的快速开发指的是,框架构建完毕后,在这个基础上开发新功能非常快捷方便,基本不用写太多代码就可以在短时间内完成大量的基本功能.当然如果直接将全部代码贴出来,直接上例子的话可能更容易理解,但这样的话对于很多想了解整个框架实现过程的朋友来说,一下子太多代码就很难理解最初的思路了,同时大家也看到每一章都会附上独立的解决方案也是这么一回事,通过循序渐进的方式来进行学习.原本想要写得更细更多章节的,但由于个人空闲时间