• 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     }
    View Code

    第二步:在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     }
    View Code

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

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

    其他常用方法:

    ClearCookie方法:

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

    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         }
    View Code

    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();     
    View Code

    Button:

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

    Div:

    Div div = WatiNTest.Browser.Div(Find.ByClass("string"));
    View Code
    作者:Ribbon 出处: http://www.cnblogs.com/Ribbon/ 本文版权归作者和博客园共有,欢迎转载。未经作者同意下,必须在文章页面明显标出原文链接及作者,否则保留追究法律责任的权利。 如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!
  • 相关阅读:
    “字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛
    Codeforces Beta Round 77 (Div. 2 Only)
    Codeforces Round 263(Div. 2)
    Codeforces Round 262 (Div. 2)
    《Introduction to Algorithm》-chaper30-多项式与快速傅里叶变换
    算法专题-STL篇
    算法专题-暴力枚举篇
    初等数论及其应用——中国剩余定理
    初等数论及其应用——费马小定理
    《A First Course in Probability》-chape4-离散型随机变量-几种典型分布列
  • 原文地址:https://www.cnblogs.com/Ribbon/p/4325319.html
Copyright © 2020-2023  润新知