WatiN框架学习

时间:2023-01-02 17:10:05

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浏览器时使用:

     public class IEStatic
{
private Browser browser;
private int browserThreadId;
private string browserHandle; public Browser Browser
{
get
{
var currentThreadId = GetCurrentThreadId();
if (currentThreadId != browserThreadId)
{
browser = IE.AttachTo<IE>(Find.By("hwnd", browserHandle));
browserThreadId = currentThreadId;
}
return browser;
}
set
{
browser = value;
browserThreadId = GetCurrentThreadId();
browserHandle = browser.hWnd.ToString(); }
} private int GetCurrentThreadId()
{
return Thread.CurrentThread.GetHashCode();
}
}

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

     public class WatiNTest
{
static Browser browser;
static IEStatic ieInstance;
public static string classPropertyName = "Classname";
public static Browser Browser
{
get
{
string browserType = ConfigurationManager.AppSettings["BrowserType"].ToString().ToLower();
browserType = browserType ?? "ie";
switch (browserType)
{
case "ie":
if (browser == null)
{
try
{
browser = new IE();
}
catch
{
CloseInternetExplorers();
browser = new IE();
}
ieInstance = new IEStatic();
ieInstance.Browser = browser;
Logger.LogAction("New IE instance created, hWnd=" + browser.hWnd.ToString());
}
else
{
browser = ieInstance.Browser;
}
classPropertyName = "Classname";
break;
case "firefox":
if (browser == null) browser = new FireFox();
classPropertyName = "Class";
break; }
return browser;
}
} public static void CloseInternetExplorers()
{
var processes = from process in Process.GetProcesses()
where process.ProcessName == "iexplore"
select process; foreach (var process in processes)
{
try
{
process.Kill();
process.WaitForExit();
process.Close();
process.Dispose();
}
catch { }
}
browser = null; }
}

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

         public static void Navigate(string url)
{
browser.GoTo(url);
}

其他常用方法:

ClearCookie方法:

         public static void ClearCookie()
{
using (IE ie = new IE())
{
ie.ClearCache();
ie.ClearCookies();
}
}

Close方法:

         public static void Close()
{
if (browser != null)
{
browser.Close();
browser.Dispose();
if (ieInstance != null)
{
ieInstance.Dispose();
ieInstance = null;
}
browser = null;
}
}

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

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

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

Link:

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

Button:

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

Div:

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

WatiN框架学习的更多相关文章

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

    以IE为例,WatiN处理弹出窗口: IE ie = new IE("string"); //打开指定web页 ie.Button(Find.ById("string&q ...

  2. IdentityServer4 ASP&period;NET Core的OpenID Connect OAuth 2&period;0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  3. Hadoop学习笔记—18&period;Sqoop框架学习

    一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...

  4. Spring框架学习一

    Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...

  5. EF框架学习手记

    转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...

  6. web框架学习列表

    转载自鲁塔弗的博客,原文网址:http://lutaf.com/148.htm web framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的 ...

  7. 2013 最新的 play web framework 版本 1&period;2&period;3 框架学习文档整理

    Play framework框架学习文档 Play framework框架学习文档 1 一.什么是Playframework 3 二.playframework框架的优点 4 三.Play Frame ...

  8. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  9. 各种demo——CI框架学习

    各种demo——CI框架学习   寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controlle ...

随机推荐

  1. U-Boot GOT表分析和u-boot&period;lds解读

    转自:http://blog.sina.com.cn/s/blog_70dd16910100zab6.html u-boot-2010.09/arch/powerpc/cpu/mpc86xx/star ...

  2. Android activity四种基本启动模式

    standard:默认的模式,每次启动会新创建一个activity对象 singleTop:在当前任务栈中,判断栈顶是否为当前的activity,如果是,就直接使用,如果不是,就会创建新的activi ...

  3. php对比辨析之 mysql&lowbar;escape&lowbar;string &amp&semi; mysql&lowbar;real&lowbar;escape&lowbar;string &amp&semi; addsalshes

    概述: addslashes和mysql_real_escape_string.都是为了使数据安全的插入到数据库中而进行过滤. addslashes 转义的字符是单引号(').双引号("). ...

  4. AdTime:多屏时代下传统媒体的鼓起

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzk1MTQzNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  5. node&period;JS中配置http-server

    http-server 是一个简单的HTTP服务器, 基于 nodeJs,在nodejs命令行中配置http服务器. 项目结构:

  6. sourcetree 跳过首次登录

    定位到用户缓存数据目录:(需要在文件夹选项中 开启不隐藏文件夹和不隐藏文件扩展名) 一般为: C:\Users\{用户名}\AppData\Local\Atlassian 进入sourcetree目录 ...

  7. 【转】如何判断ARP欺骗?该怎么防护?

    因为在进行通信的时候,数据是通过MAC地址与IP地址的对应关系来进行转发的.若其中MAC地址与IP地址对应的关系出错,就会导致数据错误转发,影响正常通信.通过某种手段,来更改MAC与IP地址的对应关系 ...

  8. LinkedHashMap和HashTable

    LinkedHashMap: 继承了HashMap: 其中,key不允许重复是Map接口就有的性质: HashTable: 同步的,意味着是单线程,意味着线程安全的,但是速度慢,和List接口集合的子 ...

  9. 第十课——cluster故障转移操作,codis部署

    作业描述] 1.cluster的故障转移操作,截图展示 2.部署codis,并写代码访问codis ================================================== ...

  10. maven 根据P参数值打包动态修改properties文件中值或一定properties

    需求:由于最近开发clover项目 ,没有使用spring,更没有使用任何框架,而使用J2EE的web工程,所以连接ZK和MongoDB.Redis等服务器需用指定properties文件, 而目前公 ...