zoukankan      html  css  js  c++  java
  • 【转】Selenium

    本文转载自: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
            /// <summary>
            /// Effects throughout the life of web driver
            /// Set once only if necessary
            /// </summary>
            /// <param name="seconds"></param>
            public void ImplicitlyWait(double seconds)
            {
                wd.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(seconds));
            }
    
            /// <summary>
            /// Wait for the expected condition is satisfied, return immediately
            /// </summary>
            /// <param name="expectedCondition"></param>
            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
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="we"></param>
            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));});            
            }
    
    
            /// <summary>
            /// Load a new web page in current browser
            /// </summary>
            /// <param name="url"></param>
            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();
            }
    
            /// <summary>
            /// Get the url of current browser window
            /// </summary>
            /// <returns></returns>
            public string GetUrl()
            {
                return wd.Url;
            }
    
            /// <summary>
            /// Get page title of current browser window
            /// </summary>
            /// <returns></returns>
            public string GetPageTitle()
            {
                return wd.Title;
            }
    
            /// <summary>
            /// Get all cookies defined in the current page
            /// </summary>
            /// <returns></returns>
            public Dictionary<string, string> GetAllCookies()
            {
                Dictionary<string, string> cookies = new Dictionary<string, string>();
                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;
            }
    
            /// <summary>
            /// Delete all cookies from the page
            /// </summary>
            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;
                }
            }
    
            /// <summary>
            /// Set focus to a browser window with a specified title
            /// </summary>
            /// <param name="title"></param>
            /// <param name="exactMatch"></param>
            public void GoToWindow(string title, bool exactMatch)
            {
                string theCurrent = wd.CurrentWindowHandle;
                IList<string> 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);
            }
    
            /// <summary>
            /// Set focus to a frame with a specified name
            /// </summary>
            /// <param name="name"></param>
            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);
            }
    
            /// <summary>
            /// Switch to default after going to a frame
            /// </summary>
            public void GoToDefault()
            {
                wd.SwitchTo().DefaultContent();
            }
    
            /// <summary>
            /// Get the alert text
            /// </summary>
            /// <returns></returns>
            public string GetAlertString()
            {
                string theString = string.Empty;
                QA.IAlert alert = null;
                alert = wd.SwitchTo().Alert();
                if (alert != null)
                {
                    theString = alert.Text;
                }
                return theString;
            }
    
            /// <summary>
            /// Accepts the alert
            /// </summary>
            public void AlertAccept()
            {
                QA.IAlert alert = null;
                alert = wd.SwitchTo().Alert();
                if (alert != null)
                {
                    alert.Accept();
                }
            }
    
            /// <summary>
            /// Dismisses the alert
            /// </summary>
            public void AlertDismiss()
            {
                QA.IAlert alert = null;
                alert = wd.SwitchTo().Alert();
                if (alert != null)
                {
                    alert.Dismiss();
                }            
            }
    
            /// <summary>
            /// Move vertical scroll bar to bottom for the page
            /// </summary>
            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;
                }
            }
    
            /// <summary>
            /// Move horizontal scroll bar to right for the page
            /// </summary>
            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;
                }
            }
    
            /// <summary>
            /// Move vertical scroll bar to bottom for an element
            /// </summary>
            /// <param name="element"></param>
            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;
                }
            }
    
            /// <summary>
            /// Get a screen shot of the current window
            /// </summary>
            /// <param name="savePath"></param>
            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);
                }
            }
    
            /// <summary>
            /// Find the element of a specified id
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public QA.IWebElement FindElementById(string id)
            {
                QA.IWebElement theElement = null;
                theElement = (QA.IWebElement)wd.FindElement(QA.By.Id(id));
                return theElement;
            }
    
            /// <summary>
            /// Find the element of a specified name
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            public QA.IWebElement FindElementByName(string name)
            {
                QA.IWebElement theElement = null;
                theElement = (QA.IWebElement)wd.FindElement(QA.By.Name(name));
                return theElement;
            }
            
            /// <summary>
            /// Find the element by xpath
            /// </summary>
            /// <param name="xpath"></param>
            /// <returns></returns>
            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<QA.IWebElement> FindElementsByLinkText(string text)
            {
                IList<QA.IWebElement> theElement = null;
                theElement = (IList<QA.IWebElement>)wd.FindElements(QA.By.LinkText(text));
                return theElement;
            }
    
            public IList<QA.IWebElement> FindElementsByPartialLinkText(string text)
            {
                IList<QA.IWebElement> theElement = null;
                theElement = (IList<QA.IWebElement>)wd.FindElements(QA.By.PartialLinkText(text));
                return theElement;
            }
    
            public IList<QA.IWebElement> FindElementsByClassName(string clsName)
            {
                IList<QA.IWebElement> theElement = null;
                theElement = (IList<QA.IWebElement>)wd.FindElements(QA.By.ClassName(clsName));
                return theElement;
            }
    
            public IList<QA.IWebElement> FindElementsByTagName(string tagName)
            {
                IList<QA.IWebElement> theElement = null;
                theElement = (IList<QA.IWebElement>)wd.FindElements(QA.By.TagName(tagName));
                return theElement;
            }
    
            public IList<QA.IWebElement> FindElementsByCssSelector(string css)
            {
                IList<QA.IWebElement> theElement = null;
                theElement = (IList<QA.IWebElement>)wd.FindElements(QA.By.CssSelector(css));
                return theElement;
            }
    
            public IList<QA.IWebElement> FindElementsByXPathName(string xpath)
            {
                IList<QA.IWebElement> theElement = null;
                theElement = (IList<QA.IWebElement>)wd.FindElements(QA.By.XPath(xpath));
                return theElement;
            }
    
            /// <summary>
            /// Executes javascript
            /// </summary>
            /// <param name="js"></param>
            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();
            }
    
            /// <summary>
            /// Quit this server, close all windows associated to it
            /// </summary>
            public void Cleanup()
            {
                wd.Quit();
            }
            #endregion
        }
    
        public enum Browsers
        {
            IE,
            Firefox,
            Chrome,
            Safari,
            PhantomJS
        }
    }
  • 相关阅读:
    docker 加速器配置目录
    php 超时设置笔记
    php socket通过smtp发送邮件(纯文本、HTML,多收件人,多抄送,多密送)
    fabric 安装
    centos7下使用yum安装pip
    【转】linux tar 压缩
    ASP.NET MVC 5 默认模板的JS和CSS 是怎么加载的?
    NHibernate with ASP.NET MVC 入门示例
    Ajax入门
    NHibernate入门
  • 原文地址:https://www.cnblogs.com/rwxwsblog/p/8614986.html
Copyright © 2011-2022 走看看