WebDriverExtensionsByC#

测试工具//****************************************************************************************************

//ClassName:       WebDriverExtensions
 
//****************************************************************************************************
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using System.Threading;
 
namespace Edu24ol.eCommerce.Test.Comm
{
    /// <summary>
    /// A set of CSS and form based extension methods for <see cref="IWebDriver"/>.
    /// </summary>
    public static class WebDriverExtensions
    {
        /// <summary>
        /// Clicks a button that has the given value.
        /// </summary>
        /// <param name="buttonValue">The button's value (input[value=])</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void ClickButtonWithValue(this IWebDriver webdriver, string buttonValue)
        {
            webdriver.FindElement(By.CssSelector("input[value='" + buttonValue + "']")).Click();
        }
 
        /// <summary>
        /// Clicks a button with the id ending with the provided value.
        /// </summary>
        /// <param name="idEndsWith">A CSS id.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void ClickButtonWithId(this IWebDriver webdriver, string idEndsWith)
        {
            webdriver.FindElement(By.CssSelector("input[id$='" + idEndsWith + "']")).Click();
        }
 
        /// <summary>
        /// Selects an item from a drop down box using the given CSS id and the itemIndex.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="itemIndex">A zero-based index that determines which drop down box to target from the CSS selector (assuming
        /// the CSS selector returns more than one drop down box).</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void SelectItemInList(this IWebDriver webdriver, string selector, int itemIndex)
        {
            SelectElement element = new SelectElement(webdriver.FindElement(By.CssSelector(selector)));
            element.SelectByIndex(itemIndex);
        }
        /// <summary>
        /// Selects an item from a drop down box using the given CSS id and the value.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="value">the value.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void SelectItemByValue(this IWebDriver webdriver, string selector, string value)
        {
            var element = new SelectElement(webdriver.FindElement(By.CssSelector(selector)));
            element.SelectByValue(value);
        }
 
        /// <summary>
        /// Selects an item from the nth drop down box (based on the elementIndex argument), using the given CSS id and the itemIndex.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="itemIndex">A zero-based index that determines which drop down box to target from the CSS selector (assuming
        /// the CSS selector returns more than one drop down box).</param>
        /// <param name="elementIndex">The element in the drop down list to select.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void SelectItemInList(this IWebDriver webdriver, string selector, int itemIndex, int elementIndex)
        {
            SelectElement element = new SelectElement(webdriver.FindElements(By.CssSelector(selector))[elementIndex]);
            element.SelectByIndex(itemIndex);
        }
 
        /// <summary>
        /// Returns the number of elements count that match the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The number of elements found.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static int ElementCount(this IWebDriver webdriver, string selector)
        {
            return webdriver.FindElements(By.CssSelector(selector)).Count;
        }
 
        /// <summary>
        /// Returns the number of ElementIList that match the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The number of elements found.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static IList<IWebElement> ElementIList(this IWebDriver webdriver, string selector)
        {
            return webdriver.FindElements(By.CssSelector(selector));
        }
 
        /// <summary>
        /// Gets the selected index from a drop down box using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The index of the selected item in the drop down box</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static int SelectedIndex(this IWebDriver webdriver, string selector)
        {
            SelectElement element = new SelectElement(webdriver.FindElement(By.CssSelector(selector)));
 
            for (int i = 0; i < element.Options.Count; i++)
            {
                if (element.Options[i].Selected)
                    return i;
            }
 
            return -1;
        }
 
        /// <summary>
        /// Gets the selected index from a drop down box using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <param name="selectedIndex"></param>
        /// <returns>The index of the selected item in the drop down box</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static int SetSelectedIndex(this IWebDriver webdriver, string selector, int selectedIndex)
        {
            SelectElement element = new SelectElement(webdriver.FindElement(By.CssSelector(selector)));
            if (selectedIndex >= element.Options.Count)
                selectedIndex = 0;
            element.SelectByIndex(selectedIndex);
            return -1;
        }
        /// <summary>
        /// Gets the selected index from the nth drop down box (based on the elementIndex argument), using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="itemIndex">A zero-based index that determines which drop down box to target from the CSS selector (assuming
        /// the CSS selector returns more than one drop down box).</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The index of the selected item in the drop down box</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static int SelectedIndex(this IWebDriver webdriver, string selector, int itemIndex)
        {
            SelectElement element = new SelectElement(webdriver.FindElements(By.CssSelector(selector))[itemIndex]);
 
            for (int i = 0; i < element.Options.Count; i++)
            {
                if (element.Options[i].Selected)
                    return i;
            }
 
            return -1;
        }
 
