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

 

你可能感兴趣的:(框架)