51Testing软件测试论坛

标题: Selenium - 封装WebDrivers (C#) [打印本页]

作者: 感悟时分    时间: 2018-4-12 15:20
标题: Selenium - 封装WebDrivers (C#)
Web element仍然使用OpenQA.Selenium.IWebElement, 本类库将Selenium原装支持的各浏览器统一为OnDri
ver, 并将常用操作封装。

复制代码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using QA = OpenQA.Selenium;
  7. using UI = OpenQA.Selenium.Support.UI;

  8. namespace XWebDriver
  9. {
  10.     public class OneDriver
  11.     {
  12.         private QA.IWebDriver wd = null;
  13.         private Browsers browser = Browsers.IE;
  14.         public OneDriver(Browsers theBrowser)
  15.         {
  16.             this.browser = theBrowser;
  17.             wd = InitWebDriver();
  18.         }

  19.         private QA.IWebDriver InitWebDriver()
  20.         {
  21.             QA.IWebDriver theDriver = null;
  22.             switch (this.browser)
  23.             {
  24.                 case Browsers.IE:
  25.                     {
  26.                         QA.IE.InternetExplorerOptions _ieOptions = new QA.IE.InternetExplorerOptions();
  27.                         _ieOptions.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
  28.                         theDriver = new QA.IE.InternetExplorerDriver(_ieOptions);
  29.                     }; break;
  30.                 case Browsers.Chrome:
  31.                     {
  32.                         theDriver = new QA.Chrome.ChromeDriver();
  33.                     }; break;
  34.                 case Browsers.Firefox:
  35.                     {
  36.                         theDriver = new QA.Firefox.FirefoxDriver();
  37.                     }; break;
  38.                 case Browsers.Safari:
  39.                     {
  40.                         theDriver = new QA.Safari.SafariDriver();
  41.                     };break;
  42.                 case Browsers.PhantomJS:
  43.                     {
  44.                         theDriver = new QA.PhantomJS.PhantomJSDriver();
  45.                     };break;
  46.                 default:
  47.                     {
  48.                         QA.IE.InternetExplorerOptions _ieOptions = new QA.IE.InternetExplorerOptions();
  49.                         _ieOptions.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
  50.                         theDriver = new QA.IE.InternetExplorerDriver(_ieOptions);
  51.                     }; break;
  52.             }
  53.             return theDriver;
  54.         }

  55.         #region public members
  56.         /// <summary>
  57.         /// Effects throughout the life of web driver
  58.         /// Set once only if necessary
  59.         /// </summary>
  60.         /// <param name="seconds"></param>
  61.         public void ImplicitlyWait(double seconds)
  62.         {
  63.             wd.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(seconds));
  64.         }

  65.         /// <summary>
  66.         /// Wait for the expected condition is satisfied, return immediately
  67.         /// </summary>
  68.         /// <param name="expectedCondition"></param>
  69.         public void WaitForPage(string title)
  70.         {
  71.             UI.WebDriverWait _wait = new UI.WebDriverWait(wd, TimeSpan.FromSeconds(10));
  72.             _wait.Until((d) => { return d.Title.ToLower().StartsWith(title.ToLower()); });
  73.             //to do
  74.         }

  75.         /// <summary>
  76.         ///
  77.         /// </summary>
  78.         /// <param name="we"></param>
  79.         public void WaitForElement(string id)
  80.         {
  81.             UI.WebDriverWait _wait = new UI.WebDriverWait(wd, TimeSpan.FromSeconds(10));
  82.             _wait.Until((d) => { return OpenQA.Selenium.Support.UI.ExpectedConditions.ElementExists(QA.By.Id(id));});            
  83.         }


  84.         /// <summary>
  85.         /// Load a new web page in current browser
  86.         /// </summary>
  87.         /// <param name="url"></param>
  88.         public void GoToUrl(string url)
  89.         {
  90.             wd.Navigate().GoToUrl(url);
  91.         }

  92.         public void Refresh()
  93.         {
  94.             wd.Navigate().Refresh();
  95.         }

  96.         public void Back()
  97.         {
  98.             wd.Navigate().Back();
  99.         }

  100.         public void Forward()
  101.         {
  102.             wd.Navigate().Forward();
  103.         }

  104.         /// <summary>
  105.         /// Get the url of current browser window
  106.         /// </summary>
  107.         /// <returns></returns>
  108.         public string GetUrl()
  109.         {
  110.             return wd.Url;
  111.         }

  112.         /// <summary>
  113.         /// Get page title of current browser window
  114.         /// </summary>
  115.         /// <returns></returns>
  116.         public string GetPageTitle()
  117.         {
  118.             return wd.Title;
  119.         }

  120.         /// <summary>
  121.         /// Get all cookies defined in the current page
  122.         /// </summary>
  123.         /// <returns></returns>
  124.         public Dictionary<string, string> GetAllCookies()
  125.         {
  126.             Dictionary<string, string> cookies = new Dictionary<string, string>();
  127.             switch (this.browser)
  128.             {
  129.                 case Browsers.IE:
  130.                     {
  131.                         var allCookies= ((QA.IE.InternetExplorerDriver)wd).Manage().Cookies.AllCookies;
  132.                         foreach (QA.Cookie cookie in allCookies)
  133.                         {
  134.                             cookies[cookie.Name] = cookie.Value;
  135.                         }
  136.                     }; break;
  137.                 case Browsers.Chrome:
  138.                     {
  139.                         var allCookies = ((QA.Chrome.ChromeDriver)wd).Manage().Cookies.AllCookies;
  140.                         foreach (QA.Cookie cookie in allCookies)
  141.                         {
  142.                             cookies[cookie.Name] = cookie.Value;
  143.                         }
  144.                     }; break;
  145.                 case Browsers.Firefox:
  146.                     {
  147.                         var allCookies = ((QA.Firefox.FirefoxDriver)wd).Manage().Cookies.AllCookies;
  148.                         foreach (QA.Cookie cookie in allCookies)
  149.                         {
  150.                             cookies[cookie.Name] = cookie.Value;
  151.                         }
  152.                     }; break;

复制代码



作者: 感悟时分    时间: 2018-4-12 15:21
  1. case Browsers.Safari:
  2. {
  3. var allCookies = ((QA.Safari.SafariDriver)wd).Manage().Cookies.AllCookies;
  4. foreach (QA.Cookie cookie in allCookies)
  5. {
  6. cookies[cookie.Name] = cookie.Value;
  7. }
  8. }; break;
  9. case Browsers.PhantomJS:
  10. {
  11. var allCookies = ((QA.PhantomJS.PhantomJSDriver)wd).Manage().Cookies.AllCookies;
  12. foreach (QA.Cookie cookie in allCookies)
  13. {
  14. cookies[cookie.Name] = cookie.Value;
  15. }
  16. }; break;
  17. default:
  18. {
  19. var allCookies = ((QA.IE.InternetExplorerDriver)wd).Manage().Cookies.AllCookies;
  20. foreach (QA.Cookie cookie in allCookies)
  21. {
  22. cookies[cookie.Name] = cookie.Value;
  23. }
  24. }; break;
  25. }

  26. return cookies;
  27. }

  28. /// <summary>
  29. /// Delete all cookies from the page
  30. /// </summary>
  31. public void DeleteAllCookies()
  32. {
  33. switch (this.browser)
  34. {
  35. case Browsers.IE:
  36. {
  37. ((QA.IE.InternetExplorerDriver)wd).Manage().Cookies.DeleteAllCookies();
  38. }; break;
  39. case Browsers.Chrome:
  40. {
  41. ((QA.Chrome.ChromeDriver)wd).Manage().Cookies.DeleteAllCookies();
  42. }; break;
  43. case Browsers.Firefox:
  44. {
  45. ((QA.Firefox.FirefoxDriver)wd).Manage().Cookies.DeleteAllCookies();
  46. }; break;
  47. case Browsers.Safari:
  48. {
  49. ((QA.Safari.SafariDriver)wd).Manage().Cookies.DeleteAllCookies();
  50. }; break;
  51. case Browsers.PhantomJS:
  52. {
  53. ((QA.PhantomJS.PhantomJSDriver)wd).Manage().Cookies.DeleteAllCookies();
  54. }; break;
  55. default:
  56. {
  57. ((QA.IE.InternetExplorerDriver)wd).Manage().Cookies.DeleteAllCookies();
  58. }; break;
  59. }
  60. }

  61. /// <summary>
  62. /// Set focus to a browser window with a specified title
  63. /// </summary>
  64. /// <param name="title"></param>
  65. /// <param name="exactMatch"></param>
  66. public void GoToWindow(string title, bool exactMatch)
  67. {
  68. string theCurrent = wd.CurrentWindowHandle;
  69. IList<string> windows = wd.WindowHandles;
  70. if (exactMatch)
  71. {
  72. foreach (var window in windows)
  73. {
  74. wd.SwitchTo().Window(window);
  75. if (wd.Title.ToLower() == title.ToLower())
  76. {
  77. return;
  78. }
  79. }
  80. }
  81. else
  82. {
  83. foreach (var window in windows)
  84. {
  85. wd.SwitchTo().Window(window);
  86. if (wd.Title.ToLower().Contains(title.ToLower()))
  87. {
  88. return;
  89. }
  90. }
  91. }

  92. wd.SwitchTo().Window(theCurrent);
  93. }

  94. /// <summary>
  95. /// Set focus to a frame with a specified name
  96. /// </summary>
  97. /// <param name="name"></param>
  98. public void GoToFrame(string name)
  99. {
  100. QA.IWebElement theFrame = null;
  101. var frames = wd.FindElements(QA.By.TagName("iframe"));
  102. foreach (var frame in frames)
  103. {
  104. if (frame.GetAttribute("name").ToLower() == name.ToLower())
  105. {
  106. theFrame = (QA.IWebElement)frame;
  107. break;
  108. }
  109. }
  110. if (theFrame != null)
  111. {
  112. wd.SwitchTo().Frame(theFrame);
  113. }
  114. }

  115. public void GoToFrame(QA.IWebElement frame)
  116. {
  117. wd.SwitchTo().Frame(frame);
  118. }

  119. /// <summary>
  120. /// Switch to default after going to a frame
  121. /// </summary>
  122. public void GoToDefault()
  123. {
  124. wd.SwitchTo().DefaultContent();
  125. }

  126. /// <summary>
  127. /// Get the alert text
  128. /// </summary>
  129. /// <returns></returns>
  130. public string GetAlertString()
  131. {
  132. string theString = string.Empty;
  133. QA.IAlert alert = null;
  134. alert = wd.SwitchTo().Alert();
  135. if (alert != null)
  136. {
  137. theString = alert.Text;
  138. }
  139. return theString;
  140. }

  141. /// <summary>
  142. /// Accepts the alert
  143. /// </summary>
  144. public void AlertAccept()
  145. {
  146. QA.IAlert alert = null;
  147. alert = wd.SwitchTo().Alert();
  148. if (alert != null)
  149. {
  150. alert.Accept();
  151. }
  152. }

  153. /// <summary>
  154. /// Dismisses the alert
  155. /// </summary>
  156. public void AlertDismiss()
  157. {
  158. QA.IAlert alert = null;
  159. alert = wd.SwitchTo().Alert();
  160. if (alert != null)
  161. {
  162. alert.Dismiss();
  163. }
  164. }

  165. /// <summary>
  166. /// Move vertical scroll bar to bottom for the page
  167. /// </summary>
  168. public void PageScrollToBottom()
  169. {
  170. var js = "document.documentElement.scrollTop=10000";
  171. switch (this.browser)
  172. {
  173. case Browsers.IE:
  174. {
  175. ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null);
  176. }; break;
  177. case Browsers.Chrome:
  178. {
  179. ((QA.Chrome.ChromeDriver)wd).ExecuteScript(js, null);
  180. }; break;
  181. case Browsers.Firefox:
  182. {
  183. ((QA.Firefox.FirefoxDriver)wd).ExecuteScript(js, null);
  184. }; break;
  185. case Browsers.Safari:
  186. {
  187. ((QA.Safari.SafariDriver)wd).ExecuteScript(js, null);
  188. }; break;
  189. case Browsers.PhantomJS:
  190. {
  191. ((QA.PhantomJS.PhantomJSDriver)wd).ExecuteScript(js, null);
  192. }; break;
  193. default:
  194. {
  195. ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null);
  196. }; break;
  197. }
  198. }

  199. /// <summary>
  200. /// Move horizontal scroll bar to right for the page
  201. /// </summary>
  202. public void PageScrollToRight()
  203. {
  204. var js = "document.documentElement.scrollLeft=10000";
  205. switch (this.browser)
  206. {
  207. case Browsers.IE:
  208. {
  209. ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null);
  210. }; break;
  211. case Browsers.Chrome:
  212. {
  213. ((QA.Chrome.ChromeDriver)wd).ExecuteScript(js, null);
  214. }; break;
  215. case Browsers.Firefox:
  216. {
  217. ((QA.Firefox.FirefoxDriver)wd).ExecuteScript(js, null);
  218. }; break;
  219. case Browsers.Safari:
  220. {
  221. ((QA.Safari.SafariDriver)wd).ExecuteScript(js, null);
  222. }; break;
  223. case Browsers.PhantomJS:
  224. {
  225. ((QA.PhantomJS.PhantomJSDriver)wd).ExecuteScript(js, null);
  226. }; break;
  227. default:
  228. {
  229. ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null);
  230. }; break;
  231. }
  232. }


复制代码





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2