        /// <summary>
        /// Gets the selected value from a drop down box using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The value of the selected item.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static string GetSelectedItemValue(this IWebDriver webdriver, string selector)
        {
            SelectElement element = new SelectElement(webdriver.FindElement(By.CssSelector(selector)));
            return element.SelectedOption.GetAttribute("value");
        }
 
        /// <summary>
        /// Clicks a link with the text provided. This is case sensitive and searches using an Xpath contains() search.
        /// </summary>
        /// <param name="linkContainsText">The link text to search for.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void ClickLinkWithText(this IWebDriver webdriver, string linkContainsText)
        {
            webdriver.FindElement(By.XPath("//a[contains(text(),'" + linkContainsText + "')]")).Click();
        }
 
        /// <summary>
        /// Clicks a link with the id ending with the provided value.
        /// </summary>
        /// <param name="idEndsWith">A CSS id.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void ClickLinkWithId(this IWebDriver webdriver, string idEndsWith)
        {
            webdriver.FindElement(By.CssSelector("a[id$='" + idEndsWith + "']")).Click();
        }
 
        /// <summary>
        /// Clicks an element using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void Click(this IWebDriver webdriver, string selector)
        {
            webdriver.FindElement(By.CssSelector(selector)).Click();
        }
 
        /// <summary>
        /// Clicks an element using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="itemIndex">A zero-based index that determines which element to target from the CSS selector (assuming
        /// the CSS selector returns more than one element).</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void Click(this IWebDriver webdriver, string selector, int itemIndex)
        {
            webdriver.FindElements(By.CssSelector(selector))[itemIndex].Click();
        }
 
        /// <summary>
        /// Gets an input element with the id ending with the provided value.
        /// </summary>
        /// <param name="idEndsWith">A CSS id.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>An <see cref="IWebElement"/> for the item matched.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static IWebElement InputWithId(this IWebDriver webdriver, string idEndsWith)
        {
            return webdriver.FindElement(By.CssSelector("input[id$='" + idEndsWith + "']"));
        }
 
        /// <summary>
        /// Gets an element's value with the id ending with the provided value.
        /// </summary>
        /// <param name="idEndsWith">A CSS id.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The element's value.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static string ElementValueWithId(this IWebDriver webdriver, string idEndsWith)
        {
            return webdriver.FindElement(By.CssSelector("input[id$='" + idEndsWith + "']")).GetAttribute("value");
        }
 
        /// <summary>
        /// Gets an element's value using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The element's value.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static string ElementValue(this IWebDriver webdriver, string selector)
        {
            return webdriver.FindElement(By.CssSelector(selector)).GetAttribute("value");
        }
 
        /// <summary>
        /// Gets an element's value using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="itemIndex">A zero-based index that determines which element to target from the CSS selector (assuming
        /// the CSS selector returns more than one element).</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The element's value.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static string ElementValue(this IWebDriver webdriver, string selector, int itemIndex)
        {
            return webdriver.FindElements(By.CssSelector(selector))[itemIndex].GetAttribute("value");
        }
 
