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:

  1. 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.NET Core的OpenID Connect OAuth 2.0框架学习保护API

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

  3. Hadoop学习笔记—18.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.2.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. IOS6屏幕旋转详解(自动旋转、手动旋转、兼容IOS6之前系统)

    转自 http://blog.csdn.net/zzfsuiye/article/details/8251060 概述: 在iOS6之前的版本中,通常使用 shouldAutorotateToInte ...

  2. Spark RDD解密

    1.  基于数据集的处理: 从物理存储上加载数据,然后操作数据,然后写入数据到物理设备; 基于数据集的操作不适应的场景: 不适合于大量的迭代: 不适合交互式查询:每次查询都需要对磁盘进行交互. 基于数 ...

  3. BZOJ 4726: [POI2017]Sabota? 树形dp

    4726: [POI2017]Sabota? 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4726 Description 某个公司有n ...

  4. http协议读书笔记1-概述

    1.http协议在网络中的位置: http协议位于TCP协议的上层,http试用tcp来传输其报文数据,tcp在ip的上层. 2.浏览器发起连接的过程 上述图的过程是: 浏览器从url中解析出服务区的 ...

  5. c语言二叉树

    Department of Computing and Information SystemsCOMP10002 Foundations of AlgorithmsSemester 2, 2014As ...

  6. Java模式(适配器模式)【转载】

    转载地址: http://blog.csdn.net/elegant_shadow/article/details/5006175 今天看了下Java中的适配器模式,以下就来小做下总结和谈谈感想,以便 ...

  7. 16.3.1-sp_getapplock

    USE TestSystem BEGIN TRANSACTION test1 EXEC [sp_getapplock] 'AppSourceName' , 'Exclusive' WAITFOR DE ...

  8. Unity中Mesh分解与边缘高亮加上深度检测

    一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMe ...

  9. PInvoke在 2.0 3.0的时候正常 升级到4.0后出错。

    方法1: 设置 CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl,但是我设置了也是出错.换一个con ...

  10. 针对 SQL Server 2008 在Windows Server 2008上的访问配置 Windows 防火墙

    现在Windows Server 2008 服务器用的越来越多,2008的防火墙比2003的有了很大的增强,安全性有了更大的提高. 甚至80端口的出站默认都是被关闭的.所以如果在2008Server上 ...