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浏览器时使用:
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框架学习的更多相关文章
- WatiN框架学习二——对弹窗的处理
以IE为例,WatiN处理弹出窗口: IE ie = new IE("string"); //打开指定web页 ie.Button(Find.ById("string&q ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...
- EF框架学习手记
转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...
- web框架学习列表
转载自鲁塔弗的博客,原文网址:http://lutaf.com/148.htm web framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的 ...
- 2013 最新的 play web framework 版本 1.2.3 框架学习文档整理
Play framework框架学习文档 Play framework框架学习文档 1 一.什么是Playframework 3 二.playframework框架的优点 4 三.Play Frame ...
- SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏
SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!! 基础知识目前不够,有感性 ...
- 各种demo——CI框架学习
各种demo——CI框架学习 寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controlle ...
随机推荐
- 田渊栋:AlphaGo系统即使在单机上也有职业水平
Facebook人工智能组研究员田渊栋博士在知乎专栏上更新了一篇文章,详细分析了AlphaGo在<自然>杂志上发表的论文,他认为AlphaGo整个系统即使在单机上也已具有了职业水平,与李世 ...
- Git教程学习(五)
14. 解决冲突 14.1. 场景 当分支A和分支B在同一个文件上都有修改时会出现冲突.常见的情况是从master分支的基础上生成了新分支dev,然后在dev上进行了修改并add&commit ...
- Lumia 830 win10m 启用触摸按键
用了一年半的830疑似翘屏… 按键基本失灵 每次按的时候基本都是 appbar 那里有反映… 实在懒于换手机(主要是不想花钱…) 研究下怎么启用虚拟按键,还能再战几年… 启用虚拟按键 其实简单说法就是 ...
- 高吞吐量的分布式发布订阅消息系统Kafka-- 管理工具 Kafka Manager
一.概述 Kafka在雅虎内部被很多团队使用,媒体团队用它做实时分析流水线,可以处理高达20Gbps(压缩数据)的峰值带宽. 为了简化开发者和服务工程师维护Kafka集群的工作,构建了一个叫做Kafk ...
- SQL Server への接続を許可するファイアーウォール設定
netsh advfirewall firewall add rule name="SQL Server Browser" protocol=UDP dir=in localpor ...
- 使用WebApi时Post和Put的区别
简单的说Post是添加,Put是修改 吃不准的话,尝试用相同参数访问二次接口,结果不同的是Post(会产生多条记录),结果相同的是Put(仅为一条记录),例如:写博客就是Post:更新签名就是Put
- 安卓Android面试题大全
56个问题都是经常用到的,可以深入研究下,也是必须掌握的开发必备知识. 安卓Android面试题汇总 搜集了一些Android面试题目,供将要面试或者正在面试的朋友参考. 1, 谈谈你对Activit ...
- A20(Cubieboard2)启动过程浅析
A20支持从NAND Flash.SPI NOR Flash.SD card(SDC 0/2)和USB启动.当系统上电时,首先检测Boot Select Pin(BSP)管脚,如果为低电平,则直接从U ...
- [转载]IE678兼容性前缀区分
符合一贯简单的风格,只需记住两个符号 _ 和 * 看例子: #main { background:black; *background:red; _background:blue; } 第一句会被所有 ...
- Eplan 2D安装版布局,部件、端子竖放
部件竖放,不是通过变量的选择实现,而是通过设置实现的,具体设置在: 选项-设置-用户-2D安装板布局: 部件方向-更改为 垂直 部件放置-旋转角度-更改为90° 这样在连续放置部件的时候就变为竖放了, ...