本文转载自:http://www.cnblogs.com/qixue/p/3977135.html
Web element仍然使用OpenQA.Selenium.IWebElement, 本类库将Selenium原装支持的各浏览器统一为OnDriver, 并将常用操作封装。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using QA = OpenQA.Selenium;using UI = OpenQA.Selenium.Support.UI;namespace XWebDriver{ public class OneDriver { private QA.IWebDriver wd = null; private Browsers browser = Browsers.IE; public OneDriver(Browsers theBrowser) { this.browser = theBrowser; wd = InitWebDriver(); } private QA.IWebDriver InitWebDriver() { QA.IWebDriver theDriver = null; switch (this.browser) { case Browsers.IE: { QA.IE.InternetExplorerOptions _ieOptions = new QA.IE.InternetExplorerOptions(); _ieOptions.IntroduceInstabilityByIgnoringProtectedModeSettings = true; theDriver = new QA.IE.InternetExplorerDriver(_ieOptions); }; break; case Browsers.Chrome: { theDriver = new QA.Chrome.ChromeDriver(); }; break; case Browsers.Firefox: { theDriver = new QA.Firefox.FirefoxDriver(); }; break; case Browsers.Safari: { theDriver = new QA.Safari.SafariDriver(); };break; case Browsers.PhantomJS: { theDriver = new QA.PhantomJS.PhantomJSDriver(); };break; default: { QA.IE.InternetExplorerOptions _ieOptions = new QA.IE.InternetExplorerOptions(); _ieOptions.IntroduceInstabilityByIgnoringProtectedModeSettings = true; theDriver = new QA.IE.InternetExplorerDriver(_ieOptions); }; break; } return theDriver; } #region public members ////// Effects throughout the life of web driver /// Set once only if necessary /// /// public void ImplicitlyWait(double seconds) { wd.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(seconds)); } ////// Wait for the expected condition is satisfied, return immediately /// /// public void WaitForPage(string title) { UI.WebDriverWait _wait = new UI.WebDriverWait(wd, TimeSpan.FromSeconds(10)); _wait.Until((d) => { return d.Title.ToLower().StartsWith(title.ToLower()); }); //to do } ////// /// /// public void WaitForElement(string id) { UI.WebDriverWait _wait = new UI.WebDriverWait(wd, TimeSpan.FromSeconds(10)); _wait.Until((d) => { return OpenQA.Selenium.Support.UI.ExpectedConditions.ElementExists(QA.By.Id(id));}); } ////// Load a new web page in current browser /// /// public void GoToUrl(string url) { wd.Navigate().GoToUrl(url); } public void Refresh() { wd.Navigate().Refresh(); } public void Back() { wd.Navigate().Back(); } public void Forward() { wd.Navigate().Forward(); } ////// Get the url of current browser window /// ///public string GetUrl() { return wd.Url; } /// /// Get page title of current browser window /// ///public string GetPageTitle() { return wd.Title; } /// /// Get all cookies defined in the current page /// ///public Dictionary GetAllCookies() { Dictionary cookies = new Dictionary (); switch (this.browser) { case Browsers.IE: { var allCookies= ((QA.IE.InternetExplorerDriver)wd).Manage().Cookies.AllCookies; foreach (QA.Cookie cookie in allCookies) { cookies[cookie.Name] = cookie.Value; } }; break; case Browsers.Chrome: { var allCookies = ((QA.Chrome.ChromeDriver)wd).Manage().Cookies.AllCookies; foreach (QA.Cookie cookie in allCookies) { cookies[cookie.Name] = cookie.Value; } }; break; case Browsers.Firefox: { var allCookies = ((QA.Firefox.FirefoxDriver)wd).Manage().Cookies.AllCookies; foreach (QA.Cookie cookie in allCookies) { cookies[cookie.Name] = cookie.Value; } }; break; case Browsers.Safari: { var allCookies = ((QA.Safari.SafariDriver)wd).Manage().Cookies.AllCookies; foreach (QA.Cookie cookie in allCookies) { cookies[cookie.Name] = cookie.Value; } }; break; case Browsers.PhantomJS: { var allCookies = ((QA.PhantomJS.PhantomJSDriver)wd).Manage().Cookies.AllCookies; foreach (QA.Cookie cookie in allCookies) { cookies[cookie.Name] = cookie.Value; } }; break; default: { var allCookies = ((QA.IE.InternetExplorerDriver)wd).Manage().Cookies.AllCookies; foreach (QA.Cookie cookie in allCookies) { cookies[cookie.Name] = cookie.Value; } }; break; } return cookies; } /// /// Delete all cookies from the page /// public void DeleteAllCookies() { switch (this.browser) { case Browsers.IE: { ((QA.IE.InternetExplorerDriver)wd).Manage().Cookies.DeleteAllCookies(); }; break; case Browsers.Chrome: { ((QA.Chrome.ChromeDriver)wd).Manage().Cookies.DeleteAllCookies(); }; break; case Browsers.Firefox: { ((QA.Firefox.FirefoxDriver)wd).Manage().Cookies.DeleteAllCookies(); }; break; case Browsers.Safari: { ((QA.Safari.SafariDriver)wd).Manage().Cookies.DeleteAllCookies(); }; break; case Browsers.PhantomJS: { ((QA.PhantomJS.PhantomJSDriver)wd).Manage().Cookies.DeleteAllCookies(); }; break; default: { ((QA.IE.InternetExplorerDriver)wd).Manage().Cookies.DeleteAllCookies(); }; break; } } ////// Set focus to a browser window with a specified title /// /// /// public void GoToWindow(string title, bool exactMatch) { string theCurrent = wd.CurrentWindowHandle; IListwindows = wd.WindowHandles; if (exactMatch) { foreach (var window in windows) { wd.SwitchTo().Window(window); if (wd.Title.ToLower() == title.ToLower()) { return; } } } else { foreach (var window in windows) { wd.SwitchTo().Window(window); if (wd.Title.ToLower().Contains(title.ToLower())) { return; } } } wd.SwitchTo().Window(theCurrent); } /// /// Set focus to a frame with a specified name /// /// public void GoToFrame(string name) { QA.IWebElement theFrame = null; var frames = wd.FindElements(QA.By.TagName("iframe")); foreach (var frame in frames) { if (frame.GetAttribute("name").ToLower() == name.ToLower()) { theFrame = (QA.IWebElement)frame; break; } } if (theFrame != null) { wd.SwitchTo().Frame(theFrame); } } public void GoToFrame(QA.IWebElement frame) { wd.SwitchTo().Frame(frame); } ////// Switch to default after going to a frame /// public void GoToDefault() { wd.SwitchTo().DefaultContent(); } ////// Get the alert text /// ///public string GetAlertString() { string theString = string.Empty; QA.IAlert alert = null; alert = wd.SwitchTo().Alert(); if (alert != null) { theString = alert.Text; } return theString; } /// /// Accepts the alert /// public void AlertAccept() { QA.IAlert alert = null; alert = wd.SwitchTo().Alert(); if (alert != null) { alert.Accept(); } } ////// Dismisses the alert /// public void AlertDismiss() { QA.IAlert alert = null; alert = wd.SwitchTo().Alert(); if (alert != null) { alert.Dismiss(); } } ////// Move vertical scroll bar to bottom for the page /// public void PageScrollToBottom() { var js = "document.documentElement.scrollTop=10000"; switch (this.browser) { case Browsers.IE: { ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Chrome: { ((QA.Chrome.ChromeDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Firefox: { ((QA.Firefox.FirefoxDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Safari: { ((QA.Safari.SafariDriver)wd).ExecuteScript(js, null); }; break; case Browsers.PhantomJS: { ((QA.PhantomJS.PhantomJSDriver)wd).ExecuteScript(js, null); }; break; default: { ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null); }; break; } } ////// Move horizontal scroll bar to right for the page /// public void PageScrollToRight() { var js = "document.documentElement.scrollLeft=10000"; switch (this.browser) { case Browsers.IE: { ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Chrome: { ((QA.Chrome.ChromeDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Firefox: { ((QA.Firefox.FirefoxDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Safari: { ((QA.Safari.SafariDriver)wd).ExecuteScript(js, null); }; break; case Browsers.PhantomJS: { ((QA.PhantomJS.PhantomJSDriver)wd).ExecuteScript(js, null); }; break; default: { ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null); }; break; } } ////// Move vertical scroll bar to bottom for an element /// /// public void ElementScrollToBottom(QA.IWebElement element) { string id = element.GetAttribute("id"); string name = element.GetAttribute("name"); var js = ""; if (!string.IsNullOrWhiteSpace(id)) { js = "document.getElementById('" + id + "').scrollTop=10000"; } else if (!string.IsNullOrWhiteSpace(name)) { js = "document.getElementsByName('" + name + "')[0].scrollTop=10000"; } switch (this.browser) { case Browsers.IE: { ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Chrome: { ((QA.Chrome.ChromeDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Firefox: { ((QA.Firefox.FirefoxDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Safari: { ((QA.Safari.SafariDriver)wd).ExecuteScript(js, null); }; break; case Browsers.PhantomJS: { ((QA.PhantomJS.PhantomJSDriver)wd).ExecuteScript(js, null); }; break; default: { ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null); }; break; } } ////// Get a screen shot of the current window /// /// public void TakeScreenshot(string savePath) { QA.Screenshot theScreenshot = null; switch (this.browser) { case Browsers.IE: { theScreenshot = ((QA.IE.InternetExplorerDriver)wd).GetScreenshot(); }; break; case Browsers.Chrome: { theScreenshot = ((QA.Chrome.ChromeDriver)wd).GetScreenshot(); }; break; case Browsers.Firefox: { theScreenshot = ((QA.Firefox.FirefoxDriver)wd).GetScreenshot(); }; break; case Browsers.Safari: { theScreenshot = ((QA.Safari.SafariDriver)wd).GetScreenshot(); }; break; case Browsers.PhantomJS: { theScreenshot = ((QA.PhantomJS.PhantomJSDriver)wd).GetScreenshot(); }; break; default: { theScreenshot = ((QA.IE.InternetExplorerDriver)wd).GetScreenshot(); }; break; } if (theScreenshot != null) { theScreenshot.SaveAsFile(savePath, System.Drawing.Imaging.ImageFormat.Jpeg); } } ////// Find the element of a specified id /// /// ///public QA.IWebElement FindElementById(string id) { QA.IWebElement theElement = null; theElement = (QA.IWebElement)wd.FindElement(QA.By.Id(id)); return theElement; } /// /// Find the element of a specified name /// /// ///public QA.IWebElement FindElementByName(string name) { QA.IWebElement theElement = null; theElement = (QA.IWebElement)wd.FindElement(QA.By.Name(name)); return theElement; } /// /// Find the element by xpath /// /// ///public QA.IWebElement FindElementByXPath(string xpath) { QA.IWebElement theElement = null; theElement = (QA.IWebElement)wd.FindElement(QA.By.XPath(xpath)); return theElement; } public QA.IWebElement FindElementByLinkText(string text) { QA.IWebElement theElement = null; try { theElement = wd.FindElement(QA.By.LinkText(text)); } catch { } return theElement; } public IList FindElementsByLinkText(string text) { IList theElement = null; theElement = (IList )wd.FindElements(QA.By.LinkText(text)); return theElement; } public IList FindElementsByPartialLinkText(string text) { IList theElement = null; theElement = (IList )wd.FindElements(QA.By.PartialLinkText(text)); return theElement; } public IList FindElementsByClassName(string clsName) { IList theElement = null; theElement = (IList )wd.FindElements(QA.By.ClassName(clsName)); return theElement; } public IList FindElementsByTagName(string tagName) { IList theElement = null; theElement = (IList )wd.FindElements(QA.By.TagName(tagName)); return theElement; } public IList FindElementsByCssSelector(string css) { IList theElement = null; theElement = (IList )wd.FindElements(QA.By.CssSelector(css)); return theElement; } public IList FindElementsByXPathName(string xpath) { IList theElement = null; theElement = (IList )wd.FindElements(QA.By.XPath(xpath)); return theElement; } /// /// Executes javascript /// /// public void ExecuteJS(string js) { switch (this.browser) { case Browsers.IE: { ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Chrome: { ((QA.Chrome.ChromeDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Firefox: { ((QA.Firefox.FirefoxDriver)wd).ExecuteScript(js, null); }; break; case Browsers.Safari: { ((QA.Safari.SafariDriver)wd).ExecuteScript(js, null); }; break; case Browsers.PhantomJS: { ((QA.PhantomJS.PhantomJSDriver)wd).ExecuteScript(js, null); }; break; default: { ((QA.IE.InternetExplorerDriver)wd).ExecuteScript(js, null); }; break; } } public void ClickElement(QA.IWebElement element) { (new QA.Interactions.Actions(wd)).Click(element).Perform(); } public void DoubleClickElement(QA.IWebElement element) { (new QA.Interactions.Actions(wd)).DoubleClick(element).Perform(); } public void ClickAndHoldOnElement(QA.IWebElement element) { (new QA.Interactions.Actions(wd)).ClickAndHold(element).Perform(); } public void ContextClickOnElement(QA.IWebElement element) { (new QA.Interactions.Actions(wd)).ContextClick(element).Perform(); } public void DragAndDropElement(QA.IWebElement source, QA.IWebElement target) { (new QA.Interactions.Actions(wd)).DragAndDrop(source, target).Perform(); } public void SendKeysToElement(QA.IWebElement element, string text) { (new QA.Interactions.Actions(wd)).SendKeys(element, text).Perform(); } ////// Quit this server, close all windows associated to it /// public void Cleanup() { wd.Quit(); } #endregion } public enum Browsers { IE, Firefox, Chrome, Safari, PhantomJS }}