博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】Selenium - 封装WebDrivers (C#)
阅读量:5280 次
发布时间:2019-06-14

本文共 20287 字,大约阅读时间需要 67 分钟。

本文转载自: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; IList
windows = 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 }}

转载于:https://www.cnblogs.com/rwxwsblog/p/8614986.html

你可能感兴趣的文章
Android异步加载网络图片
查看>>
python学习之 - XML
查看>>
css问题小计
查看>>
Laravel学习笔记(三)数据库 数据库迁移
查看>>
ORACLE查看并修改最大连接数
查看>>
box-flex不均分问题
查看>>
Python--GIL 详解
查看>>
Oracle数据导入Mysql中
查看>>
BZOJ-4424 &&CodeForces-19E Fairy DP+dfs (Link-Cut-Tree可A)
查看>>
MongoDB学习笔记——聚合操作之group,distinct,count
查看>>
大道至简读后感(第四章)
查看>>
IDA IDC Tutorials: Additional Auto-Commenting
查看>>
k8s-存储卷1-十二
查看>>
Android 自定义ViewGroup实现弧形菜单
查看>>
ABP框架系列之四十一:(Nuget-Packages-Nuget包)
查看>>
head first 设计模式文摘
查看>>
在Android中Intent的概念及应用(二)——Intent过滤器相关选项
查看>>
数据库备份问题
查看>>
11.Java2核心技术—Java5.0新特性
查看>>
前端面试题(4)iframe有哪些优点?iframe缺点是什么?
查看>>