        /// <summary>
        /// Gets an element's text using the given CSS selector.
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="itemIndex">A zero-based index that determines which element to target from the CSS selector (assuming
        /// the CSS selector returns more than one element).</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>The element's text.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static string ElementText(this IWebDriver webdriver, string selector, int itemIndex)
        {
            return webdriver.FindElements(By.CssSelector(selector))[itemIndex].Text;
        }
 
        /// <summary>
        /// Return true if the checkbox with the id ending with the provided value is checked/selected.
        /// </summary>
        /// <param name="idEndsWith">A CSS id.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <returns>True if the checkbox is checked.</returns>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static bool IsCheckboxChecked(this IWebDriver webdriver, string idEndsWith)
        {
            return webdriver.FindElement(By.CssSelector("input[id$='" + idEndsWith + "']")).Selected;
        }
 
        /// <summary>
        /// Clicks the checkbox with the id ending with the provided value.
        /// </summary>
        /// <param name="idEndsWith">A CSS id.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void ClickCheckbox(this IWebDriver webdriver, string idEndsWith)
        {
            webdriver.FindElement(By.CssSelector("input[id$='" + idEndsWith + "']")).Click();
        }
 
        /// <summary>
        /// Sets an element's (an input field) value to the provided text by using SendKeys().
        /// </summary>
        /// <param name="value">The text to type.</param>
        /// <param name="element">A <see cref="IWebElement"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void SetValue(this IWebElement element, string value)
        {
            element.SendKeys(value);
        }
 
        /// <summary>
        /// Sets an element's (an input field) value to the provided text, using the given CSS selector and using SendKeys().
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="value">The text to type.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void SetValue(this IWebDriver webdriver, string selector, string value)
        {
            webdriver.FindElement(By.CssSelector(selector)).Clear();
            webdriver.FindElement(By.CssSelector(selector)).SendKeys(value);
        }
 
        /// <summary>
        /// Sets an element's (an input field) value to the provided text, using the given CSS selector and using SendKeys().
        /// </summary>
        /// <param name="selector">A valid CSS selector.</param>
        /// <param name="value">The text to type.</param>
        /// <param name="itemIndex">A zero-based index that determines which element to target from the CSS selector (assuming
        /// the CSS selector returns more than one element).</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void SetValue(this IWebDriver webdriver, string selector, string value, int itemIndex)
        {
            webdriver.FindElements(By.CssSelector(selector))[itemIndex].Clear();
            webdriver.FindElements(By.CssSelector(selector))[itemIndex].SendKeys(value);
        }
 
        /// <summary>
        /// Sets the textbox with the given CSS id to the provided value.
        /// </summary>
        /// <param name="idEndsWith">A CSS id.</param>
        /// <param name="value">The text to type.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void FillTextBox(this IWebDriver webdriver, string idEndsWith, string value)
        {
            webdriver.SetValue("input[id$='" + idEndsWith + "']", value);
        }
 
        /// <summary>
        /// Sets the textarea with the given CSS id to the provided value.
        /// </summary>
        /// <param name="value">The text to set the value to.</param>
        /// <param name="idEndsWith">A CSS id.</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        /// <exception cref="OpenQA.Selenium.NoSuchElementException">No element was found.</exception>
        public static void FillTextArea(this IWebDriver webdriver, string idEndsWith, string value)
        {
            webdriver.SetValue("textarea[id$='" + idEndsWith + "']", value);
        }
 
        /// <summary>
        /// Waits the specified time in second (using a thread sleep)
        /// </summary>
        /// <param name="seconds">The number of seconds to wait (this uses TimeSpan.FromSeconds)</param>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        [Obsolete("Use WaitForElementDisplayed instead, as Wait uses Thread.Sleep")]
        public static void Wait(this IWebDriver webdriver, double seconds)
        {
            Thread.Sleep(TimeSpan.FromSeconds(seconds));
        }
 
        /// <summary>
        /// Waits 2 seconds, which is *usually* the maximum time needed for all Javascript execution to finish on the page.
        /// </summary>
        /// <param name="webdriver">A <see cref="IWebDriver"/> instance.</param>
        [Obsolete("Use WaitForElementDisplayed instead, as WaitForPageLoad uses Thread.Sleep")]
        public static void WaitForPageLoad(this IWebDriver webdriver, int second = 2)
        {
            webdriver.Wait(second);
        }
 
        /// <summary>
        /// Waits for an elements to be displayed on the page for the time specified.
        /// </summary>
        /// <param name="driver">A <see cref="IWebDriver"/> instance.</param>
        /// <param name="by">The selector to find the element with.</param>
        /// <param name="timeoutInSeconds">The number of seconds to wait</param>
        /// <returns></returns>
        public static IWebElement WaitForElementDisplayed(this IWebDriver driver, By by, int timeoutInSeconds = 10)
        {
            try
            {
                if (driver.IsElementDisplayed(by))
                {
                    return driver.FindElement(by);
                }
                return null;
            }
            catch
            {
                return null;
            }
        }
 
        /// <summary>
        /// Determines whether the element provided by the selector is displayed or not, waiting a 
        /// certain amount of time for it to be displayed.
        /// </summary>
        /// <param name="driver">A <see cref="IWebDriver"/> instance.</param>
        /// <param name="by">The selector to find the element with.</param>
        /// <param name="timeoutInSeconds">The number of seconds to wait.</param>
        /// <returns>True if the element is displayed, false otherwise.</returns>
        public static bool IsElementDisplayed(this IWebDriver driver, By by, int timeoutInSeconds = 10)
        {
            try
            {
                var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
                return wait.Until<bool>(x => x.FindElement(by).Displayed);
            }
            catch
            {
                return false;
            }
        }
 
        /// <summary>
        /// 设置  send Key
        /// </summary>
        /// <param name="element"></param>
        /// <param name="keys"></param>
        /// <returns></returns>
        public static IWebElement SetKeyInfo(this IWebElement element, string keys)
        {
            if (element == null)
                return null;
            element.Clear();
            element.SendKeys(keys);
            return element;
        }
 
 
        /// <summary>
        /// 获取元素
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static IWebElement GetElementById(this IWebDriver driver, string id)
        {
            if (driver == null)
                return null;
            return driver.FindElement(By.Id(id));
        }
        /// <summary>
        /// 查找的元素是否存在
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="by"></param>
        /// <returns></returns>
        public static bool IsElementExits(this IWebDriver driver, By by)
        {
            if (driver == null)
                return false;
            try
            {
                driver.FindElement(by);
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }
        /// <summary>
        /// 获取元素
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static bool IsExitsElementById(this IWebDriver driver, string id)
        {
            if (driver == null)
                return false;
            try
            {
                driver.FindElement(By.Id(id));
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
 
        }
        /// <summary>
        /// ClassName 
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="className"></param>
        /// <returns></returns>
        public static IWebElement GetElementByClassName(this IWebDriver driver, string className)
        {
            if (driver == null)
                return null;
            return driver.FindElement(By.ClassName(className));
        }
 
 
        /// <summary>
        /// 
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static IWebElement GetElementByName(this IWebDriver driver, string name)
        {
            if (driver == null)
                return null;
            return driver.FindElement(By.Name(name));
        }
        /// <summary>
        /// get name
        /// </summary>
        /// <param name="webElement"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static IWebElement GetElementByName(this IWebElement webElement, string name)
        {
            if (webElement == null)
                return null;
            return webElement.FindElement(By.Name(name));
        }
        /// <summary>
        ///  TagName
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="tagName"></param>
        /// <returns></returns>
        public static IWebElement GetElementByTagName(this IWebDriver driver, string tagName)
        {
            if (driver == null)
                return null;
            return driver.FindElement(By.TagName(tagName));
        }
        /// <summary>
        /// ElementByTagName
        /// </summary>
        /// <param name="webElement"></param>
        /// <param name="tagName"></param>
        /// <returns></returns>
        public static IWebElement GetElementByTagName(this IWebElement webElement, string tagName)
        {
            if (webElement == null)
                return null;
            return webElement.FindElement(By.TagName(tagName));
        }
        /// <summary>
        /// GetElemenstByTagName
        /// </summary>
        /// <param name="webElement"></param>
        /// <param name="tagName"></param>
        /// <returns></returns>
        public static IList<IWebElement> GetElemenstByTagName(this IWebElement webElement, string tagName)
        {
            if (webElement == null)
                return null;
            return webElement.FindElements(By.TagName(tagName));
        }
 
        /// <summary>
        /// ByTagName
        /// </summary>
        /// <param name="webElement"></param>
        /// <param name="tagName"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static IWebElement GetElementByTagName(this IWebElement webElement, string tagName, string key,
            string value)
        {
            if (webElement == null)
                return null;
            var searchList = webElement.FindElements(By.TagName(tagName));
            if (searchList != null && searchList.Count > 0)
            {
 
                for (int elementIndex = 0; elementIndex < searchList.Count; elementIndex++)
                {
                    var element = searchList[elementIndex];
                    if (element.GetAttribute(key).Trim() == value.Trim())
                    {
                        return element;
                    }
                }
            }
            return null;
        }
 
        /// <summary>
        /// ByTagName
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="tagName"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static IWebElement GetElementByTagName(this IWebDriver driver, string tagName, string key, string value)
        {
            if (driver == null)
                return null;
            var searchList = driver.FindElements(By.TagName(tagName));
            if (searchList != null && searchList.Count > 0)
            {
 
                for (int elementIndex = 0; elementIndex < searchList.Count; elementIndex++)
                {
                    var element = searchList[elementIndex];
                    if (element.GetAttribute(key).Trim() == value.Trim())
                    {
                        return element;
                    }
                }
            }
            return null;
        }
 
        /// <summary>
        /// ByTagName
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="tagName"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static IList<IWebElement> GetElementsByTagName(this IWebDriver driver, string tagName, string key,
            string value)
        {
            var elementList = new List<IWebElement>();
            if (driver == null)
                return elementList;
            var searchList = driver.FindElements(By.TagName(tagName));
            if (searchList != null && searchList.Count > 0)
            {
                for (int elementIndex = 0; elementIndex < searchList.Count; elementIndex++)
                {
                    var element = searchList[elementIndex];
                    if (element.Displayed)
                    {
                        if (element.GetAttribute(key).Trim() == value.Trim())
                        {
                            elementList.Add(element);
                        }
                    }
 
                }
            }
            return elementList;
        }
        /// <summary>
        /// ByTagName
        /// </summary>
        /// <param name="element"></param>
        /// <param name="tagName"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static IList<IWebElement> GetElementsByTagName(this IWebElement element, string tagName, string key,
            string value)
        {
            var elementList = new List<IWebElement>();
            if (element == null)
                return elementList;
            var searchList = element.FindElements(By.TagName(tagName));
            if (searchList != null && searchList.Count > 0)
            {
                for (int elementIndex = 0; elementIndex < searchList.Count; elementIndex++)
                {
                    var elementSub = searchList[elementIndex];
                    if (elementSub.GetAttribute(key).Trim() == value.Trim())
                    {
                        elementList.Add(elementSub);
                    }
                }
            }
            return elementList;
        }
        /// <summary>
        /// ByTagName
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="tagName"></param>
        /// <param name="key1"></param>
        /// <param name="value1"></param>
        /// <param name="key2"></param>
        ///<param name="value2"></param>
        /// <returns></returns>
        public static IList<IWebElement> GetElementsByTagName(this IWebDriver driver, string tagName, string key1, string value1,
            string key2, string value2)
        {
            if (driver == null)
                return null;
            var elementList = new List<IWebElement>();
            var searchList = driver.FindElements(By.TagName(tagName));
            if (searchList != null && searchList.Count > 0)
            {
                for (int elementIndex = 0; elementIndex < searchList.Count; elementIndex++)
                {
                    var element = searchList[elementIndex];
                    if (element.GetAttribute(key1).Trim() == value1.Trim() && element.GetAttribute(key2) == value2)
                    {
                        elementList.Add(element);
                    }
                }
            }
            return elementList;
        }
        /// <summary>
        /// ByTagName
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="tagName"></param>
        /// <param name="key1"></param>
        /// <param name="value1"></param>
        /// <param name="key2"></param>
        ///<param name="value2"></param>
        /// <returns></returns>
        public static IWebElement GetElementByTagName(this IWebDriver driver, string tagName, string key1, string value1,
            string key2, string value2)
        {
            if (driver == null)
                return null;
            var searchList = driver.FindElements(By.TagName(tagName));
            if (searchList != null && searchList.Count > 0)
            {
 
                for (int elementIndex = 0; elementIndex < searchList.Count; elementIndex++)
                {
                    var element = searchList[elementIndex];
                    if (element.GetAttribute(key1).Trim() == value1.Trim() && element.GetAttribute(key2) == value2)
                    {
                        return element;
                    }
                }
            }
            return null;
        }
 
        /// <summary>
        /// ByCssSelector
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="cssSelector"></param>
        /// <returns></returns>
        public static IWebElement GetElementByCssSelector(this IWebDriver driver, string cssSelector)
        {
            if (driver == null)
                return null;
            return driver.FindElement(By.CssSelector(cssSelector));
        }
 
        /// <summary>
        /// ByCssSelector
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="cssSelector"></param>
        /// <returns></returns>
        public static IList<IWebElement> GetElementsByCssSelector(this IWebDriver driver, string cssSelector)
        {
            if (driver == null)
                return null;
            return driver.FindElements(By.CssSelector(cssSelector));
        }
        /// <summary>
        /// ByCssSelector
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="cssName"></param>
        /// <returns></returns>
        public static IList<IWebElement> GetElementsByCss(this IWebDriver driver, string cssName)
        {
            if (driver == null)
                return null;
            return driver.FindElements(By.ClassName(cssName));
        }
        /// <summary>
        /// ByPartialLinkText
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="partialLinkText"></param>
        /// <returns></returns>
        public static IWebElement GetElementByPartialLinkText(this IWebDriver driver, string partialLinkText)
        {
            if (driver == null)
                return null;
            return driver.FindElement(By.PartialLinkText(partialLinkText));
        }
        /// <summary>
        /// ByPartialLinkText
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="partialLinkText"></param>
        /// <returns></returns>
        public static IList<IWebElement> GetElementsByPartialLinkText(this IWebDriver driver, string partialLinkText)
        {
            if (driver == null)
                return null;
            return driver.FindElements(By.PartialLinkText(partialLinkText));
        }
        /// <summary>
        /// ByLinkTex
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="linkText"></param>
        /// <returns></returns>
        public static IWebElement GetElementByLinkText(this IWebDriver driver, string linkText)
        {
            if (driver == null)
                return null;
            return driver.FindElement(By.LinkText(linkText));
        }
 
        /// <summary>
        /// 
        /// </summary>
        /// <param name="element"></param>
        /// <param name="linkText"></param>
        /// <returns></returns>
        public static IWebElement GetElementByLinkText(this IWebElement element, string linkText)
        {
            return element.FindElement(By.LinkText(linkText));
        }
 
        /// <summary>
        /// get links by css selector(rules:parentCssSelecter + " a",默认body a),去除重复数据
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="parentCssSelecter"></param>
        /// <returns></returns>
        public static IList<string> HrefList(this IWebDriver driver, string parentCssSelecter = "body")
        {
            return driver.FindElements(By.CssSelector(parentCssSelecter + " a"))
                .Select(l => l.GetAttribute("href")).Distinct().ToList();
        }
 
        /// <summary>
        /// get page links by css selector(rules:parentCssSelecter + " .pager ul li a",默认body .pager ul li a),去除重复数据
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="parentCssSelecter"></param>
        /// <returns></returns>
        public static IList<string> GetPageListLinks(this IWebDriver driver, string parentCssSelecter = "body")
        {
            var result = driver.FindElements(By.CssSelector(parentCssSelecter + " .pager ul li a"))
                .Select(l => l.GetAttribute("href")).Distinct().ToList();
            result.Add(driver.Url);//current
            return result;
        }
 
        #region 页面跳转
        /// <summary>
        /// 跳转
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="url"></param>
        public static void Redirct(this IWebDriver driver, string url)
        {
            driver.Navigate().GoToUrl(url);
        }
        #endregion
 
        #region 保存截图和详情
        ///  <summary>
        ///  This will Take the screen shot of the webpage and will save it at particular location
        ///  </summary>      ///
        /// <param name="driver"></param>
        /// <param name="screenshotFirstName"></param>
        /// <param name="imageFormat"></param>
        public static void SaveScreenShot(this IWebDriver driver, string screenshotFirstName, string imageFormat = ".png")
        {
            var folderLocation = Environment.CurrentDirectory.Replace("Out", "\\ScreenShot\\");
            if (!Directory.Exists(folderLocation))
            {
                Directory.CreateDirectory(folderLocation);
            }
            var screenshot = ((ITakesScreenshot)driver).GetScreenshot();
            var filename = new StringBuilder(folderLocation);
            filename.Append(screenshotFirstName);
            filename.Append(DateTime.Now.ToString("dd-mm-yyyy HH_mm_ss"));
            filename.Append(imageFormat);
 
            if (File.Exists(filename.ToString()))
            {
                File.Delete(filename.ToString());
            }
 
            screenshot.SaveAsFile(filename.ToString(), System.Drawing.Imaging.ImageFormat.Png);
        }
        /// <summary>
        /// 保存文件
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="fileName"></param>
        /// <param name="details"></param>
        public static void SaveFile(this IWebDriver driver, string fileName, string details)
        {
            var folderLocation = Environment.CurrentDirectory.Replace("Out", "\\ScreenShot\\");
            if (!Directory.Exists(folderLocation))
            {
                Directory.CreateDirectory(folderLocation);
            }
            var filename = new StringBuilder(folderLocation);
            filename.Append(fileName);
            filename.Append(DateTime.Now.ToString("dd-mm-yyyy HH_mm_ss"));
            filename.Append(".txt");
 
            var fullPath = filename.ToString();
            if (File.Exists(filename.ToString()))
            {
                File.Delete(filename.ToString());
            }
            using (var file = new StreamWriter(fullPath))
            {
                file.WriteLine(details);
            }
        }
        #endregion
 
        /// <summary>
        ///  判断是否弹框出现
        /// </summary>
        /// <param name="driver"></param>
        /// <returns></returns>
        public static bool IsAlertPresent(this IWebDriver driver)
        {
            try
            {
                driver.SwitchTo().Alert();
                return true;
            }   // try 
            catch (NoAlertPresentException ex)
            {
                return false;
            }   // catch 
        }
 
        /// <summary>
        /// 确定
        /// </summary>
        /// <param name="driver"></param>
        /// <returns></returns>
        public static bool AlertAccept(this IWebDriver driver)
        {
            try
            {
                driver.SwitchTo().Alert().Accept();
                return true;
            }   // try 
            catch (NoAlertPresentException ex)
            {
                return false;
            }   // catch 
        }
 
        #region javascript
        /// <summary>
        /// Js   Scripts execute
        /// </summary>
        /// <param name="driver"></param>
        /// <returns></returns>
        public static IJavaScriptExecutor Scripts(this IWebDriver driver)
        {
            return (IJavaScriptExecutor)driver;
        }
 
        /// <summary>
        /// 执行js脚本
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="js"></param>
        public static object ExcuteScripts(this IWebDriver driver, string js)
        {
            return driver.Scripts().ExecuteScript(js);
        }
 
        /// <summary>
        /// 兼容FF google 的A click执行方式
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="aWebElement"></param>
        public static void AClick(this IWebDriver driver, IWebElement aWebElement)
        {
            driver.Scripts().ExecuteScript("arguments[0].click();", aWebElement);
        }
 
        /// <summary>
        /// 执行jquery 选择器
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="cssSelecter"></param>
        /// <returns></returns>
        public static IWebElement DisplayByCssSelecter(this IWebDriver driver, string cssSelecter)
        {
            return
                (IWebElement)
                    driver.ExcuteScripts(string.Format("var result=$(\"{0}\");result.show();return result[0];",
                        cssSelecter));
        }
        #endregion
    }
}
posted @ 2014-04-26 21:58  小毛驴  阅读(567)  评论(0编辑  收藏  举报